学习笔记06 - java类的加载方式

隐式加载:new
显示加载:loadClass,ForName等,需要调用 .newInstance() 获取实例,不支持传入函数,需要使用反射机制
类的装载过程
   加载:通过classLoader加载class文件字节码,生成class对象。
   链接:
      检查:检查加载的class的正确性和安全性。
      准备:为变量分配存储空间并设置变量初始化。
      解析:执行变量赋值和静态代码块。
   初始化:执行类变量复制和静态代码块。
loadClass(不会执行静态代码块):
ClassLoader cl = Student.class.getClassLoader();
forName(会执行静态代码块):
Class r = Class.forName("com.xiehe.qiluweb.entity.Student");
loadClass 和 forName 区别:

Class.forName: 得到的类是已经初始化的
loadClass:得到的Class是还没有链接的

loadClass:

如果 resolve 为true 会执行resolveClass 进行链接指定的这个类

 protected Class<?> loadClass(String name, boolean resolve)
        throws ClassNotFoundException
    {
forName:

第二个传入参数:true 为 initialize的值 是否进行初始化

 @CallerSensitive
    public static Class<?> forName(String className)
                throws ClassNotFoundException {
        Class<?> caller = Reflection.getCallerClass();
        return forName0(className, true, ClassLoader.getClassLoader(caller), caller);
    }
应用举例:

forName:JDBC链接数据库的时候
loadClass:Spring IOC:资源加载器获取一些资源,及读取一些Bean的配置文件时,如果使用ClassPath,与LazyLoading 有关,加快加载速度,类的初始化到实际使用的时候在做。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值