刚刚开始学习Java的时候就很想写这么一片文章,到今天没什么事,回顾一下以前学习的,弄出来当作记忆,废话不多说,程序猿应该直接上代码。。。
1.类无继承时的初始化顺序
1 package com.cn.qiao.other.test; 2 3 4 /** 5 * @author yang_qiao 6 * 类无继承时的初始化顺序 7 * 静态变量、静态块、 8 * 变量、普通块、 9 * 构造器 10 * 11 */ 12 public class ClassInitalOrderTest { 13 14 //静态变量 15 public static String staticVar = "static variable"; 16 //普通变量 17 private String normalVar = "normal variable"; 18 19 /** 20 * 在静态块中不能打印显示普通变量, 21 * 此时普通变量未被初始化, 22 * 如过打印显示直接提示错误 23 */ 24 static{ 25 System.out.println("Static block init"); 26 System.out.println(staticVar); 27 //System.out.println(normalVar); 28 } 29 /** 30 * 静态块 31 */ 32 { 33 System.out.println("Normal block init"); 34 System.out.println(normalVar); 35 } 36 37 /** 38 * 构造函数 39 */ 40 public ClassInitalOrderTest(){ 41 System.out.println("Constructor init"); 42 System.out.println(staticVar); 43 System.out.println(normalVar); 44 } 45 46 /** 47 * @param args 48 */ 49 @SuppressWarnings("unused") 50 public static void main(String[] args) { 51 //测试 52 ClassInitalOrderTest ciot = new ClassInitalOrderTest(); 53 54 } 55 56 }
2.有继承时子类的初始化顺序
1 package com.cn.qiao.other.test; 2 3 public class SuperClass { 4 //父类静态变量 5 public static String superStaticVar = "Super static variable"; 6 //父类普通变量 7 private String superNormalVar = "Super normal variable"; 8 /** 9 * 父类静态块 10 */ 11 static{ 12 System.out.println("Super static block init"); 13 System.out.println(superStaticVar); 14 System.out.println("Super static block init over"); 15 } 16 /** 17 * 父类普通块 18 */ 19 { 20 System.out.println("Super normal block init"); 21 System.out.println(superNormalVar); 22 System.out.println("Super normal block init over"); 23 } 24 25 /** 26 * 构造函数 27 */ 28 public SuperClass(){ 29 System.out.println("Super constructor init"); 30 System.out.println(superStaticVar); 31 System.out.println(superNormalVar); 32 System.out.println("Super constructor init over"); 33 } 34 35 36 }
1 package com.cn.qiao.other.test; 2 3 public class SubClass extends SuperClass { 4 5 //子类静态变量 6 public static String subStaticVar = "Sub static variable"; 7 //子类普通变量 8 private String subNormalVar = "Sub normal variable"; 9 10 /** 11 * 子类静态块 12 */ 13 static{ 14 System.out.println("Sub Class static block init"); 15 System.out.println(subStaticVar); 16 System.out.println("Sub Class static block init over"); 17 } 18 /** 19 * 子类普通块 20 */ 21 { 22 System.out.println("Sub class normal block init"); 23 System.out.println(subNormalVar); 24 System.out.println("Sub class normal block init over"); 25 } 26 27 /** 28 * 子类构造函数 29 */ 30 public SubClass(){ 31 System.out.println("Sub class constructor init"); 32 System.out.println(subStaticVar); 33 System.out.println(subNormalVar); 34 System.out.println("Sub class constructor init over"); 35 } 36 37 /** 38 * @param args 39 */ 40 @SuppressWarnings("unused") 41 public static void main(String[] args) { 42 //测试 43 /** 44 * 有继承时类的初始化顺序 45 * 父类-静态变量 46 * 父类-静态块 47 * 子类-静态变量 48 * 子类-静态块 49 * 父类-普通变量 50 * 父类-普通块 51 * 父类-构造函数 52 * 子类-普通变量 53 * 子类-普通块 54 * 子类-构造函数 55 */ 56 SubClass sc = new SubClass(); 57 58 } 59 60 }