我只是想知道 java.lang.Object、java.lang.String 等类(在 Oracle 提供的 rt.jar 内)是如何从 .java 源文件生成的。我认为,他们的 javac 不可能编译它们。
我尝试编译包含“class Dummy{}”的 Dummy.java
lab@labb:~/Documents$ set PATH=.:$JAVA_HOME/bin
lab@labb:~/Documents$ 设置 CLASSPATH=。
lab@labb:~/Documents$ javac -verbose Dummy.java
[解析开始RegularFileObject[Dummy.java]]
[解析完成12ms]
[源文件搜索路径:.]
[类文件的搜索路径:/usr/lib/jvm/java-7-oracle/jre/lib/resources.jar,/usr/lib/jvm/java-7-oracle/jre/lib/rt.jar jar,/usr/lib/jvm/java-7-oracle/jre/lib/sunrsasign.jar,/usr/lib/jvm/java-7-oracle/jre/lib/jsse.jar,/usr/lib/jvm/java-7-oracle/jre/lib/jce.jar,/usr/lib/jvm/java-7-oracle/jre/lib/charsets.jar,/usr/lib/jvm/java-7-oracle/jre/classes,/usr/lib/jvm/java-7-oracle/jre/lib/ext/sunpkcs11.jar,/usr/lib/jvm/java-7-oracle/jre/lib/ext/dnsns.jar,/usr/lib/jvm/java-7-oracle/jre/lib/ext/zipfs.jar,/usr/lib/jvm/java-7-oracle/jre/lib/ext/localedata.jar,/usr/lib/jvm/java-7-oracle/jre/lib/ext/sunec.jar,/usr/lib/jvm/java-7-oracle/jre/lib/ext/sunjce_provider.jar,.]
[正在加载 ZipFileIndexFileObject[/usr/lib/jvm/java-7-oracle/lib/ct.sym(META-INF/sym/rt.jar/java/lang/Object.class) )]]
[检查虚拟]
[正在加载 ZipFileIndexFileObject[/usr/lib/jvm/java-7-oracle/lib/ct.sym(META-INF/sym/rt.jar/java/lang/AutoCloseable.class) )]]
[写了RegularFileObject[Dummy.class]] [总计131ms]
最佳答案
所有类都可以表示为 Java 代码(如您在此处看到的: http://www.docjar.com/docs/api/java/lang/package-index.html )并由 javac 编译。 Object
是一种特殊情况,当由 VM 加载时,它不会获得父类(super class)。
关于java - Object类是如何生成的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12622690/