2012-04-23 15 views
0

私はこのJavaの静的メソッド

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アプリケーションを実行すると、それは「真」を出力のようなクラスを持っています。私たちに株式コードを教えてくれました。 しかし、私はJavaのapplictionをデバッグすると、elseに入ります。私はなぜこのように動作するのか、特にアプリケーションを初めて実行するときに "真"を出力する理由を理解していません。他の誰かが私に助けてくれました、ありがとう〜

+0

"' .... '"には何がありますか?おそらく 'StockCodes.getCodes()'コール? –

+0

どちらの場合でも、何をしていますか?あなたが私たちに示したことから、このプログラムは本当に出力されるべきではありませんが、メインメソッドを実行してデバッグしているように見え、終了する前にStockCodes = trueを設定する何か他のJavaアプリケーションを実行すると、 – dfb

+0

ブール変数を使用する利点はありません。代わりにinitメソッドを使うことができます(一度Boolean変数を真の状態に設定すると、それは永遠に残っています) –

答えて

0

上記のコードでは、デフォルトでコントロールは常にelseブロックに入り、何も印刷しません。それを確認することができます。

getCodes()メソッドを呼び出す場所が他にもある場合は、それが異なります。これを言って、getCodes()への電話がある他の場所がないかどうかを確認してください。すなわち、その一回の呼び出しはmain()

0

getCodes()関数は、関数が複数回実行された場合、結果をキャッシュします。最初getCodes()「真」の印刷が、すべての後続の呼び出しは、コマンドラインから

実行

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

これはSTDOUTに出力し、何もする必要があります。意志はありません

0

ifです。私がこれらのタイプの間違いの1つを持っているとき、私は古いファッションルートに行きます。私はあなたのコードが起こっている場所を追跡するために、コードのそのセクションに

System.out.println 

一連のステートメントを入れたときにそれはないデバッグモードインチそれはclunkyですが、それは動作します。

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");のような行があります。出力が小さすぎて自分自身を騙していると思います。

関連する問題