目 录CONTENT

文章目录

09_类加载器深入解析及重要特性剖析

ByteNews
2019-08-16 / 0 评论 / 0 点赞 / 39,460 阅读 / 828 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-01-16,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

09_类加载器深入解析及重要特性剖析

09_类加载器解析图

09_类加载器2

09_类加载器3

09_类加载器1

09_类加载器4

加上-XX:+TraceClassLoading查看。

代码:

public class MyTest1 {

    public static void main(String[] args) {
        System.out.println(MyChild1.str);
    }

}

class MyParent1{

    public static String str = "hello_world";
    static{
        System.out.println("MyParent1 static static block");
    }
}

class MyChild1 extends MyParent1{

    public static String str2 = "welcome";

    static {
        System.out.println("MyChild1 static block");
    }

}

输出:

[Loaded top.tomxwd.classloader.MyParent1 from file:/E:/IDEA-workspace/jvm-test-01/target/classes/]
[Loaded top.tomxwd.classloader.MyChild1 from file:/E:/IDEA-workspace/jvm-test-01/target/classes/]
MyParent1 static static block
hello_world

分析:

我们知道,当访问某个类的静态变量,或修改某个类的静态变量,会导致这个类被主动使用,那么就会加载、连接、初始化。而上述的代码,可以看到,被主动使用的是MyParent1类,静态代码块也被执行了,然而我们未主动使用的MyChild1也被类加载器加载了进来。因此:类加载器并不需要等到某个类被“首次主动使用”时再加载它

09_类加载器5

09_类加载器6

09_类加载器7

09_类加载器8

09_类加载器9

09_类加载器10

09_类加载器11

09_类加载器12

09_类加载器13

09_类加载器14

09_类加载器15

09_类加载器16

09_类加载器17

09_类加载器18

09_类加载器19

09_类加载器20

09_类加载器21

从表象来看他们是一种继承关系,从实际来看他们其实是一种包含关系,从下往上包含。

0

评论区