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

时间:2013-12-05 17:45:43

标签: java initialization

例如,可以在stacktrace中找到

<init>方法。 据我所知,它代表了在构造函数中完成的初始化。

如果您尝试执行

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

你会得到java.lang.NoSuchMethodException

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

2 个答案:

答案 0 :(得分:9)

查看Java Virtual Machine Specification,第2.9章。它在<init>名称上说:

  

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

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

答案 1 :(得分:7)

  

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

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

  

可以覆盖吗?

没有


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