Java编译及初始化过程

1. Java编译机制

java的编译是指从.java文件到.class文件的过程, java的编译过程主要包括词法分析,语法分析, 语义分析,代码生成的过程。

java源代码

 

 

词法分析, 将源代码转换成Token流,Token包括Java关键字, 自定义单词(包名、类名、变量名等),符号(+-等)

Token

 

 

语法分析, 语法分析将上述的Token序列进行组装一句句话,会对每句话的合法性做校验, 主要包括import, package 类(包括interface, enum等)

语法树

 

 

语义分析, 语义分析将语法树转换成对应的注解语法树,

1. 去除永假条件, 2.包装类型到基础类型的转换, 3, 去除语法糖, foreah变为for

注解语法树

 

 

代码生成器,代码生成器将对应的注解语法树转换成JVM可以直接读取.class文件

.class文件

 

2.Java类加载与初始化的过程

1.加载

加载阶段, .class文件加载到内存中, 并在堆中创建对应的Class对象。类加载的双亲委托机制, 将加载类先委托给父加载器, 直到根加载器, 若父类加载器不能处理, 则交给子类加载, 可以保证同样的类只会被加载一次

2.链接,链接主要指将二进制流转换成对应的类的信息

验证

验证.class文件是否合法

准备

为静态变量分配空间, 并赋予默认初始值; final static修饰的变量则会直接赋值

解析

将常量池中的符号引用转换成对应的直接引用, 获取方法、类、变量等的指针或偏移量, 以便可以访问。解析的过程可分为静态解析和动态解析。静态解析主要包括staticfinal修饰的方法或变量、构造器, 可在此阶段执行; 而动态解析可以在运行时再进行。

3.初始化

初始化阶段主要对static修饰的变量或代码块进行赋值操作。

 

3.Java对象初始化

1. 父类静态变量 代码块执行

静态变量初始化

2. 子类静态变量 代码块执行

3. 父类其他成员初始化

父类初始化

4. 调用父类构造器初始化

5. 子类其他成员初始化

子类初始化

6. 调用子类构造器初始化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值