Object类是如何生成的?

时间:2012-09-27 13:36:16

标签: java compilation

我只是想知道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 $ set 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。罐子,/ 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 / 对象 .class )]]

[检查假人]

[加载ZipFileIndexFileObject [/usr/lib/jvm/java-7-oracle/lib/ct.sym(META-INF / sym / rt.jar / java / lang / AutoCloseable .class )]]

[写了RegularFileObject [Dummy.class]] [总共131毫秒]

2 个答案:

答案 0 :(得分:2)

所有类都可以表示为Java代码(如您所见:http://www.docjar.com/docs/api/java/lang/package-index.html)并由javac编译。 Object是一个特殊情况,因为当VM加载时,它不会获得超类。

答案 1 :(得分:0)

您可以使用反编译器(例如JAD)来查看如何查看.class的源文件。

对于基类,有些方法需要native,并且它们的实现在依赖于系统的库中提供,例如Windows的dll或Linux的so

String只有一个本机(实习生)方法。对象有更多。 JRE中的类需要本机来完成与SO相关的事情并且是非常低级的,比如原子值或线程(感谢@yshavit),但绝大多数JRE库代码都是用Java编程的。