返回信息流遇到一个问题,例如以下情况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是怎么编译的呢?
这是一条镜像帖。来源:北邮人论坛 / java / #21631同步于 2012/3/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
请问JDK如何编译Java文件的。。。
moli
2012/3/6镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
推荐你看一本书,书名字是《深入理解java虚拟机。。最佳实践》,名字差不多这个样子,里边有你想要的答案。java是将代码解释成字节码的,不是编译,解释和编译是有区别的,实际的编译是通过JIT进行的。
呃,我也不知道从源代码到字节码这一过程叫编译好,还是叫解释好。。。准确的是叫解释?
总觉得“解释”是说执行中拿着字节码解释成本地系统的指令什么的。。。
我暂时粗略地想了一下,想到了一种可行的解决办法。
我联想到C++中两个类不能相互include,需要将一个类在另一个类事先声明。Java没有这个要求。那么我猜测JDK的这个“解释”的过程可能分为多趟,可能在解释单个JAVA源文件之前会有一趟就是找到所有的类,并记录下来。然后在解释单一JAVA文件时,遇到Import XXX类,只要看一下刚刚的记录里边有没有这个XXX就行了。不知道JDK是不是这么干的,纯猜测。
【 在 John 的大作中提到: 】
: 推荐你看一本书,书名字是《深入理解java虚拟机。。最佳实践》,名字差不多这个样子,里边有你想要的答案。java是将代码解释成字节码的,不是编译,解释和编译是有区别的,实际的编译是通过JIT进行的。
【 在 moli 的大作中提到: 】
: 呃,我也不知道从源代码到字节码这一过程叫编译好,还是叫解释好。。。准确的是叫解释?
: 总觉得“解释”是说执行中拿着字节码解释成本地系统的指令什么的。。。
: 我暂时粗略地想了一下,想到了一种可行的解决办法。
: ...................
分为多趟肯定是不对的,如果我记得没错的话,它也不会去寻找类的定义,只是会记一个引用。。。回头我再查查书再来回答你。。。那本书刚读完第一遍,有些地方还是不太理解。
【 在 moli 的大作中提到: 】
: 呃,我也不知道从源代码到字节码这一过程叫编译好,还是叫解释好。。。准确的是叫解释?
: 总觉得“解释”是说执行中拿着字节码解释成本地系统的指令什么的。。。
: 我暂时粗略地想了一下,想到了一种可行的解决办法。
: ...................
我刚看了下,按照我的理解,它只是在生产一个class文件的时候,会把用到的类名称记录到class文件里边,然后再运行时,进行动态链接。Eclipse会报错的话,可能是因为编译器不允许吧。Eclipse会报错的class文件,虚拟机不一定不能运行。