java - 静态方法(main)如何能够捕获非静态方法(构造函数)并执行它?

标签 java constructor static non-static

这似乎是一个非常基本的查询,但我在思考下面的静态方法 main() 如何能够使用 new 关键字从中执行非静态方法(显然是构造函数)。虽然我知道 new 也带来了一些其他的东西,但我应该如何说服自己这不是静态和非静态方法不能使用非静态的规则的异常(exception)和静态上下文?

示例代码如下:

public class ConstructorTest {

    ConstructorTest(String str)
    {
        System.out.println("Constructor Printing "+str);
    }


    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ConstructorTest cnst=new ConstructorTest("here");
    }

} 

上面的代码实际打印了 --> Constructor Printing here

换句话说,从静态方法执行非静态方法的主体?

欢迎任何合理的解释。

最佳答案

Java Tutorial指出

[...] Constructors are not members.

因此,调用它们没有问题,因为它们没有绑定(bind)到您的类的实例。这没有意义 - 因此,您不能执行以下操作:

Thing thing = new Thing();
Thing anotherThing = thing.Thing();

构造函数不是方法,因此您不能对它们应用“方法逻辑”。 如果您想了解更多信息,整个实例化过程在 JLS 中有很好的记录。 .参见 12.5。新类实例的创建

关于java - 静态方法(main)如何能够捕获非静态方法(构造函数)并执行它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24652407/

相关文章:

c++ - 从静态函数调用非静态变量

Java Swing - 在 JLabel.setVisible(...) 上调整对话框大小

java - Java 中引用属性的问题

C++构造函数原型(prototype)参数

c++ - 类静态函数中变量的非静态成员引用

java - 静态数组如何存储在 Java 内存中?

java - 在python子进程中发送字符串作为参数

java - 尝试使用 "setVariable"

java - 具有两个变量的 For 循环

java - Intellij IDEA : How to change all constructor calls after refactoring the constructor itself?