java中类的初始化过程详解
来源:互联网 发布:微喜帖免费制作软件 编辑:程序博客网 时间:2024/05/17 21:57
在面试中经常会被考到类的初始化顺序相关的问题,老是回答不完善,所以在此进行一个实战并且备个份,供以后查阅。
试验环境说明:
会用到如下几个类:
Father(父类)
Son(子类,继承Father类)
Main(程序入口类)
开始实践
一:Father类和Son类仅仅有一个无参构造器,并且Son继承Father
代码详情:
Father类:
package _01;/** * Created by FengLian on 2017/7/22. */public class Father { public Father() { System.out.println("father inited"); }}
Son类:
package _01;/** * Created by FengLian on 2017/7/22. */public class Son extends Father { public Son() { System.out.println("son inited"); }}
Main类:
package _01;public class Main { public Main() { System.out.println("Main inited"); } public static void main(String[] args) { Son son = new Son(); }}
执行结果
father initedson inited
小结:
由结果可见,如果在初始化一个类时,该类有继承的父类,则先执行父类的构造函数,然后在执行自己的构造函数,并且执行Main类的main函数时,没有指向其构造函数。
二:Father类、Son类、Main类都有自己的静态代码块
代码详情
Father类:
package _02;public class Father { static{ System.out.println("father static"); } public Father() { System.out.println("father inited"); }}
Son类:
package _02;public class Son extends Father { static{ System.out.println("son static"); } public Son() { System.out.println("son inited"); }}
Main类:
package _02;public class Main { static{ System.out.println("Main static"); } public Main() { System.out.println("Main inited"); } public static void main(String[] args) { Son son = new Son(); }}
执行结果:
Main staticfather staticson staticfather initedson inited
小结:
这个结果显示了,优先会执行所有类的静态代码块,并且是从Main类的静态代码块开始,然后是Father类的静态代码块,然后才是Son类的静态代码块(可见静态代码块的执行时是先父类,然后按照继承关系才是执行子类的静态代码块),然后的执行结果和实例一一样。
三:其他保持和实例二不变,只对Main进行简单修改:
代码详情:
package _02;public class Main { static{ System.out.println("Main static"); } public Main() { System.out.println("Main inited"); } public static void main(String[] args) { Son son = new Son(); Son son2 = new Son(); }}
执行结果:
Main staticasor staticfather staticson staticfather initedson initedfather initedson inited
小结:
根据结果我们知道了,静态代码块的只会执行一次。
总结:
一:优先执行入口函数(即main函数)所在类的静态代码,然后才会执行其他类的静态代码。
二:执行其他类的静态代码是,根据继承关系,从父类到之类执行其对应的静态代码块,且静态代码块只执行一次。
三:一个类中的静态代码块会在构造函数之前被执行。
四:构造函数的执行时根据继承关系,先执行父类的构造函数,再执行子类的构造函数。
项目代码:http://download.csdn.net/detail/happyeveryminutefl/9907685
阅读全文
0 0
- java中类的初始化过程详解
- Java中对象的初始化过程详解
- java类的初始化过程详解
- Java中类的初始化过程
- java继承中类的初始化过程
- Java 初始化过程详解
- Java 初始化过程详解
- java类的初始化过程
- JAVA类的初始化过程
- Java类的初始化过程
- Java 类的初始化过程
- Java类的初始化过程
- Java类的初始化过程
- Java类的初始化过程
- Java类的初始化过程
- Java类中变量的初始化/赋值过程
- Java中对象的初始化生成过程
- java中继承的初始化过程
- 面试经历
- Python入门系列——第7篇
- Allegro 如何设置个别引脚与shape全接触
- HDU3555 Bomb —— 数位DP
- 21.实例 --- location
- java中类的初始化过程详解
- json的页面原始编写
- man命令的使用
- C++ 动态内存管理
- 从头开始之JSP+Servlet
- 1001·实数运算1
- 检验入栈序列、出栈序列是否合法
- 远程登录
- angular的同级controller通信