问题 什么是Java中的方法?它可以被覆盖吗? [重复]


这个问题在这里已有答案:


9732
2017-12-05 17:45


起源

有关: stackoverflow.com/q/8517121/1725096 - Jens Piegsa


答案:


看看吧 Java虚拟机规范,第2.9章。它说的 <init> 名称:

在Java虚拟机级别,使用Java编程语言(JLS§8.8)编写的每个构造函数都显示为具有特殊名称的实例初始化方法 <init>。该名称由编译器提供。由于名称不是有效标识符,因此不能直接在使用Java编程语言编写的程序中使用。

这就是为什么 <init> 可以在堆栈跟踪中找到,但无法通过代码访问。


8
2017-12-05 17:54





什么是 <init> Java中的方法?

它是一个构造函数。这就是为什么你得到一个 NoSuchMethodException 当你尝试将其称为方法时。

可以覆盖吗?

没有。


如果你看到了 <clinit> 方法,即类静态初始化“方法”。


7
2017-12-05 17:47



+1,但是 <init> 也可以引用实例字段的初始化 - 而不仅仅是构造函数。 - Fabian Barney
@FabianBarney部分正确,因为实例字段的初始化发生在每个构造函数的开头。 - Pshemo
@Pshemo Ehrm,你是对的! :-) - Fabian Barney