2017-02-15 60 views
-3

我被困在一个problem.There之前执行三类 1.Teacher 2.TeacherEx 3.TeacherClass静态块不构造

我做教师类的静态对象public static Teacher t 当我我在TeacherClass中制作TeacherEx的4个对象,TeacherEx中的静态块只执行一次,而它必须执行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)你可能根本不应该在这里使用'static'。 –

+0

我知道静态的概念。我试着用静态的所有可能的东西 –

回答

1

静态成员不是实例成员。这意味着它们附加(绑定)到类本身而不是类的实例。这里有TeacherEx类的4个实例,但这对静态成员无关紧要。即使您没有任何课程实例,您也可以访问static成员。

试一试:当类是由JVM在运行时被初始化

public static void main(String[] args) { 

    println(TeacherEx.t.toString()); 

} 

静态块将被执行。另一方面,当运行时正在执行实例(new TeacherEx(...))时,将调用构造函数。

+0

非常感谢@Nader Hadji Ghanbari –