java 类加载后不一定会对类进行初始化

本文深入探讨Java中类初始化的各种情况,包括创建实例、调用静态方法、使用静态字段、反射操作、子类初始化及启动类初始化。重点介绍了Java编译器如何收集初始化语句和静态初始化器,并将其放入特殊方法clinit中。

下面是会对类进行初始化的情况:

  1. 当创建某个类的新实例时(如通过new或者反射,克隆,反序列化等)
  2. 当调用某个类的静态方法时
  3. 当使用某个类或接口的静态字段时
  4. 当调用Java API中的某些反射方法时,比如类Class中的方法,或者java.lang.reflect中的类的方法时
  5. 当初始化某个子类时
  6. 当虚拟机启动某个被标明为启动类的类(即包含main方法的那个类)

    Java编译器会收集所有的类变量初始化语句和类型的静态初始化器,将这些放到一个特殊的方法中:clinit。 

Class.forName("A")相当于Class.forName("A",true,this.getClass().getClassLoader()) true参数代表对类A进行初始化。

Class.forName("A",false,this.getClass().getClassLoader()) 就不会对类A进行初始化了。

ClassLoader的loadClass(String className);方法只会加载并编译某类,并不会对其执行初始化。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值