一个java文件经过什么流程转换成.class文件--javac(献给初学者)
2013-11-19 20:44
375 查看
简单概述:我们通常code,文件的结尾都是.java文件,通过IDE等工具就可以看到效果,但是具体是怎么搞成的呢?好吧 我们不是讨论IDE,是javac! 我们都知道 jar里面的东西都是我们写的java文件编译后产物,编译?对,就是编译,那什么才能编译呢?那就是javac,它的另外一个名称就是:编译器
什么是javac? javac是一种编译器,能将一种语言规范转换成另外一种语言规范。换句话就说把我们比较了解和懂得如何编写的一种语言转换成计算机能够识别的语言,这句话我想应该没有什么异议吧,我们的代码最终都是要在计算机上运行的,也就是计算机能够识别的指令,但是我们编写肯定不会手动把一些二进制按照计算机的规范组合成这些指令,这就需要这个很牛的东西,编译器!
内部步骤:首先读取源码,一个一个字节的读取进来,找出来我们Java定义的关键字,比如if ,else,for,while,finally,等这个步骤就是叫做词法分析过程
第二步:检查第一步读取出来的关键字是否符合Java语言规范,比如if后面跟的是不是一个Boolean类型的表达式,这个过程就叫做语法分析
第三步:经过以上2个步骤词法分析,语法分析,基本上已经按照Java规范了,接下来就是这些拼装的代码要表达什么意思,也就是语义分析
以上几步算是准备工作吧,经过以上3步没有问题的代码,要进行最后一相,代码生成器,把这个符合Java语言规范的源代码转换成符合Java虚拟机规范的字节码了
简单的分析,下篇讲解经过javac编译后的字节码给了jvm,jvm又做了什么事情?
什么是javac? javac是一种编译器,能将一种语言规范转换成另外一种语言规范。换句话就说把我们比较了解和懂得如何编写的一种语言转换成计算机能够识别的语言,这句话我想应该没有什么异议吧,我们的代码最终都是要在计算机上运行的,也就是计算机能够识别的指令,但是我们编写肯定不会手动把一些二进制按照计算机的规范组合成这些指令,这就需要这个很牛的东西,编译器!
内部步骤:首先读取源码,一个一个字节的读取进来,找出来我们Java定义的关键字,比如if ,else,for,while,finally,等这个步骤就是叫做词法分析过程
第二步:检查第一步读取出来的关键字是否符合Java语言规范,比如if后面跟的是不是一个Boolean类型的表达式,这个过程就叫做语法分析
第三步:经过以上2个步骤词法分析,语法分析,基本上已经按照Java规范了,接下来就是这些拼装的代码要表达什么意思,也就是语义分析
以上几步算是准备工作吧,经过以上3步没有问题的代码,要进行最后一相,代码生成器,把这个符合Java语言规范的源代码转换成符合Java虚拟机规范的字节码了
简单的分析,下篇讲解经过javac编译后的字节码给了jvm,jvm又做了什么事情?
相关文章推荐
- 理解Java虚拟机(1)之一个.java文件编译成.class文件发生了什么
- javac 和 java 定位.class文件总结
- Javac命令一次编译一个目录下的所有java文件
- cmd javah 找不到类文件 javac 编译java文件 找不到符号(把class文件生成.h文件)
- java读写文件-经过多方搜索整合成我需要的功能(读写指定文件夹下面的多个指定名称的txt中的内容全部写入到一个指定的txt中)
- .java 文件中只能定义一个public class 且与文件名相同
- javac编译成功,用java运行class文件出现“找不到或无法加载主类” 的问题解决起来很简单
- 如何将.class文件转换成.java文件——JAVA反编译工具总结
- 一个将数据文件转换成excel文件打印的java实现方法的代码片断(Struts+poi)
- 用java语言编译内存中java小程序,并将生成的.class文件保存在一个文件夹下。
- 关于命令行中javac 编译成功,用 java 运行 class 文件出现 “ 找不到或无法加载主类 ” 的问题
- UltraEdit在打开一个文件的时候,有时候可能会提示:希望转换什么什么文件到DOS格式吗?
- 通过一个.class文件探究java的字节码文件结构
- 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
- 详解Javac将java文件编译为class文件的过程
- java 文件中 定义一个字符串,它的默认编码是什么?
- 如何将.class文件转换成.java文件——JAVA反编译工具总结[转]
- 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
- 用 javac 编译一个目录下的所有 java文件并打包成jar 包
- groovy 直接将给定的文本转换成Java中的Class<?>对象从而不需要再手动去写.java文件