2017-11-13 24 views
-1

Javaでは、クラスのオブジェクトが作成される直前にクラスがロードされます。クラスは、プログラムの全期間中に1回だけロードされます。 これが起こると、スタティックが初期化され、スタティックブロックが実行されます。 これはサイクリックにすることができます。クラスが完全に初期化される前に、私は自分自身のクラスにそのクラスのオブジェクトを作成しました。例えばのために :巡回クラスの初期化

public class MyTestClass{ 

public static MyTestClass myTest= new MyTestClass(); 

} 


public class Beginner{ 

public static void main(String[] args){ 
System.out.println(MyTestClass.myTest==null); 
} 
} 

私は非常に初めてメインでMyTestClass.myTest()を呼び出します。 MyTestClassが読み込み中になり、読み込み中にMyTestClassのオブジェクトを作成しようとします。循環的なクラスのロードを作成しないでください。これは無限になりますか? これはどのようにjavaで処理されるのですか?

+0

そのコードはコンパイルされません。あなたの質問で実際のコードを投稿してください。 –

+0

あなたは 'public class Beginner {'ではなくpublic class Beginner {'? –

+0

私は彼がそれを意味すると思う:-) – IEE1394

答えて

1

イベントのシーケンスは次のようである:クラスがロードされ、検証され

  1. 、すべての静的memebersはnullに設定されるか、またはクラスの0
  2. 静的イニシャライザとブロックが語彙に(実行されますクラスを必要なコードは、あなたのケースで

初期化子の実行を進める

  • 順序が)

    0を含んでいます
    public static MyTestClass myTest= new MyTestClass(); 
    

    つまり、mainのコードは、ヌルではないMyTestClass.myTestと表示されます。

    MyTestClass.myTestがnullの唯一の時刻は、静的初期化子で作成されたMyTestClassインスタンスのコンストラクタにあります。