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

深入剖析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原理

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 编译原理请查看之前内容,.java文件编译过程和执行过程分析以及计算机简单认识 需要了解更多Java原创资料,请加...
    坑王老薛阅读 2,434评论 0 5
  • 虚拟机把描述类的数据从Class文件加载到内存, 并对数据进行校验、转换解析和初始化, 最终形成可以被虚拟机直接使...
    好好学习Sun阅读 1,400评论 0 3
  • ClassLoader翻译过来就是类加载器,普通的java开发者其实用到的不多,但对于某些框架开发者来说却非常常见...
    时待吾阅读 1,177评论 0 1
  • 代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,确实编译语言发展的一大步。 虚拟机把描述类的数据从...
    胡二囧阅读 1,088评论 0 0
  • 小王子是孤独的,所以才会看四十三次落日,夕阳每天一次又一次地收走他眼中的最后一点光,可这也还好,毕竟太阳落下,就会...
    冰_心阅读 478评论 0 0

友情链接更多精彩内容