静态块不构造
问题描述:
我被困在一个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");
}
}
答
静态成员不是实例成员。这意味着它们附加(绑定)到类本身而不是类的实例。这里有TeacherEx
类的4个实例,但这对静态成员无关紧要。即使您没有任何课程实例,您也可以访问static
成员。
试一试:当类是由JVM在运行时被初始化
public static void main(String[] args) {
println(TeacherEx.t.toString());
}
静态块将被执行。另一方面,当运行时正在执行实例(new TeacherEx(...)
)时,将调用构造函数。
+0
非常感谢@Nader Hadji Ghanbari –
没有问题。当类最初被加载时,静态块被执行,只发生一次。如果你想让代码在对象实例上执行,把它放在构造函数中。 –
或者换句话说......问题是1)你不明白静态和静态初始化是如何工作的,2)你可能根本不应该在这里使用'static'。 –
我知道静态的概念。我试着用静态的所有可能的东西 –