Java面试题,Javac编译器:如何将Java源码编译成Jav
2017-12-14 本文已影响166人
ToEnd
面试题目
我们开发中都会用到javac编译器,那咱们聊一下你对javac的理解,它的基本结构,以及是如何将Java源码编译成Java字节码的?
考点剖析
通过对javac的剖析来深入理解编译器的原理。即javac把Java语法规矩翻译成Java虚拟机语法规矩。
答案解析
javac做了些什么?
说白了,javac就是一个编译器;编译器就是把一种语言规矩转换成另一种语言规矩,也就是将对人友好的语言转换成对机器友好的语言。因此,javac是把Java源代码编译成Java字节码,即JVM可以识别的二进制;表面上就是将.java文件转成.class文件。
javac做了些什么?
主要由4个模块组成。
词法剖析器:识别Java中的if、else、for、while等关键字及其语句的合法性,构成符合标准的Token流。
语法剖析器:对构成的Token流进行语法剖析,检查它们构成的组合是否符合Java语法标准,构成抽象的语法树。
语义剖析器:将foreach、注解等杂乱的语法转换成最简略的语法,构成注解往后的语法树。
字节码生成器:将注解往后的语法树翻译器字节码。
在之前的面试解说中我们经剖析了由常量表达式计算出的字符串(字面量+字面量),为 什么并不会发生多个对象?
因为javac在编译期间,已经对这些字符串进行了合并操作。
(完)
最后,如果你现在也是在学习java,你可以关注我的微信公众号:java王者之路。有为Java新手们准备的零基础到高级java学习资源,有免费公开课、java系统学习路径 等等与大家分享。欢迎大家关注。