问题描述:
在研究Python和Java之间的区别的时候,发现Java需要编译,而Python可以直接运行,我就在想Java它是编译型的语言吗。
编译型和解释型语言的介绍
编译型语言:
编译型语言是源代码要经过编译器编译处理,生成目标机器码,这个机器码是一个二进制代码,是给看的机器看的,让它知道自己要干哪些活,而且这个机器码会保留,下次运行这段代码时无需重新编译。不过它是针对当前CPU的,这些目标代码只能在特定平台执行,如果这个程序需要在另外一种 CPU 上面运行,这个代码就必须重新编译。
解释型语言:
解释型语言是在代码运行期间逐行翻译成目标机器码,就是在边运行边翻译,下次执行时,还是需要再执行一次这个过程。
编译型和解释型语言的优点和缺点
编译型
优点:
运行速度快,代码效率高,编译后的程序不可修改,保密性较好。
缺点:
代码需要经过编译方可运行,可移植性差,只能在兼容的操作系统上运行。
解释型
优点:
可移植性较好,只要有解释环境,可在不同的操作系统上运行。
缺点:
运行需要解释环境,运行起来比编译的要慢,占用资源也要多一些,代码效率低,代码修改后就可运行,不需要编译过程。
那Java是编译型还是解释型呢
先谈谈Java的程序运行流程吧,如下图:
几种说法
一 编译型:
说Java是编译型,因为所有的Java代码都是要编译的,必须把.java经过编译变成。 现在的JVM为了效率,都有一些JIT优化。它又会把.class的二进制代码编译为本地的代码直接运行
二 解释型:
也有说Java是解释型的。因为java代码编译后不能直接运行,它是通过解释然后在JVM上运行的,所以它是解释运行的。
结论:
在我看来,Java首先由编译器编译成.class类型的文件,这个是java自己根据CPU生成的类型的文件 然后在通过虚拟机(JVM)从.class文件中读一行解释执行一行,所以他是解释型的语言,而由于java对于多种不同的操作系统有不同的JVM所以 Java实现了真正意义上的跨平台!