Java中类的数据成员的初始化顺序
2016-05-17 15:09
134 查看
对于单一类:
属性初始化 ---> 按顺序执行静态初始化块(只能操作静态属性)
---> 按顺序执行初始化块 ---> 构造方法
对于存在继承关系的类:
父类属性初始化 ---> 按顺序执行父类静态初始化块 ---> 按顺序执行子类初始化块
---> 按顺序执行父类普通初始化块 ---> 父类构造方法
---> 按顺序执行子类普通初始化块 ---> 子类构造方法
要点1:对于静态初始化块,无论声明多少次对象,只会执行一次
要点2:在主函数之前,会优先桉顺序执行所在类(代码中的Test类)的静态初始化块,之后才执行主函数的内容
参考代码:
以下是包含main函数的Test类
package com.hao; public class Dog extends Animal { //子类中的a变化顺序为 12->23->25->22->24->21 //子类构造方法 Dog(){ System.out.println("子类构造方法"); System.out.printf("%d ---> ", a); a = 21; System.out.println(a); } //子类普通初始化块1 { System.out.println("子类普通初始化块1"); System.out.printf("%d ---> ", a); a = 22; System.out.println(a); } //子类静态初始化块1 static{ System.out.println("子类静态初始化块1"); System.out.printf("%d ---> ", a); a = 23; System.out.println(a); } //子类普通初始化块2 { System.out.println("子类普通初始化块2"); System.out.printf("%d ---> ", a); a = 24; System.out.println(a); } //子类静态初始化块2 static{ System.out.println("子类静态初始化块2"); System.out.printf("%d ---> ", a); a = 25; System.out.println(a); } }
View Code
上述代码a的值的变化顺序依次为 11 14 16 23 25 13 15 12 22 24 21 (这里开始是第二个对象的了) 13 15 12 22 24 21
相关文章推荐
- struts.xml配置详解
- Android Studio 和 Eclipse 中获取SHA1详解
- 创建Maven父子工程并导入Eclipse
- java中this关键字
- Java MD5加密算法
- Java中线程的俩种方式,编码的变体
- java 异步操作数据库
- javamail在main方法中可以读取邮件,在web项目中读取不到邮件信息
- java 集合框架总结
- Struts2中的国际化
- java 面向对象练习题3
- 在Java中如何高效判断数组中是否包含某个元素
- SpringMVC控制器接收不了PUT提交的参数的解决方案
- 解决Eclipse Debug 的source not found问题
- 深入理解Java:SimpleDateFormat安全的时间格式化
- spring jdbcTemplate query
- Pascal's Triangle II
- javasript dom 中获取元素类名 或者 改变类 引用另外一个类
- javasript dom 中获取元素类名 或者 改变类 引用另外一个类
- javasript dom 中获取元素类名 或者 改变类 引用另外一个类