2016-08-19 1 views
0

基本的な質問かもしれませんが、私が持っているいくつかの混乱を明らかにしたいと思います。グローバル変数をどこに置いても問題はありませんか?例えば;Javaでグローバル変数をどこに置いても問題ありませんか?

int globalVariable = 3; 

//Some Method here which DOES NOT use the globalVariable 

異なる:クラス内のフィールド宣言の

//Some methods here which don't use the globalVariable 

int globalVariable = 3 

//Some methods here which use the globalVariable 
+2

に変更します 'globalVariable'は、グローバル変数ではありません。配置が重要かどうかを判断するために、より多くのコンテキストを提供する必要があります。 – dasblinkenlight

+1

もちろん、それは重要です。しかし、あなたの例に違いはありません。 – byxor

+1

答えは*おそらく*違いはありません。どのようなメソッド(または他の初期化子)が直接的または間接的に値を参照してから1に初期化されるかが問題になります。 –

答えて

1

相対的な配置は、2つの状況で適切である:

  • フィールドは、他のフィールドの初期化式内で参照されています - このような状況では、参照されるフィールドはそれを参照するフィールドの前に宣言されなければなりません。それ以外の場合、コードは "不正な前方参照"エラーでコンパイルされません。上記は、フィールドの宣言(demo)の前に置かれた匿名初期化ブロックから参照されるフィールドについても当てはまります。
  • フィールドイニシャライザには副作用があります。 - この状況では、他のイニシャライザの前後にイニシャライザを配置すると、副作用の順序が変わります。

    class Test { 
        int a = foo("hello"); 
        int b = foo("world"); 
        static int foo(String s) { 
         System.out.println(s); 
         return 3; 
        } 
    } 
    

    上記プリント

    hello 
    world 
    

    Testオブジェクトが構築されるたびに:

ここでは、第二の点の説明図です。あなたがbの宣言の後にaの宣言を移動した場合、プリントアウトが

world 
hello 
+0

匿名のコンストラクタ '{/ *変数を使用するコード* /}' – talex

+0

@talexそれは、公平な匿名のコンストラクタブロックがプレーンフィールドイニシャライザと同じカテゴリに入ることです。ありがとう! – dasblinkenlight

関連する問題