这与我的理解相反。如果我错了,请纠正我。 Java不允许静态引用非静态方法,但是我们一直在从主方法中调用构造函数方法。我假设这里的构造函数是隐式非静态的。
public class Temp {
// Constructor
public Temp(){
}
public static void main(String[] args) {
// Calling constructor within main method
Temp tmp = new Temp();
}
}
答案 0 :(得分:0)
它是new和构造函数的组合,这是允许main方法调用构造函数的原因。 如果可以的话 创建一个构造函数:
公共SampleTest(){}
从主方法调用它:
方案1:,如果我直接从main方法调用该构造函数而没有新关键字::
SampleTest();
结果1:它抛出了编译时异常“未为类型SampleTest定义方法SampleTest()”
方案2:,如果我在该类中创建了一个名为SampleTest()的方法,如下所示(其返回类型为void,因为我们没有构造函数的返回类型):>
public void SampleTest() {}
public static void main(String[] args){
SampleTest();
}
结果2:抛出编译时异常“无法从类型SampleTest静态引用非静态方法SampleTest()”
方案3:现在,如果在构造函数调用之前添加新关键字,如下所示:
new SampleTest();
结果3:,所以现在仅在主方法中允许使用 new 运算符与 constructor 调用的组合,而不会显示任何异常
因此,最后,从main方法调用构造函数的原因是new和构造函数的组合。否则,它将构造函数视为任何其他实例方法,并如结果1和2一样引发异常。