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

2022-09-03 13:32:53

<init>例如,方法可以在堆栈跟踪中找到。据我所知,它表示在构造函数中完成的初始化。

如果您尝试执行

Object.class.getDeclaredMethod("<init>");

你会得到.java.lang.NoSuchMethodException

这是什么方法?它是什么时候被添加到类中的?(编译中 - 执行术语)它是虚拟的,任何人都可以覆盖它吗?


答案 1

请看 Java 虚拟机规范,第 2.9 章。它的名字上写着:<init>

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

这就是为什么可以在堆栈跟踪上找到,但不能用代码访问的原因。<init>


答案 2

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

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

它可以被覆盖吗?

不。


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