java类加载机制

#两种构造器

  • <clinit>:类构造器,主要作用是对静态成员完成初始化;
  • <init>:实例构造器,主要作用是对非静态成员(实例成员)完成初始化;

#成员变量显式赋值

public static int num = 10;

#成员变量隐式赋值

public static int num;      注:此时 num 等于 int类型的默认值 0

#类的生命周期

加载 —> 验证 —> 准备 —> 解析 —> 初始化 —> 使用 —> 卸载(对象被GC回收)

#类的加载过程

加载 —> 链接(验证、准备、解析)—> 初始化

  • 加载:将对应的字节码文件(二进制字节流)加载到内存中;
  • 验证:验证字节码文件的合理性、正确性,主要包括四种验证,文件格式验证、元数据验证、字节码验证、符号引用验证;
  • 准备:为类的静态变量分配内存并赋予默认值(隐式赋值),这里不会对实例变量分配内存,因为静态变量被分配在方法区,实例变量会随着对象的创建分配到堆空间;
  • 解析:将常量池中的符号引用转换为直接引用的过程;
  • 初始化:执行类构造器的过程,涉及到类的静态变量赋予初始值(显式赋值)以及静态代码块的执行;

# 被 final 修饰的静态变量的显式赋值阶段的几种情况

  • 若静态变量属于基本类型,且值也为基本数据类型,显示赋值发生在准备阶段;如:public static final int num = 10
  • 若静态变量属于 String 类型,且值为字符串字面量,显示赋值发生在准备阶段;如:public static final String name = "songy"
  • 除上面两种情况外,其他情况的显式赋值通常都是发生在初始化阶段;

#类的主动使用

#类的被动使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值