Java - 是否可以在Constructor中编写public void()?

时间:2015-11-22 10:33:58

标签: java constructor void

如果可以在构造函数部分编写public void,我找不到信息。有可能吗?

4 个答案:

答案 0 :(得分:1)

在字节代码级别,构造函数始终为void,因此指定它是多余的。即构造函数始终被称为<init>V,即VV == void的返回类型。类似地,静态初始化程序为<clinit>V如果在这些方法中使用堆栈跟踪(例如,打印异常),您将看到此符号。

构造函数实际上将对象初始化为参数,因为在调用构造函数之前创建了对象。注意:您可以在不调用Unsafe.allocateInstance(Class)

的构造函数的情况下创建对象
  

如果可以在构造函数部分编写public void,我无法找到信息。有可能吗?

无法编写它,因为Java将构造函数与方法区分开来,它必须与类具有相同的名称,并且不能指定返回类型。如果指定了返回类型,则假定它是一种方法。

符号x = new Clazz()还将返回值的数量限制为1,即对象。没有简单的方法来修改此表示法以返回多个对象。即支持构造函数的返回类型并不容易。

如果你想定义一个返回类型,你很可能会考虑像这样的因子方法。

public static MyInterface createObject() {
    return new MyClass();
}

注意返回类型与实际创建的类不同,但仍然只返回一个引用。

答案 1 :(得分:1)

构造函数语法在Java Language Specification中定义。其他任何事情都是不正确的。

答案 2 :(得分:0)

问题尚不清楚。 Peter Lawrey回答了一个解释,这是另一个解释。

您无法在构造函数中声明方法。但是,您可以声明一个类并声明变量。

因为您可以在构造函数中声明一个类,所以可以在类中声明一个方法然后使用该类。如果方法不是静态的,则可以构造类的对象。

答案 3 :(得分:0)

不,Java只允许在类中声明方法,而不是在另一个方法或构造函数中声明。您可以直接执行以下操作:

public A() {
  class B {
     public void m() {
     }
         }
    }