在main方法中,为什么我们可以调用同一类的构造函数?

时间:2019-09-19 05:58:01

标签: java constructor main

这与我的理解相反。如果我错了,请纠正我。 Java不允许静态引用非静态方法,但是我们一直在从主方法中调用构造函数方法。我假设这里的构造函数是隐式非静态的。

    public class Temp {
        // Constructor
        public Temp(){
        }
        public static void main(String[] args) {
            // Calling constructor within main method
            Temp tmp = new Temp();
        }
    }

1 个答案:

答案 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一样引发异常。