Java类加载器相关

类加载器是为了实现Java的动态性,即程序可以不用全盘的重新编译就能对程序某部分进行更新-->更新class文件-->java的类加载器动态加载。
一旦一个类被载入JVM中,同一个类就不会被再次载入了(切记,同一个类)。
-->
“同一个类”在JVM中的唯一标识为:
一个名为Pg的包中,有一个名为Cl的类,被类加载器KlassLoader的一个实例对象kl1加载,生成Cl的对象,即C1.class(这里指类,而非对象)在JVM中表示为(Cl, Pg, kl1)。
这意味着两个类加载器的实例(Cl, Pg, kl1) 和 (Cl, Pg, kl2)是不同的,被它们所加载的类也因此完全不同,互不兼容的。


在java中每个类都是由某个类加载器的实体来载入的,因此在Class类的实体中,都会有字段记录载入它的类加载器的实体(当为null时,其实是指Bootstrap ClassLoader)。
java的类加载器分类:
1.Bootstrap ClassLoader:源头,C++实现,负责将一些关键的Java类,如java.lang.Object和其他一些运行时代码先加载进内存中。
2.ExtClassLoader:用于装载Java运行环境扩展包(jre/lib/ext)中的类,而且一旦建立其加载的路径将不再改变。
3.AppClassLoader:可调用ClassLoader.getSystemClassLoader() 获得,如果程序中没有使用类装载器相关操作设定或者自定义新的类装载器,则编写的所有java类都会由它来装载。
         而它的查找区域就是我们常常说到的Classpath,一旦建立其加载路径也不再改变。
4.ClassLoader:自定义的ClassLoader从ClassLoader类继承而来。

 

Class 类是在Java语言中定义一个特定类的实现。Class类的对象用于表示当前运行的 Java 应用程序中的类和接口。
我们可以把每个Class类的对象当做众多类的代理。而且在每个Class类对象中有会有字段记录他引用的这个类的类加载器。
相关方法:
Object ,getClass()-->
 取得该类已经被实例化了的对象的该类的引用,这个引用指向的是Class类的对象。
 这个Class类的对象是在当各类被调入时,由 Java 虚拟机自动创建 Class 对象,或通过类装载器中的 defineClass 方法生成。
 我们生成的对象都会有个字段记录该对象所属类在CLass类的对象的所在位置。
Class.forName()-->
 该方法返回给定串名相应的Class 对象。若给定一个类或接口的完整路径名,那么此方法将试图定位、装载和连接该类。若成功,返回该类对象。否则,抛出 ClassNotFoundException 异常。
Class ,getClassLoader() -->获取该类的类装载器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值