1.为什么需要编译?--存在的理由
简单的说,Java文件的编译就相当于人类的翻译,只不过是将人容易理解的Java语言翻译成虚拟机能够读懂的字节码(语言)。
翻译实现的方式有两种:(1)直接翻译成机器能够执行的指令,例如C语言,好处是效率高,缺点是移植性差 (2)另外一种选择就是引入一个中间层,也就是字节码方式,固定了java源文件-->字节码这一过程,减轻了程序员的工作;而对于字节码-->不同平台的执行,则交给专业的平台或者提供商来实现。也就是java的“一次编写,到处运行”的优点是从程序员的角度来看的。
2.编译的过程
回忆大学的编译原理课程,基本上分为:词法分析-->语法分析-->语意分析-->代码生成 这几个阶段。
其中:
(1)词法分析:将将java源文件从头到尾扫描,将原文件的每个组成的词汇识别成指定的身份,不会有任何遗漏(//,和/** **/注释会被忽略),识别的依据就是java语言的规范,比如java源文件以package包名开始,然后是import语句...。
(2)语法分析:词法分析相当于将java文件识别成一个一个单词,语法分析相当于将单词组成句子,结果是一个语法树。
(3)语意分析:
(4)代码生成:java虚拟机的执行是基于栈操作的。
3.编译过程用到的模式:观察者模式
适用的情况:多个观察者都对某一对象的状态变化感兴趣,即一对多的情况。目标对象中有一个观察者列表,当目标状态发生变化时,就会遍历观察者列表,调用定义的接口方法来通知每个注册的观察者;而观察者会实现定义的接口方法,定义自己特定的处理流程。--java编译过程源代码没有看,应该属于观察者模式变化版吧。
java包中也提供了观察者模式的实现。
说明:以上内容只是自己回忆总结使用。