2017-02-15 3 views
-3

前に実行されていない私は、私は先生のクラスの静的オブジェクトにpublic static Teacher t ときに私を作っています3クラス 1.Teacher 2.TeacherEx 3.TeacherClass静的ブロックがコンストラクタ

ある1 problem.Thereで立ち往生していますTeacherExのオブジェクトをTeacherClassにすると、TeacherExの静的ブロックは1回だけ実行されますが、4回実行される必要があります。 誰も私の問題を正確に説明できますか?クラスの

すべての3つのクラス 先生のクラス

public class Teacher { 
    public static String name; 
    public static String subject; 
    public static int nolec; 
} 

public static class TeacherEx { 

public int noStd; 
public String place; 
public static Teacher t; 


public TeacherEx(int no, String p) 
{ 
    noStd=no; 
    place=p; 

    t.name="prashantha"; 
    t.subject="Java_classes"; 
    t.nolec++; 

    System.out.println("The nos of lec after creation class are "+t.nolec); 

} 


static{ 

    if(t==null) 
    { 
     t=new Teacher(); 
    } 
    else 
    { 
     System.out.println("Nothing"); 
    } 

    System.out.println("The nos of lec before this class creation are "+t.nolec); 
} 

} 


public class TeacherClass { 

public static void main(String[] args) 
{ 

    TeacherEx a=new TeacherEx(45,"banglore"); 

    TeacherEx b=new TeacherEx(75,"Mumbai"); 


    TeacherEx c=new TeacherEx(49,"chennai"); 

    TeacherEx d=new TeacherEx(47,"Newyork"); 

} 

} 
+6

問題ありません。静的ブロックは、クラスが最初にロードされたときに実行されます。クラスは最初にロードされます。オブジェクトのインスタンス化でコードを実行する場合は、コンストラクタに配置します。 –

+2

...別の言い方をすると...問題は1)静的な初期化の仕組みが理解できず、2)おそらくここで '静的な 'ものを使うべきではないでしょう。 –

+0

私は静的な概念を知っています。私はすべて静的な可能性を試していました。 –

答えて

1

を投稿静的メンバはインスタンスメンバではありません。つまり、それらはクラス自体には(バインドされて)あり、クラスのインスタンスには(バインドされて)いません。ここにはTeacherExクラスのインスタンスが4つありますが、静的メンバーには関係ありません。クラスのインスタンスがない場合でも、staticメンバーにアクセスできます。

それを自分で試してみてください:クラスは、実行時にJVMによって初期化されているとき

public static void main(String[] args) { 

    println(TeacherEx.t.toString()); 

} 

静的ブロックが実行されます。一方、実際のインスタンス化(new TeacherEx(...))が実行時に実行されている場合、コンストラクターが呼び出されます。

+0

ありがとうございました@Nader Hadji Ghanbari –

関連する問題