Java中的构造函数本质上是静态的还是非静态的?

Java中的构造函数本质上是静态的还是非静态的?,java,constructor,Java,Constructor,还有一个类似的问题 但很少有答案告诉我们构造函数是静态的,也很少有答案告诉我们构造函数是非静态的。这令人困惑。所以,有谁能澄清一下,构造函数本质上是静态的还是非静态的 我不知道是哪个答案把你弄糊涂了。但在Java中,构造函数不是静态的 请参见以下示例: public class MyTest { public static void main(String[] args) { new Test(); // Prints reference within the cons

还有一个类似的问题


但很少有答案告诉我们构造函数是静态的,也很少有答案告诉我们构造函数是非静态的。这令人困惑。所以,有谁能澄清一下,构造函数本质上是静态的还是非静态的

我不知道是哪个答案把你弄糊涂了。但在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();
}

但是在这些方法中,您仍然需要调用类构造函数。正如我前面演示的,类构造函数不是静态的。

这是Java规范关于构造函数的说明,在:

与方法不同,构造函数不能是
抽象的
静态的
最终的
本地的
strictfp
,或
同步的

  • 构造函数不是继承的,因此不需要声明它
    final

  • 抽象
    构造函数永远无法实现

  • 构造函数总是针对对象调用的,因此构造函数是
    静态的

  • 实际上不需要对构造函数进行同步,因为它会锁定正在构造的对象,在对象的所有构造函数完成工作之前,其他线程通常无法使用该对象

  • 缺少
    native
    构造函数是一种任意的语言设计选择,这使得Java虚拟机的实现很容易验证在对象创建过程中始终正确调用超类构造函数

  • 无法将构造函数声明为
    strictfp
    (与方法()相反)是有意的语言设计选择;它有效地确保了构造函数在且仅在其类为FP-strict()时为FP-strict


?IMHO,最好将构造函数视为特殊的东西(即,不是真正的方法)这里你是如何定义静态的?静态是指构造函数是属于类还是属于类的特定实例。我想说两者都有一点。它属于类,是指你可以在没有类实例的情况下调用它。但它属于实例,是指你可以引用/调用实例memb“@Andreas很抱歉,有两个不同的引用不是不言自明的吗?你没有两个引用,因为代码从未到达第二个语句。--另外,我没有说你错了,只是你需要解释一下。因此,如果你做了
Test t=Test.create();Test t2=Test.create();
,调用一个静态方法两次以获得两个引用,这使得创建方法非静态?@Saathvik如果引用不相同,对象也不相同。@sepp2k如果答案是
构造函数中的这个
每次都是不同的引用,那么答案应该是这样的,这就是我一直以来的想法寻找答案,以及为什么我仍然反对投票。答案没有说明或解释任何关于
这个
,JB的评论也没有,就JB的评论而言,它突出了答案中缺乏解释,即答案不清楚。