JAVA源码编译机制

JAVA代码编译是有JAVA源码编译器来完成。


编译步骤

1、分析和输入到符号表(Parse and Enter):

Parse过程所做的为词法和语法分析。

Enter过程将符号输入到符号表,通常包括确定类的超类型和接口、根据需要添加默认构造器、将类中出现的符号输入各自类自身的符号表中等。


2、注解处理(Annotation Processing)

该步骤主要用于处理用户自定义的Annotation。


3、语义分析并生成class文件(Analyse and Generate)

Analyse步骤基于抽象语法树进行一系列的语义分析,包括将语法树中的名字、表达式等元素与变量、方法、类型等联系到一起;检查变量使用前是否已声明;推导泛型方法的类型参数;检查类型匹配性;进行常量折叠;检查所有语句都可到达;检查所有checked exception都被捕获或抛出;检查变量的确定性赋值(有返回值的方法必须确定有返回值);检查变量的确定性不可重复幅值;消除语法糖形式的无用代码;将泛型java转为普通java 等。

在完成语义分析后,开始生成class文件,生成class的步骤为:

1、将实例成员初始化器收集到构造器中,将静态成员初始化器收集为<clinit>()。

2、将抽象语法树生成字节码,采用后序遍历语法树进行少量的代码转换。

3、从符号表生成class文件。


生成的class文件由以下部分组成:

1、结构信息:包括class文件格式、版本号及各部分的数量与大小信息。

2、元数据:类、继承的超类、实现的接口的声明信息、域与方法声明信息和常量池。

3、方法信息:对应java源码中语句和表达式对应的信息。包含字节码、异常处理器表、求栈值与局部变量区大小,求值栈的类型记录、调试符号信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值