【问题标题】:What is an <init> method in Java? Can it be overridden? [duplicate]Java 中的 <init> 方法是什么?它可以被覆盖吗? [复制]
【发布时间】:2017-01-22 22:07:15
【问题描述】:

&lt;init&gt; 方法可以在堆栈跟踪中找到,例如。 据我了解,它代表在构造函数中完成的初始化。

如果你尝试执行

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

你会得到java.lang.NoSuchMethodException

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

【问题讨论】:

标签: java initialization


【解决方案1】:

查看Java Virtual Machine Specification,第 2.9 章。上面写着&lt;init&gt; 名字:

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

这就是为什么&lt;init&gt; 可以在堆栈跟踪中找到,但无法通过代码访问的原因。

【讨论】:

    【解决方案2】:

    Java 中的&lt;init&gt; 方法是什么?

    它是一个构造函数。这就是为什么当您尝试将其作为方法调用时会得到 NoSuchMethodException

    它可以被覆盖吗?

    没有。


    如果你看到&lt;clinit&gt; 方法,那就是类静态初始化“方法”。

    【讨论】:

    • +1,但&lt;init&gt; 也可以引用实例字段的初始化——不仅仅是构造函数。
    • @FabianBarney 部分正确,因为实例字段的初始化发生在每个构造函数的开头。
    • @Pshemo Ehrm,你是对的! :-)
    猜你喜欢
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多