0

私はこのようなクラスを持っています

public class StockCodes
{

    public static boolean loaded = false;
    public static long lastUpdate = 0;
    private static long freq = 1000 * 60 * 60 * 24;
    public static HashMap<String, Stock> stockMap = new HashMap<String, Stock>();

    public static ArrayList<Stock> getCodes()
    {
        long now = System.currentTimeMillis();
        if ((StockCodes.loaded) && ((now - StockCodes.lastUpdate) < freq))
        {
            System.out.println(StockCodes.loaded);
            return stockList;

        } 
    else
        {
            HttpFetcher fetcher = new HttpFetcher();

        ....

            log.info("Load " + stockList.size() + " Stocks");
            StockCodes.loaded = true;
            StockCodes.lastUpdate = now;
            return stockList;
        }
    }


    public static void main(String[] args)
    {
        StockCodes.getCodes();
    }
}

Java アプリケーションを実行すると、「true」が出力されます。ストックコードがロードされたことを知らせます。しかし、Java アプリケーションをデバッグすると、else に入ります。このように実行される理由、特にアプリケーションを初めて実行したときに「true」を出力する理由がわかりません。他の誰かが私に助けをくれませんか、ありがとう〜

4

4 に答える 4

0

関数が複数回実行された場合、 getCodes() 関数は基本的に結果をキャッシュします。最初の getCodes() は「true」を出力しませんが、後続のすべての呼び出しは

コマンドラインから実行

public static void main(String[] args)
{
    StockCodes.getCodes();
}

これにより、STDOUT には何も出力されません。

于 2012-04-23T04:05:12.327 に答える
0

上記のコードでは、デフォルトのコントロールは常にelseブロックに入り、何も出力しません。確認できます。

メソッドを呼び出す場所が他にもある場合は、getCodes()違います。とは言っても他に に電話するところがないか確認してみてくださいgetCodes()。つまり、経由で1回呼び出されますmain()

于 2012-04-23T04:05:14.590 に答える
0

あなたのif発言はきれいです。私がこのようなタイプの間違いを犯したとき、私は昔ながらの方法に行きます。一連のものを入れました

System.out.println

コードのそのセクションのステートメントを使用して、デバッグ モードでないときにコードがどこに行くのかを追跡します。不格好ですが、機能します。

于 2012-04-23T04:13:37.633 に答える
0

コードをelse実行すると、デバッグ モードで実行するか、通常のモードで実行するかが決まります。

コードの行を失ったと思います。System.out.println(StockCodes.loaded); はありましたか? あなたのelse支店でも?そうした場合、StockCodes.loaded = true;それを行の下に配置すると、印刷trueされます。

より詳細なデバッグを使用することをお勧めします。System.out.println("In the if branch");これは、else ブランチのその下のようなもので、 System.out.println("In the else branch"); I think you are tricking yourself by too small output. のような行です。

于 2012-04-23T04:14:16.090 に答える