前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简单学习下Java的编译过程

简单学习下Java的编译过程

作者头像
晓果冻
发布2022-09-08 13:54:49
2820
发布2022-09-08 13:54:49
举报
文章被收录于专栏:一直在努力的Java菜鸡er

简单学习下Java编译过程

准备一个Demo

代码语言:javascript
复制
public class HelloWorld {

    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

打开CMD,运行javac HelloWorld.java,得到一个对应的class文件

image-20210512220909038
image-20210512220909038

Javac 背后做了哪些事情?当然是编译啦 hhh 大概就是这个流程:

image-20210512222041654
image-20210512222041654

  • 词法分析器:读取源代码,一个一个字节读取,找出最小的关键字(Java中的关键字,如:if、else、for、while、int 等关键词,识别哪些是合法的关键词,哪些不是),有点类似mysql原子,不可再拆分的那种。这就是词法分析器进行词法分析的过程,其结果是从源代码中找出规范化的Token流。
  • 语法分析器:通过语法分析器对词法分析后Token流进行语法分析,抽象语法树的每一个节点都代表者程序代码中的一个语法结构。例如包、类型、修饰符、运算符、接口返回值甚至连代码注释等都可以是一种特定的语法结构,这一步检查这些关键字组合再一次是否符合Java语言规范(如在if后面是不是紧跟着一个布尔判断表达式),词法分析的结果是形成一个符合Java语言规范的抽象语法树。
  • 语义分析器:语义分析的主要任务是对结构上正确的源程序进行上下文有关性质的审查,比如进行类型检查,控制流检查,数据流检查,解语发糖(将一些难懂的、复杂的语法转化成更加简单的语法,结果形成最简单的语法(如将foreach转换成for循环 ,好有注解等)
  • 代码生成器:将前面几步生成的信息(语法树、拆解的关键字)转化成字节码存到磁盘,进而生成我们想要的.class文件。

照一张网图:.class文件中包含的内容,正好有利于我后面学习常量池 O(∩_∩)O哈哈~:

image-20210512223840718
image-20210512223840718
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简单学习下Java编译过程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档