phi*_*x_x 5 java constructor reference
我知道Java的构造函数不能有任何类型,有趣的是它甚至都不可能void.对此的逻辑解释是构造函数返回初始化对象的引用.
MyClass myObject = new MyClass();
Run Code Online (Sandbox Code Playgroud)
现在,构造函数myClass在实例化之后返回对象引用并将其保存在对象变量中MyObject,这就是构造函数不能具有返回类型的原因.
是对的吗?有人能证实吗?
不,实际上,构造函数被编译到类文件中,就像具有名称<init>和void返回类型的方法一样.您可以"<init>"在堆栈跟踪中看到这些调用.表达式new Type()被编译为一个指令new,它只是为其中一个构造函数创建实例Type和一个附加方法invokation(invokespecial)Type.
验证程序将确保在新创建的实例上仅调用一次这样的特殊方法,并在对象的任何其他使用之前调用它.
这只是一种编程语言设计决策,让构造函数从Java语言的角度来看没有返回类型.毕竟,new Type(…) 是一个表达式,它计算新创建的实例,Type并且无法从具有该编程语言结构的构造函数中获取返回值.此外,如果添加返回类型,Java将无条件地假定它是一个方法,即使它与类具有相同的名称.
这就是它的定义方式 :(它使得解析类定义更容易)
ConstructorDeclarator中的SimpleTypeName必须是包含构造函数声明的类的简单名称,否则会发生编译时错误.
在所有其他方面,构造函数声明看起来就像没有结果的方法声明(第8.4.5节).