Kotlin基于Java虚拟机(JVM),通过Kotlin编译器生成的JVM字节码与Java编译的字节码基本相同,也因此与Java可以完全兼容,并且语法更加简洁
两者的编译过程大致:
1词法分析
2语法分析
3语义分析
4中间代码生成
5目标代码生成
区别在于Kotlin与Java相比重要的细节在编译后端(目标代码生成)环节。
Kotlin编译器在目标代码生成环节做了很多类似于Java封装的事情,
比如自动生成Getter/Setter代码的生成、Companion转变成静态类、修改类属性为final不可继承(open修饰即可继承)等等工作。
Kotlin将我们本来在代码层做的一些封装工作转移到了编译后端阶段,使得语言更加简洁
Java程序从编译到执行
运行java程序的过程是先用javac编译,然后用java解释。而一经编译成功后,就可以直接用java.exe随处解释运行了。
java的源文件即用java语言编写的以.java为后缀名的代码文件,类文件是经过javac命令编译过后的字节码文件(.class文件),类文件被jvm翻译为本机能识别的机器语言才能被执行!
Java源代码 -> 编译器(javac.exe) -> Java字节码(即虚拟指令) -> JVM -> 解释器(java.exe) -> 二进制机器码
源文件是给程序员看的,类文件是给JVM(java虚拟机)看的,机器语言是给计算机(即主要为CPU看的)。