java “void” 和 “non void” 构造函数

2022-09-02 14:24:53

我用java编写了这个简单的类,只是为了测试它的一些功能。

public class class1 {
    public static Integer value=0;
    public class1() {
       da();
    }
    public int da() {
        class1.value=class1.value+1;
        return 5;
    }
    public static void main(String[] args) {
       class1 h  = new class1();
       class1 h2 = new class1();
       System.out.println(class1.value);
    }
}

输出为:

2

但在此代码中:

public class class1 {
    public static Integer value=0;
    public void class1() {
        da();
    }
    public int da() {
        class1.value=class1.value+1;
        return 5;
    }
    public static void main(String[] args) {
        class1 h  = new class1();
        class1 h2 = new class1();
        System.out.println(class1.value);
    }
}

此代码的输出为:

0

那么,当我在构造函数方法声明中使用时,为什么类的静态字段不再更改呢?void


答案 1

在Java中,构造函数不是一个方法。它只有类的名称和特定的可见性。如果它声明返回某些内容,则它不是构造函数,即使它声明返回 .请注意此处的区别:void

public class SomeClass {
    public SomeClass() {
        //constructor
    }
    public void SomeClass() {
        //a method, NOT a constructor
    }
}

此外,如果类未定义构造函数,则编译器将自动为您添加默认构造函数。


答案 2

public void class1() 不是构造函数,它是一个 void 方法,其名称恰好与类名匹配。它从不被调用。相反,java会创建一个默认构造函数(因为您尚未创建一个),该构造函数不执行任何操作。