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

时间:2014-07-25 20:09:03

标签: 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);
    }
}

输出结果为:

  

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时,类的静态字段不再发生变化?

4 个答案:

答案 0 :(得分:40)

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

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

另外,如果一个类没有定义构造函数,那么编译器会自动为你添加一个默认构造函数。

答案 1 :(得分:6)

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

答案 2 :(得分:1)

按照定义在构造函数中使用void会导致它不再是构造函数。 构造函数具体没有返回类型。虽然void不会在最严格的意义上返回一个值,但它仍被视为返回类型。

在第二个示例中(使用void),您必须执行h.class1()才能调用该方法,因为它不再是构造函数。或者你可以删除虚空。

答案 3 :(得分:0)

这可以说是Java中的设计缺陷。

class MyClass {

   // this is a constructor
   MyClass() {...}

   // this is an instance method
   void MyClass() {...}

 }

完全合法。可能不应该,但是。

在您的示例中,class1()永远不会被调用,因为它不是构造函数。而是调用默认构造函数。

建议:熟悉Java命名约定。类名应以大写字母开头。