当前位置: 首页 > 知识库问答 >
问题:

java“无用”和“无用”构造函数

翟宏放
2023-03-14

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

共有3个答案

公孙森
2023-03-14

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

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

晏华奥
2023-03-14

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

方权
2023-03-14

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

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

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

 类似资料:
  • 实际上,我不明白无参数构造函数和默认构造函数的区别是什么。 在创建名为cFrame的Test对象时,是否调用此类的默认构造函数?

  • 我有一个主类,DataManager,它有一个子类FileHandler,它扩展了DataManager。 另一类: 我遇到了一个错误,指出构造函数不能应用于给定类型。这是我第一次在Java中使用继承,这个问题对我来说并没有太大帮助。 下面是我从NetBeans获得的更具体的版本... “DataManager类中的构造函数DataManager不能应用于给定类型;必需:找到文件:无参数原因:实际

  • 问题内容: 其实我不明白,无参数构造函数和默认构造函数有什么区别。 创建名为cFrame的Test对象时,这是否调用此类的默认构造函数? 问题答案: 该构造函数是一个无参数的构造函数,代表您的Java编译器插入; 它包含对(not )的调用,这是默认行为。如果实现任何构造函数,则不再收到默认的构造函数。 JLS-8.8.9。默认构造函数说(部分), 如果一个类不包含构造函数声明,则隐式声明一个没有

  • 我正在浏览hibernate留档,文档说hibernate需要为我们所有的持久类提供一个no-arg构造函数: 无参数构造函数是所有持久类的要求;Hibernate必须使用Java反射为您创建对象。构造器可以是私有的,但是在没有字节码插装的情况下,运行时代理生成和有效的数据检索需要包或公共可见性。 但是当我通过创建一个没有任何无参数构造函数的POJO类并放置一个接受参数的构造函数来创建一个示例程序

  • 问题内容: 我正在尝试编写一个程序,该程序采用不同形状的地毯,并使用子类中定义的某些变量创建地毯对象。我的代码是 而子类是 但是每当我尝试编译子类时,都会出现错误 我不确定该如何解决。 问题答案: 由于您的超类没有子类,因此您需要使用 super() 从子类构造函数中显式调用您的超类构造函数。这不必是子类构造函数的第一行。 一个建议: 遵循Java命名约定,变量名称应为camelCase。即,在这

  • 我正在尝试编写一个程序,该程序采用不同形状的地毯,并使用子类中定义的某些变量创建地毯对象。我的代码是 子类是 但每当我试图编译子类时,我都会遇到错误 我不知道该怎么修理它。