(1)编译型语言:
使用针对特定平台的专门的编译器,将源代码一次性编译成可执行的机器码,之后再执行。这包括了“编译”和“链接”两个步骤。
“链接”是把各个模块的机器码和库包装起来生成最终的可执行性程序。这个可执行性程序可以脱离开发环境在特定平台上独立运行。
优点:运行效率高(因为是一次性编译后再运行的)
缺点:跨平台性差(可移植性差),若要移植,则需要用针对特定平台的编译器重新编译源代码。
代表语言:C、C++,Swift,Objective-C,Kotlin等
(2)解释型语言
事先不需要编译,是在特定的平台上,使用专门的***“解释器”对源程序逐行解释*成特定平台的机器码并“立即执行”(解释执行),不需要整体地进行“编译”和“链接”,是把这两个过程混合在一起执行。
优点:跨平台性强(可移植),只需要提供针对各个平台的解释器即可运行
缺点:运行效率较低,不能脱离解释器独立运行,运行时特定的平台上必须要有解释器实时翻译成机器指令。
代表语言:JS、Python、Ruby等
JAVA
既是“编译型语言”也是“解释型语言”,它需要先“编译”,后“解释”。
编译是通过javac生成一种不针对特定平台的.java文件(字节码文件),解释通过Java解释器(即Java虚拟机JVM)来解释并执行的。
即:
JVM:JAVA虚拟机,可运行字节码文件
所有的平台上的JVM都会向编译器提供相同的字节码程序接口,编译器只需要面向虚拟机(即字节码只面向JVM),生成虚拟机能理解的代码。所以JVM是Java的跨平台的关键。
在Java程序编写时,所有的程序部分必须包含在类里,不允许独立可执行语句等的存在。
如果需要某个类能够被解释器解释执行,则这个类必须包含main方法,main必须用public static修饰,必须用void声明该方法的返回值,且main的形参必须是字符串数组类型:String[] args. JVM是从main方法开始解释执行 的。