【问题标题】:java "void" and "non void" constructorjava“void”和“non void”构造函数
【发布时间】:2014-09-17 18:42:50
【问题描述】:

我用 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 时,类的静态字段不再改变?

【问题讨论】:

  • 第二个不是构造函数。它只是一个恰好与其类共享名称的方法。
  • 因为它不再是构造函数了。
  • 这个类似问题的答案Why do constructors in java not have a return type 给出了一个很好的理由。
  • 在我刷新页面之前你写了答案真是太棒了;全部,

标签: java constructor void


【解决方案1】:

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

class MyClass {

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

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

 }

完全合法。可能不应该,但确实如此。

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

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

【讨论】:

  • MyClass x = new MyClass(); x.MyClass(); 完全有效。
【解决方案2】:

根据定义在构造函数中使用 void 会导致它不再是构造函数。 构造函数特别没有返回类型。虽然 void 不是严格意义上的返回值,但它仍被视为返回类型。

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

      猜你喜欢
      • 2013-12-22
      • 2015-02-24
      • 1970-01-01
      • 2020-12-16
      • 2017-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多