类的加载细节探索

 1 public class TestClassLoader1 {
 2     public static void main(String[] args) {
 3 
 4         Test test = new Test();
 5     }
 6 }
 7 class Test{
 8 
 9     static{
10         m=200;
11     }
12 
13     static int m=100;
14     static{
15         m=250;
16         System.out.println(m);
17         System.out.println("静态代码块执行完毕。");
18     }
19 
20     public Test(){
21         m=400;
22         System.out.println(m);
23         System.out.println("构造方法。");
24     }
25 }

1.创建一个对象有三个阶段:加载,链接,初始化。以上示例说明:静态变量在加载的时候被加载进内存,链接时给静态变量赋初始值为0,在初始化阶段有JVM调用clinit()方法来按顺序合并静态代码块。

2.测试什么情况下类会被加载:new 对象;调用父类的静态变量;

 1 public class Test3 {
 2     public static void main(String[] args) throws ClassNotFoundException {
 3         //1.主动加载
 4         Son son = new Son();
 5 
 6         //2.通过子类引用父类的静态变量,会让父类加载
 7         System.out.println(Son.a);
 8 
 9         //3.Class.forName()方法让子类加载
10         Class c = Class.forName("TestMyself.Son");
11 
12         //4.定义数组,类不会被加载
13         Son[] sons=new Son[3]; 14 15 //5.调用静态常量类也不会被加载 16  System.out.println(Son.c); 17  } 18 } 19 class Father{ 20 static int a=100; 21 static{ 22 System.out.println("Father 静态代码块"); 23  } 24 } 25 26 class Son extends Father{ 27 static int b=200; 28 static final int c=300; 29 static{ 30 System.out.println("Son 静态代码块"); 31  } 32 }

3.获得类加载器:

主要方法:

classLaoder.getSystemClassLoader():获得系统类加载器;

getParent():获得父类加载器;

 1 //获得类加载器--->Class.getClassLoader():Class对象获得类加载器
 2 public class Test4 {
 3     public static void main(String[] args) throws ClassNotFoundException {
 4         //系统类加载器:-->加载用户定义的类
 5         ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
 6         System.out.println(systemClassLoader);
 7 
 8         //扩展类加载器:-->加载扩展类
 9         ClassLoader parent = systemClassLoader.getParent();
10  System.out.println(parent); 11 12 //根加载器:--->加载核心类(用c/c++编写): 13 ClassLoader parent1 = parent.getParent(); 14  System.out.println(parent1); 15 16 ClassLoader classLoader = Class.forName("java.lang.String").getClassLoader(); 17  } 18 }

转载于:https://www.cnblogs.com/xbfchder/p/11013323.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值