Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 静态块未在构造函数之前执行_Java - Fatal编程技术网

Java 静态块未在构造函数之前执行

Java 静态块未在构造函数之前执行,java,Java,我被困在一个问题里。有三门课 1.教师 2.教师 3.教师课堂 我正在制作一个教师课堂的静态对象公共静态教师t 当我在TeacherClass中创建4个TeacherEx对象时,TeacherEx中的静态块只执行一次,而必须执行4次。 谁能解释一下到底是什么问题吗 发布所有3个类 教师班 public class Teacher { public static String name; public static String subject; public static

我被困在一个问题里。有三门课 1.教师 2.教师 3.教师课堂

我正在制作一个教师课堂的静态对象
公共静态教师t
当我在
TeacherClass
中创建4个
TeacherEx
对象时,
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");

}

}

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

你自己试试吧:

public static void main(String[] args) {

    println(TeacherEx.t.toString());

}

当JVM在运行时初始化类时,将执行静态块。另一方面,在运行时执行实际实例化(
newteacherex(…)
)时,将调用构造函数

没问题。静态块在类最初加载时执行,只发生一次。如果您希望在对象实例化时执行代码,请将其放入构造函数中。或者。。。换句话说。。。问题是1)你不了解静态和静态初始化是如何工作的,2)你可能根本不应该在这里使用
静态
。我知道静态概念。我尝试了所有可能的静态方法抱歉。不。如果你认为(不知何故)一个
静态
初始化会运行不止一次,你就不明白
静态
。非常感谢@Nader Hadji Ghanbari