静态对象与构造函数,为什么构造函数首先执行并在静态引用变量中分配

时间:2019-01-18 09:41:54

标签: java constructor static

public class testing {
    static testing tmp = new testing();

    testing() {
        System.out.println("You are good");
    }

    public static void main(String... str) {

    }
}

在上面的代码中,“您很好”被打印出来。但是我想知道为什么发生这种情况,因为构造函数是非静态方法,并且静态变量先于非静态方法执行。

2 个答案:

答案 0 :(得分:0)

静态变量在类首次加载时初始化。在您的情况下,静态变量引用的是同一类的构造函数,因此将调用cunstructor。然后将打印语句System.out.println("You are good");
问类似的问题here

在以下情况下,该语句将不会打印

// 1. Non-static declaration
testing tmp = new testing();

// 2. Initialization skipped - no call to constructor
testing tmp2 = null; //new testing();

答案 1 :(得分:0)

静态变量tmp的声明使用构造函数初始化testing的新实例。如果构造函数在静态变量的声明内被调用,则从技术上讲,该构造函数在技术上是非静态的都没关系。

更准确地说,在加载类定义期间的某个时刻,将初始化类的静态变量。这完全独立于代码稍后对静态或实例方法的任何调用。