- package com.bocsoft.study;
- /**
- *
- * @author jojo
- * 时间:2015-1-14
- */
- public class InialTest {
- public static void main(String[] args) {
- Son s = new Son();
- }
- }
- class Father {
- private Info info1 = new Info("父类非静态变量初始化");
- private static Info info2 = new Info("父类静态变量初始化");
- Father(){
- System.out.println("父类构造函数执行");
- }
-
- static{
- Info info3 = new Info("父类静态代码块执行");
- }
- {
- Info info4 = new Info("父类构造代码块执行");
- }
- }
- class Son extends Father{
-
- private Info info1 = new Info("子类非静态变量初始化");
- private static Info info2 = new Info("子类静态变量初始化");
-
- Son(){
- System.out.println("子类构造函数执行");
- }
-
- static{
- Info info3 = new Info("子类静态代码块执行");
- }
- {
- Info info4 = new Info("子类构造代码块执行");
- }
- }
- class Info {
- Info(String message){
- System.out.println(message);
- }
- }
复制代码 好了,废话不多说,一个程序就能说明所有初始化顺序的问题了,送给需要的朋友了。代码可以直接copy,然后运行。需要注意的是,子类成员初始化是在父类构造函数执行之后,子类构造函数执行之前,相信不少人会忽略这一问题。
程序运行的结果如下:
父类静态变量初始化
父类静态代码块执行
子类静态变量初始化
子类静态代码块执行
父类非静态变量初始化
父类构造代码块执行
父类构造函数执行
子类非静态变量初始化
子类构造代码块执行
子类构造函数执行
|