浅论类加载

回顾了下反射知识,简单涉及到一些类加载,就记录一下,如果有错误可以告诉我改正。
Java程序的执行:java源码,经过javac编译变为字节码文件,经过java运行后进行类的加载。
类的加载:1.加载;2.连接;3.初始化。JVM完成加载、连接,程序员完成初始化。
加载: 将类的class文件读入内存,并为之创建java.lang.Class对象,该过程有类加载器完成。
连接:
1.验证:验证是否有错
2.准备:对静态变量分配内存,初始化默认值。

private static int a = 1;
//在该阶段初始化为0

pricate static final int a1 = 10;
//在该阶段初始化为10,常量直接初始化它的值

3.解析:将常量池的符号引用(类加载前记录的一个相对引用)替换为直接引用(内存地址)。
初始化:
初始化阶段开始真正执行类内的Java程序代码,该阶段是执行<clinit>()方法的过程。<clinit>()方法是由编辑器按语句在源文件出现的顺序,依次自动收集类内的所有静态变量的赋值动作以及静态代码块中的语句,并进行合并。JVM保证一个类的<clinit>()方法在多线程环境中被正确地加锁、同步,如果多个线程同时去初始化一个类,那么只有一个线程去执行这个类的<clinit>()方法,其他线程都需要阻塞等待,直到活动线程执行<clinit>()方法完毕。

private static int a = 1;
//初始化a为1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值