本章内容可以都是大段落的文字,看起来可能会很无聊,可以边听音乐边细心阅读
--歌曲地址:网易云音乐(有自己的音乐的网站罢工了,不开心)
首先要说的是java语言规范和java虚拟机规范不是一回事儿,那么如何让java语言规范适应java虚拟机语言规范呢?
这个任务就有javac编译器来完成-它的工作就是讲java语言规范转换成java虚拟机语言规范,来完成翻译工作。
java语言对于开发者来说是比较友好的语言,可以很容易的读懂和书写,但对于机器来说他不能读懂相对于人来说相对友好的java语言,只能识别目标机器码,但人又不能直接去书写对人不太友好的机器码,所以才有了编译器的出现---有了编译器才有可以出现了这么多的高级编程语言。
javac的编译器就是将对人友好的编程语言编译成对机器友好的语言 (注:这种语言不是针对某个机器的,他包括不同的种类、不同平台的机器。如何消除不用种类、不同平台机器之间的差别,这个任务就由JVM来完成,而javac的工作就是讲java源代码语言先转化成JVM能够识别的语言,然后由JVM将JVM语言再转化成某种/某个机器能够识别的机器语言)
这样看来java语言向开发者屏蔽了很多与目标机器相关的一些细节,使得java语言的执行和平台无关---java语言的跨平台
javac的任务就是将java源码编译成java字节码,也就是JVM能够识别的二进制码。从表面来看就是将.java文件转化成.class文件,而实际上是将java源代码转化成一连串的二进制数字,这些二进制数字是有格式的,只有JVM能够正确识别他们是什么意思。