43:反射——类加载器

类的生命周期
在一个类编译完成之后,下一步就需要开始使用类,如果要使用一个类,肯定离不开JVM。在程序执行中JVM通过装载,链接,初始化这3个步骤完成。
类装载器工作机制:
类的装载是通过类加载器完成的,加载器将.class文件的二进制文件装入JVM的方法区,并且在堆区创建描述这个类的java.lang.Class对象。用来封装数据。 但是同一个类只会被类装载器装载一次
1:装载:查找和导入Class文件
2:链接就是把二进制数据组装为可以运行的状态。
链接分为校验,准备,解析这3个阶段
校验一般用来确认此二进制文件是否适合当前的JVM(版本),
准备就是为静态成员分配内存空间,
解析指的是转换常量池中的代码作为直接引用的过程,直到所有的符号引用都可以被运行程序使用(建立完整的对应关系)
3:初始化:完成之后,类型也就完成了初始化,初始化之后类的对象就可以正常使用了,直到一个对象不再使用之后,将被垃圾回收。释放空间。
类装载器工作由ClassLoader及其子类负责,ClassLoader是一个重要的java运行时系统组件,负责在运行时查找和装载Class字节码文件。
java在运行时会产生三个ClassLoader:根装载器、ExtClassLoader(扩展类装载器)、AppClassLoader(系统类装载器)。
其中根装载器不是ClassLoader的子类,它由C++编写,根加载器负责装载jre的核心类库。
ExtClassLoader(扩展类装载器)、AppClassLoader(系统类装载器)是ClassLoader的子类,AppClassLoader 是ExtClassLoader 的子类;
ExtClassLoader负责装载jre扩展目录ext中的jar包;AppClassLoader负责装载ClassPath路径下的类包。
默认情况,使用AppClassLoader装载应用程序的类。

package deom;

public class demo {
   public static void main(String[] args) {
        ClassLoader loader=Thread.currentThread().getContextClassLoader();
        System. out.println("current loader=" +loader);
        System. out.println("parent loader=" +loader.getParent());
        System. out.println("grandParent loader="+loader.getParent().getParent());
  }
}

结果:
current loader=sun.misc.Launcher$AppClassLoader@addbf1
parent loader=sun.misc.Launcher$ExtClassLoader@42e816
grandParent loader=null

全盘负责委托机制:
指当一个ClassLoader装载一个类的时候,除非显示的使用另一个ClassLoader,该类依赖及引用的类也有这个ClassLoader;“委托机制”指先委托父装载器寻找目标类,只有在找不到的情况下,才从自己的类路径中查找并装载目标类。
当没有任何引用指向Class对象时就会被卸载,结束类的生命周期
java.lang
类 Class<T>
Java程序中的各个Java类属于同一类事物,描述这类事物的java类名就是Class;
Class类无构造方法;
Class类所表示的对象是 对应的一些字节码(*.class);
对于加载到jvm的字节码,就表示一个Class类的对象;
对于字节码(Class类的对象)
1:对应的类已经加载到jvm中,直接得到该类的字节码
2:未加载到jvm中,就先加载然后得到。
获得一个类的字节码对应的实例对象(Class类实例)
1:类名.class
2:有对象 对象.getClass();
3:
static Class<?>forName(String className)
返回与带有给定字符串名的类或接口相关联的 Class 对象。
ps:做反射的时候常用第三种方法。
基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值