首页 > 解决方案 > 在main方法中,为什么可以调用同一个类的构造函数呢?

问题描述

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

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

标签: javaconstructormain

解决方案


它是 new 和 constructor 的结合,允许在 main 方法中调用构造函数的原因。如果假设,创建一个构造函数:

公共 SampleTest(){}

从 main 方法调用它:

场景 1:如果我直接从 main 方法调用该构造函数而不使用 new 关键字::

    SampleTest();

结果 1:它抛出编译时异常“SampleTest 类型的方法 SampleTest() 未定义”

场景 2:如果我在该类中创建了一个名为 SampleTest() 的方法,如下所示(其返回类型为 void,因为我们没有构造函数的返回类型):

  public void SampleTest() {}

  public static void main(String[] args){
    SampleTest();
  }

结果 2:它抛出编译时异常“无法从 SampleTest 类型对非静态方法 SampleTest() 进行静态引用”

场景 3:现在如果在构造函数调用之前添加 new 关键字,如下所示:

  new  SampleTest();

结果 3:所以现在只允许在 main 方法中使用new运算符和构造函数调用的组合,而不会显示任何异常。

所以最后,从 main 方法调用构造函数背后的原因是 new 和构造函数的组合。否则,它将构造函数视为任何其他实例方法,抛出异常,如结果 1 和 2。


推荐阅读