java语言是一种跨平台的语言,一次编译处处运行,编译的过程就是转化为字节码文件(.class文件)的过程,下面的文章就是简单的介绍这个转化的流程。
在每个java类被虚拟机加载的类格式都是class文件的格式,那么.java文件是怎么样被转变为.class文件的呢,现在看一下下面的这张转化的流程图(敲黑板的时间到了哈!)
看图说话:源码转化成字节码的过程主要经过了词法解析,语法解析,语义分析,生成字节码最后生成字节码文件。
词法解析:通过空格分隔出单词,操作符,控制符等信息,将其形成token流传递给语法解析器;
语法解析:语法解析的过程是把token流按照java语法的规范组装成一颗语法树,如图所示的x=(y+7)*z表达式在转化为如图所示的语法树;
语义分析:在语义分析的阶段,会分析关键字的使用是否合理,类型是否匹配,作用域是否正确,当语义分析完成后就可以生成字节码
这个转化为字节码文件的过程,我们可以用javac命令进行验证:比如说如下的代码
class Person{
public void static main(String[] args){
Object obj=new Object();
} }
关键字static的位置使用错误,利用javac编译文件时候,就会报错:
.\Person.java:3: 错误: 需要<标识符>
public void static main(String[] args)
^
.\Person.java:3: 错误: 需要'('
public void static main(String[] args)
^
.\Person.java:3: 错误: 方法声明无效; 需要返回类型
public void static main(String[] args)