美文网首页
深入剖析Classloader(一)--类的主动使用与被动使用

深入剖析Classloader(一)--类的主动使用与被动使用

作者: fuxiongbing | 来源:发表于2019-11-07 14:31 被阅读0次

深入剖析Classloader(一)--类的主动使用与被动使用

主动使用(六种)

1)   –创建类的实例 (如new Integer())

2)   –访问某个类或接口的静态变量,或者对该静态变量赋值 (读写静态变量)

3)   –调用类的静态方法

4)   –反射(如Class.forName(“com.yhj.jvm.classloader.ClassLoaderTest”))

5)   –初始化一个类的子类 (初始化子类的过程中会主动使用父类的构造方法)

6)   –Java虚拟机启动时被标明为启动类的类(含有main方法并且是启动方法的类)

除了以上六种情况,其他使用Java类的方式都被看作是对类的被动使用,都不会导致类的初始化 (除了上述6种情况以外,都不会执行初始化,只会执行加载和连接)

加载.class文件有几种方式

–从本地系统中直接加载 (直接加载本地硬盘上的.class文件加载)

–通过网络下载.class文件 (通过java.net.URLClassLoader加载网络上的某个.class文件)

–从zip,jar等归档文件中加载.class文件 (引入外部zip、jar包)

–从专有数据库中提取.class文件 (不常用)

–将Java源文件动态编译为.class文件 (动态代理)

1.通过子类访问父类的static 变量,不会导致子类的初始化

2.定义引用数组,不会初始化累

obj[] ojbs = new obj[10]

3.final修饰的常量会在编译期间放到常量池中,不会初始化类

4.final修饰的复杂类型,在编译期间无法计算得出,会初始化类

深入分析Java ClassLoader原理

相关文章

网友评论

      本文标题:深入剖析Classloader(一)--类的主动使用与被动使用

      本文链接:https://www.haomeiwen.com/subject/pkhvbctx.html