extends Object
,编译器会为您插入它。
编辑:显然我对是否确实存在代码插入造成了一些困惑。我自己也不完全确定,所以我做了一个小实验:在文件中创建以下类test.java
:
public class test {}
并编译,然后运行
javap -c test
反汇编字节码。 看看结果:
从“test.java”编译 公共类测试扩展了java.lang.Object{ 公共测试(); 代码: 0:aload_0 1:调用特殊#1; //方法 java/lang/Object."":()V 4:返回 }
所以,是的,编译器
确实实际上将extends java.lang.Object
(或等效的字节码)插入到类中。
文件是不同的一样。实际上,所发生的只是当解析器发现您没有使用 extends
包含任何基类时,它只是假装您显式指定了
Object
。从那时起,编译器将其视为您自己输入的内容,并且 JVM 不知道您在源代码中指定或未指定什么。