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

简单学习下Java的编译过程

作者头像
晓果冻
发布于 2022-09-08 05:54:49
发布于 2022-09-08 05:54:49
29600
代码可运行
举报
运行总次数:0
代码可运行

简单学习下Java编译过程

准备一个Demo

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class HelloWorld {

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

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

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

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

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

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
java编译原理
(1)javac是一种编译器,能够将一种语言规范转换成另一种用语言规范,通常编译器是将便于人们理解的语言规范成机器容易理解的语言规范。
全栈程序员站长
2022/08/25
1.9K0
JVM-编译过程学习
JVM-编译过程学习 词法分析 将源代码的字符流转变为标记集合。关键字、变量名、字面量、运算符都可以称为标记。 如int a = b+2; int、a、=、b、+、26个标记。 生成Token流,例如上面的int就是一个Token,不可再拆分。 语法分析 根据Token序列构造抽象语法树。 语法树的每一个节点都代表着程序代码中的一个语法结构 如:包、类型、修饰符、运算符、接口、返回值甚至代码注释都可以是一个语法结构。 填充符号表 由一组符号地址和符号信息构成的表格叫做符号表。(可以用哈希表的K-V来理解
晓果冻
2022/06/17
3020
JVM-编译过程学习
一篇文章理解编译全过程
https://www.cnblogs.com/fisherss/p/13905395.html
zz_jesse
2020/11/06
1.2K0
一篇文章理解编译全过程
javac 编译过程
b) 词法分析:根据标记序列构造抽象语法树(AST:用来描述程序代码语法结构的树形表示方式,每一个节点代表程序中的一个语法结构。
WindWant
2020/09/11
1.2K0
javac 编译过程
夯实基础,编译器原理前端部分浅析
携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第26天,点击查看活动详情
掘金安东尼
2022/09/22
5840
夯实基础,编译器原理前端部分浅析
Go语言编译链接过程
在之前interface、channel的文章中经常会提到,Go在编译时会将interface和channel关键字转换成runtime中的结构和函数调用。所以我觉得很有必要就Go的编译过程理一理做个进行总结,然后结合之前对底层原理总结的文章,那么对整个逻辑会更加清晰。我也是查了各种资料,尽量把整个过程能总起出一些东西来,学习嘛,总是需要不断总结,分享!
小许code
2023/03/07
1.1K0
Go语言编译链接过程
【Story】编译器的基础概念与类型分类
编译器是一种将高级编程语言(如C、C++、Java、Python等)编写的源代码转换为机器语言或中间代码的工具,使计算机能够执行该程序。编译器的开发和使用在计算机科学中具有核心地位,它帮助程序员将抽象的、高层次的算法和逻辑翻译成具体的、计算机能够理解和执行的指令。
LuckiBit
2024/12/11
2440
面试官喜欢问的Java编译期与运行期问题总结全了
不知大家有没有思考过,当我们使用IDE写了一个Demo类,并执行main函数打印 hello world时都经历了哪些流程么?
业余草
2020/10/10
8660
面试官喜欢问的Java编译期与运行期问题总结全了
【愚公系列】软考中级-软件设计师 013-程序设计语言基础知识(语言处理程序基础)
语言处理程序基础是指语言处理程序设计与实现的基本原理和技术方法。它包括了以下几个关键方面:
愚公搬代码
2024/01/25
3541
Java文件是怎么编译成Class文件的
其实就是我们前端的编译过程,是通过javac(编译器)把java文件变成.class字节码文件。
向着百万年薪努力的小赵
2022/12/02
1.4K0
Java文件是怎么编译成Class文件的
JVM性能优化系列-(5) 早期编译优化
词法、语法分析:词法分析是将源代码的字符流转变为标记(Token)集合,单个字符是程序编写过程的最小元素,而标记则是编译过程的最小元素,关键字、变量名、字面量、运算符都可以成为标记 语法分析是根据Token序列构造抽象语法树的过程,抽象语法树(Abstract Syntax Tree,AST)是一种用来描述程序代码语法结构的树形表示方式,语法树的每一个节点都代表着程序代码中的一个语法结构(Construct),例如包、类型、修饰符、运算符、接口、返回值甚至代码注释等都可以是一个语法结构。
码老思
2023/10/19
2880
Javac编译器的基本工作原理和流程
Javac编译器是Java的标准编译器,用于将Java源代码(.java文件)编译成Java字节码(.class文件),供Java虚拟机(JVM)执行。
一凡sir
2023/08/18
4010
Javac编译器的基本工作原理和流程
《Kotlin 程序设计》第七章 Kotlin 编译过程分析第七章 Kotlin 编译过程分析
http://mp.weixin.qq.com/s/lEFRH523W7aNWUO1QE6ULQ
一个会写诗的程序员
2018/08/17
1.7K0
Javac的实现过程
主要介绍Javac的实现过程及原理。 首先弄明白什么是Javac? Javac是一种编译器,将一种语言转换为另一种语言规范。编译器的作用就是将符合java语言规范的源代码转化为JVM虚拟机能够识别的字
用户2146856
2018/05/18
1.5K0
Calcite系列(六):执行流程-语法解析
目前广泛使用的语法解析框架主要包括ANTLR、JavaCC和Yacc等。在大数据领域中,很多计算引擎都是基于ANTLR进行语法解析,例如 Hive、Spark和Presto等都基于ANTLR进行处理。然而,Calcite使用JavaCC编译器进行语法解析。
Yiwenwu
2024/04/19
8120
Calcite系列(六):执行流程-语法解析
Java底层-Javac编译器
当我们执行这个命令后,就会得到一个class文件,这一步其实就是编译,在前面一节我们提及到Java不同于C/C++,它首先需要将Java文件编译成class文件, 然后再由JVM将二进制文件代码转为与机器适配的机器码,而java文件编译成class文件就是由Javac编译器来完成。通常我们也叫Javac编译器为前端编译器,因为一个传统编译器编译结果是由源码到本地机器码的一个过程,而由于Javac编译器只负责源码到字节码这一步,所以叫前端编译器;字节码到本地机器码这一步是由后端运行时编译器来完成的,比如HotSpot VM中的C1、C2编译器。此外对于程序的优化也主要集中在后端运行时编译,这样可以使非Javac编译器产生Class文件(Scala,Groovy等语言的Class文件)也能享受到编译器优化的好处。
每天学Java
2020/06/18
2K0
JVM之早期(编译器)优化
JVM的编译器可以分为三个编译器: 1. 前端编译器:把.java转变为.class的过程。如Sun的Javac、Eclipse JDT中的增量式编译器(ECJ)。 2. JIT编译器:把字节码转变为机器码的过程,如HotSpot VM的C1、C2编译器。 3. AOT编译器:静态提前编译器,直接将*.java文件编译本地机器代码的过程。
见得乐
2022/09/08
4110
听说它可以让代码更优雅
一提到静态代码检查工具这个词应该比较好理解,所谓静态代码检查工具就是检查静态代码的工具,完美~
闫同学
2024/07/28
3032
爆爆:JAVA代码编译流程是怎样的?
大家会不会跟我最开始一样,觉得在IDE里点一下RUN按钮,我们写的代码就直接直接跑起来了吧?
敖丙
2022/03/24
9030
爆爆:JAVA代码编译流程是怎样的?
再看编译原理
其实就是翻译,比如从字符串编译到机器码,就是把人能理解的代码语言翻译成机器能“理解”(识别执行)的机器语言,然后用户借助目标程序就可以与机器交互了:
ayqy贾杰
2019/06/12
8980
相关推荐
java编译原理
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验