外部类,内部类以及静态内部类的加载关系深入探讨

本文详细探讨了Java中的类加载过程,尤其是外部类、内部类和静态内部类之间的加载关系。通过实验验证,得出结论:静态内部类的加载并不会导致外部类加载,而内部类的使用则需要先加载外部类。这一发现对于理解Java类加载机制和单例模式的实现至关重要。
摘要由CSDN通过智能技术生成

前言:

  在看单例模式的时候,在网上找帖子看见其中有一种(IoDH) 实现单例的方式,其中用到了静态内部类,文章中有写到当jvm加载外部类的时候,并没有加载静态内部类这和之前自己想的不一样,特意在网上找了一些帖子总结一下。

一、学习前的疑问:

  稍微了解Java虚拟机内的加载过程的步骤,都很清楚,一个类的静态资源、一些常量都是在类加载的时候就被加载金内存中分配空间了,所以我一开始理所当然的以为静态内部类中的静态变量同样属于静态资源,也应该在在内加载的时候被加载,然而实际情况却不是这样的,带着这个问题我上网找了几篇博客查找原因。

结果发现很多博客的结论都是错的,于是自己花了半下午的时间自己写程序测试

写测试代码前先澄清一个容易混淆的概念,类的装载和加载。这里用装载表示加载、验证、准备、解析、初始化五个过程。因为打印输出的代码只能写在执行的方法中,无论是静态代码块还是构造方法中,都是在初始化阶段执行的。因此只靠输出的日志只能判断类有没有初始化,不能判断类有没有加载(读取class文件)。因此还需要在

java.lang.ClassLoader类的loadClass方法中打断点,来看加载的类名。还需要再断点上加条件,否则要加载的类太多了,如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值