什么是Java中的<init>方法?它可以被覆盖吗?

Ser*_*rov 12 java initialization

<init>例如,可以在stacktrace中找到方法.据我所知,它代表了在构造函数中完成的初始化.

如果你试图执行

Object.class.getDeclaredMethod("<init>");
Run Code Online (Sandbox Code Playgroud)

你会得到的java.lang.NoSuchMethodException.

这个方法是什么?什么时候加入课堂?(在编译中 - 执行术语)它是虚拟的,无论如何都可以覆盖它吗?

Kai*_*nad 10

查看Java虚拟机规范,第2.9章.它在<init>名称上说:

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

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


Ste*_*n C 7

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

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

可以覆盖吗?

没有.


如果你看到一个<clinit>方法,那就是类静态初始化"方法".

  • @FabianBarney它部分正确,因为实例字段的初始化发生在每个构造函数的开头. (2认同)