java"void"和"non void"构造函数

Had*_*adi 11 java constructor void

我在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);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码的输出是:

0

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

Lui*_*oza 42

在Java中,构造函数不是方法.它只有类的名称和特定的可见性.如果它声明返回一些东西,那么它不是一个构造函数,即使它声明返回一个void.请注意这里的区别:

public class SomeClass {
    public SomeClass() {
        //constructor
    }
    public void SomeClass() {
        //a method, NOT a constructor
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,如果类没有定义构造函数,那么编译器将自动为您添加默认构造函数.

  • 可以认为构造函数是用于初始化对象实例的方法的特例,因为它在语法上支持构造函数支持的99%. (2认同)

Kha*_*dez 6

public void class1()不是构造函数,它是一个void方法,其名称恰好与类名匹配.永远不会被称为.相反,java会创建一个默认构造函数(因为你还没有创建一个),它什么都不做.