Java 类初始化过程
2015-08-05 20:44
483 查看
摘要: jdb
类在调用构造函数之前,首先要执行初始化类成员的语句,如果继承了其它的类,则先调用父类的构造函数,之后才执行本类的类成员初始化语句,所以执行顺序为(按照行号标识): 21,16,3,2,9,10(Y),3,4,(X), 16,15,9,10(Y),16,17(Z),之后继续执行到结束.()中为该行输出的字符,所以输出结果为YXYZ。
只以HelloA类为例说明初始化过程:1. static 修饰的静态语句,2.普通类成员的初始化语句,3.构造函数。由于HelloB继承了HelloA,所以只有把HelloA载入内存之后,才会把HelloB载入内存。类中的static块在类被载入内存时立即执行,所以先输出static B,再输出static A。静态块执行完成后,跳转到类的构造函数处,但并不执行其中的构造语句,如果有父类又会跳到父类的构造函数处,但也不立即执行其中的语句。在执行完父类类成员的初始化语句后,才回到父类的构造函数处继续执行,父类构造函数完成后回到子类构造函数,执行子类类成员的初始化,子类属性完成后才回到子类的构造函数处继续执行。
附: jdb命令是jdk附带的一个类似linux gdb的一个调试命令,可以在命令行跟踪程序的运行,详情需参阅文档。
1 class X { 2 Y b = new Y(); 3 X() { 4 System.out.print("X"); 5 } 6 } 7 8 class Y { 9 Y() { 10 System.out.print("Y"); 11 } 12 } 13 14 public class Z extends X { 15 Y y = new Y(); 16 Z() { 17 System.out.print("Z"); 18 } 19 20 public static void main(String[] args) { 21 new Z(); 22 } 23 }
类在调用构造函数之前,首先要执行初始化类成员的语句,如果继承了其它的类,则先调用父类的构造函数,之后才执行本类的类成员初始化语句,所以执行顺序为(按照行号标识): 21,16,3,2,9,10(Y),3,4,(X), 16,15,9,10(Y),16,17(Z),之后继续执行到结束.()中为该行输出的字符,所以输出结果为YXYZ。
class HelloA { public HelloA() { System.out.println("HelloA"); } { System.out.println("I'm A class"); } static { System.out.println("static A"); } } public class HelloB extends HelloA { public HelloB() { System.out.println("HelloB"); } { System.out.println("I'm B class"); } static { System.out.println("static B"); } public static void main(String[] args) { new HelloB(); } }
只以HelloA类为例说明初始化过程:1. static 修饰的静态语句,2.普通类成员的初始化语句,3.构造函数。由于HelloB继承了HelloA,所以只有把HelloA载入内存之后,才会把HelloB载入内存。类中的static块在类被载入内存时立即执行,所以先输出static B,再输出static A。静态块执行完成后,跳转到类的构造函数处,但并不执行其中的构造语句,如果有父类又会跳到父类的构造函数处,但也不立即执行其中的语句。在执行完父类类成员的初始化语句后,才回到父类的构造函数处继续执行,父类构造函数完成后回到子类构造函数,执行子类类成员的初始化,子类属性完成后才回到子类的构造函数处继续执行。
附: jdb命令是jdk附带的一个类似linux gdb的一个调试命令,可以在命令行跟踪程序的运行,详情需参阅文档。
相关文章推荐
- java 判断对象是否是某个类的类型方法
- Spring 配置文件中如何配置数据库连接
- java工具类(三)之生成若干位随机数
- Java中简单的生产者和消费者问题
- java工具类(三)之生成若干位随机数
- java文件操作工具类
- Eclipse导入android项目出错解决办法
- java File 路径
- The type org.springframework.dao.support.DaoSupport cannot be resolved.
- [leetcode-76]Minimum Window Substring(java)
- 【JAVA基础】JAVA中分包的规范
- JDK、JRE安装以及 Java环境变量配置
- Java大数 字符串处理 HDU2100
- Java程序设计之打印100~999的水仙花数
- Struts2知多少(1) Struts2 MVC架构
- Deep Analysis Java Memory Model
- Java多线程通信-利用传统的线程通信wait(),notify()方法实现“生产者消费者模式”
- this对象的引用
- Final关键字
- 【JAVA】模拟登陆教务系统