【Core Java】类加载

主要内容包括:

1.类加载 / 类连接 / 类初始化

2.类加载器

 

JVM进程

 

类的加载

类的class文件 (类的二进制数据)读入内存,并为之创建一个java.lang.Class对象。

写道
系统中的所有的类实际上也是对象(类加载时创建),都是java.lang.Class的实例

 

类加载由类加载器 完成,JVM会提供类加载器(系统类加载器),开发者也可以自定义。

通过使用不同类加载器,可以从以下来源加载类的class文件:

1.本地文件系统

2.JAR包

3.通过网络

4.把java源文件动态编译 ,加载

写道
Java虚拟机规范允许预加载类
 

类的连接

负责把加载到内存中的类的二进制数据合并到JRE中,类的连接又可分为三个阶段:

1.验证

2.准备:为类的静态属性分配内存,并设置默认初始值。

3.解析

类的初始化

类的初始化主要对静态属性进行初始化 。有两种方式:

1.声明时初始化

2.静态初始化块(static{ })中初始化

注1:在类连接阶段已经为静态属性分配好了内存,并使用默认值初始化了。在类初始化阶段是利用上面两种方式使用指定值初始化。

注2:对于上面两种初始化方式,JVM会按这些语句在程序中的排列顺序依次执行。

注3:静态初始化块与类相关,会在类初始化时被执行。通常用于对类的静态属性执行初始化操作。

 

JVM初始化一个类的步骤:

1.假如这个类还没有被加载和连接,程序先加载并连接该类

2.假如该类的直接父类还没有被初始化,则先初始化其直接父类(如果直接父类也没有初始化呢?)

3.假如类中有初始化语句,则系统依次执行这些初始化语句。

注:初始化一个类不仅仅是针对该类初始化,还包括该类的直接父类和间接父类,一直上溯到java.lang.Object.

初始化时,先初始化顶层父类,依次向下。

 

类初始化时机

 

类加载器

一个类被载入JVM中,同一个类就不会被再次载入。何为“同一个类”?

一个载入JVM的类都有一个唯一的标识:类全名+其类加载器。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值