BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #21631同步于 2012/3/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

请问JDK如何编译Java文件的。。。

moli
2012/3/6镜像同步6 回复
遇到一个问题,例如以下情况JDK是如何编译Java的。 /*******User.java*********/ package org.test.User; import org.test.Role.Role; public class User { int age; Role role; } /********Role.java********/ package org.test.Role; import java.util.List; import org.test.User.User; public class Role { String name; List<User> users; } /************************/ 想问如果这样JDK是怎么编译的呢?
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
bixiaopeng机器人#1 · 2012/3/7
虽然不懂,但是顶你一下吧。。。
bixiaopeng机器人#2 · 2012/3/7
几天前就看到了,怎么还没人回复。。。 我猜先编译成简化版的字节码,然后有个全是本地方法的虚拟机从那个简化版的字节码读出来执行。。。我猜测。。。
John机器人#3 · 2012/3/7
推荐你看一本书,书名字是《深入理解java虚拟机。。最佳实践》,名字差不多这个样子,里边有你想要的答案。java是将代码解释成字节码的,不是编译,解释和编译是有区别的,实际的编译是通过JIT进行的。
moli机器人#4 · 2012/3/7
呃,我也不知道从源代码到字节码这一过程叫编译好,还是叫解释好。。。准确的是叫解释? 总觉得“解释”是说执行中拿着字节码解释成本地系统的指令什么的。。。 我暂时粗略地想了一下,想到了一种可行的解决办法。 我联想到C++中两个类不能相互include,需要将一个类在另一个类事先声明。Java没有这个要求。那么我猜测JDK的这个“解释”的过程可能分为多趟,可能在解释单个JAVA源文件之前会有一趟就是找到所有的类,并记录下来。然后在解释单一JAVA文件时,遇到Import XXX类,只要看一下刚刚的记录里边有没有这个XXX就行了。不知道JDK是不是这么干的,纯猜测。 【 在 John 的大作中提到: 】 : 推荐你看一本书,书名字是《深入理解java虚拟机。。最佳实践》,名字差不多这个样子,里边有你想要的答案。java是将代码解释成字节码的,不是编译,解释和编译是有区别的,实际的编译是通过JIT进行的。
John机器人#5 · 2012/3/7
【 在 moli 的大作中提到: 】 : 呃,我也不知道从源代码到字节码这一过程叫编译好,还是叫解释好。。。准确的是叫解释? : 总觉得“解释”是说执行中拿着字节码解释成本地系统的指令什么的。。。 : 我暂时粗略地想了一下,想到了一种可行的解决办法。 : ................... 分为多趟肯定是不对的,如果我记得没错的话,它也不会去寻找类的定义,只是会记一个引用。。。回头我再查查书再来回答你。。。那本书刚读完第一遍,有些地方还是不太理解。
John机器人#6 · 2012/3/7
【 在 moli 的大作中提到: 】 : 呃,我也不知道从源代码到字节码这一过程叫编译好,还是叫解释好。。。准确的是叫解释? : 总觉得“解释”是说执行中拿着字节码解释成本地系统的指令什么的。。。 : 我暂时粗略地想了一下,想到了一种可行的解决办法。 : ................... 我刚看了下,按照我的理解,它只是在生产一个class文件的时候,会把用到的类名称记录到class文件里边,然后再运行时,进行动态链接。Eclipse会报错的话,可能是因为编译器不允许吧。Eclipse会报错的class文件,虚拟机不一定不能运行。