java是解释型语言吗?

我有几个问题绕不过来:
1,java是解释型语言,但其也是先从.java编译变成.class后被虚拟机解释执行,那么,.class中是机器语言?
2,既然.class已经是机器语言了,那么虚拟机的作用也就是根据不同的系统平台选择如何运行机器语言么?
3,那么,C++等编译型语言为什么不也做一个虚拟机,使程序可以跨平台?
请高人们指教,三个问题都回答才给分.谢谢

1.class文件中不是机器语言,是经过编码的8位字节二进制流(注意虽然表示方法都似乎一样的,但是语义是不一样的,class文件有自己的编码格式),数据项按顺序存储在class文件中,向另的项之间没有任何间隔,使得class文件紧凑。其占据多个字节空间的项按高位在前的顺序分为几个连续的字节存放。其实java语言与class文件具有非排他性,两者之间没有必然的联系(当然,普遍认为有联系)。

2.不同的平台下虚拟机的细节实现不一样,这就使得它解释执行的class文件能够适应不同的平台。

3.使用虚拟机会减少代码的执行效率,要增强generalization(对不同平台的支持)就必须减少specilization(对某一平台的优化),鱼与熊掌不可兼得的。

-----------------------PS分割线---------------------------
PS:如果你对java的原理更感兴趣的话,关于更多的讲解可以看看Bill Venners的《深入Java虚拟机》,很有用处,虽然只是讲到java 1.2,但是基本原理都差不多的。
PS PS:class文件的开头部分都是一个称作魔数的段,其内容为0xCAFEBABE。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-05-07
1.class不是机器语言,它是由jvm加载后解释的。
2.针对不同的平台,有不同的jvm。
3.C++编译为本地代码,由相关的操作系统执行,所以不能跨平台。
相似回答