Java 是编译型语言还是解释型语言?

关注者
369
被浏览
348,217
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏

java的编译器先将其编译为class文件,也就是字节码;然后将字节码交由jvm(java虚拟机)解释执行;

所以很多地方都说“java是一种半编译、半解释执行”的语言;

近来(其实也不是很"近")Oracle的(以前是Sun的)HotSpot VM采用了jit compile(just in time compilation)技术,将运行频率很高的字节码直接编译为机器指令执行以提高性能, 所以当字节码被jit编译为机器码的时候,要说它是编译执行的也可以...

不过总体来讲,java的编译结果是被jvm“解释执行”的,所以这么说也能说通,而其实这个“是编译还是解释”这个概念在这里已经有点模糊了,理解它的过程就行了,不必下一个“精确”的定义;

而我自己仍然赞成“java是编译型语言”的说法,因为“编译”其本质就是“把一个相对高级的语言转换为另一个相对低级的语言”,而由java -> class文件的编译已经满足了这个特征; 而后面你要说jvm是“解释执行”的,那其实硬件对于机器码又何尝不是“解释执行”呢?