首页 / JAVA / 资料-Java基础:父子类加载过程
资料-Java基础:父子类加载过程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了资料-Java基础:父子类加载过程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2140字,纯文字阅读大概需要4分钟。
内容图文
![资料-Java基础:父子类加载过程](/upload/InfoBanner/zyjiaocheng/714/adaed8e87d4e4c13aebdc35d77c61dd5.jpg)
加载顺序
先上桌结论:
父类静态属性(成员变量) > 父类静态代码块 > 子类静态属性 > 子类静态代码块 > 父类非静态属性 > 父类非静态代码块 > 父类构造器 > 子类非静态属性 > 子类非静态代码块 > 子类构造器
这么长怎么记呀?!
这里帮大家小结几个特点:
- 静态属性和代码块,当且仅当该类在程序中第一次被 new 或者第一次被类加载器调用时才会触发(不考虑永久代的回收)。也正是因为上述原因,类优先于对象 加载/new,即 静态优先于非静态。
- 属性(成员变量)优先于构造方法,可以这么理解,加载这整个类,需要先知道类具有哪些属性,并且这些属性初始化完毕之后,这个类的对象才算是完整的。另外,非静态代码块其实就是对象 new 的准备工作之一,算是一个不接受任何外来参数的构造方法。因此,属性 > 非静态代码块 > 构造方法。
- 有趣的是,静态部分(前4个)是父类 > 子类,而 非静态部分(后6个)也是父类 > 子类。
- 另外容易忽略的是,非静态代码块在每次 new 对象时都会运行,可以理解:非静态代码块是正式构造方法前的准备工作(非静态代码块 > 构造方法)。
1 /** 2 * @author Lean.Li 3 * @date 2018/10/15 4 */ 5 public class Main { 6 7 static class A { 8 static Hi hi = new Hi("A"); 9 10 Hi hi2 = new Hi("A2"); 11 12 static { 13 System.out.println("A static"); 14 } 15 16 { 17 System.out.println("AAA"); 18 } 19 20 public A() { 21 System.out.println("A init"); 22 } 23 } 24 25 26 static class B extends A { 27 static Hi hi = new Hi("B"); 28 29 Hi hi2 = new Hi("B2"); 30 31 static { 32 System.out.println("B static"); 33 } 34 35 { 36 System.out.println("BBB"); 37 } 38 39 public B() { 40 System.out.println("B init"); 41 } 42 } 43 44 static class Hi { 45 public Hi(String str) { 46 System.out.println("Hi " + str); 47 } 48 } 49 50 public static void main(String[] args) { 51 System.out.println("初次 new B:"); 52 B b = new B(); 53 System.out.println(); 54 System.out.println("第二次 new B:"); 55 b = new B(); 56 } 57 58 }
运行结果如下:
初次 new B: Hi A A static Hi B B static Hi A2 AAA A init Hi B2 BBB B init 第二次 new B: Hi A2 AAA A init Hi B2 BBB B init
内容总结
以上是互联网集市为您收集整理的资料-Java基础:父子类加载过程全部内容,希望文章能够帮你解决资料-Java基础:父子类加载过程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。