有一个类似的问题 Constructor is static or non static
但很少有答案告诉构造函数是静态的,很少有人告诉构造函数是非静态的。这令人困惑。那么有人可以澄清构造函数本质上是静态的还是非静态的?
答案 0 :(得分:4)
这是Java规范中关于构造函数的内容,在§8.8.3. Constructor Modifiers中:
与方法不同,构造函数不能是
abstract
,static
,final
,native
,strictfp
或synchronized
:
答案 1 :(得分:1)
我不确定哪个答案让你感到困惑。但在Java中,构造函数并不是静态的。
请参阅以下示例:
public class MyTest {
public static void main(String[] args) {
new Test(); // Prints reference within the constructor
new Test(); // The reference is different here
}
}
class Test {
public Test() {
System.out.println(this.toString());
}
}
正如您所看到的,通过两次调用构造函数,您将获得对该对象的两个不同引用。这意味着构造函数的上下文不是静态的。
您的类中可能有工厂方法,这些方法是静态的并且创建实例:
班级考试{
// May be called like Test.create() and returns instance
public static Test create() {
return new Test();
}
但是在这些方法中,你仍然需要调用类构造函数。正如我之前演示的那样,这不是一成不变的。