`

java类的初始化顺序

阅读更多

转载:http://zangweiren.iteye.com/blog/208122  http://lihaoquan.iteye.com/blog/565383

 

调用顺序: 
JAVA类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的,静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同,同级别根据代码的先后顺序初始化


先初始化父类的静态代码--->初始化子类的静态代码--> 
(创建实例时,如果不创建实例,则后面的不执行)初始化父类的非静态代码--->初始化父类构造函数--->初始化子类非静态代码--->初始化子类构造函数


2 、类只有在使用New调用创建的时候才会被JAVA类装载器装入


3、创建类实例时,首先按照父子继承关系进行初始化


4、类实例创建时候,首先初始化块部分先执行,然后是构造方法;然后从本类继承的子类的初始化块执行,最后是子类的构造方法 
5、类消除时候,首先消除子类部分,再消除父类部分 

1.  父类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行 
2.  子类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行 
3.  父类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行 
4.  父类构造方法 
5.  子类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行 
6.  子类构造方法

 

一、对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序以此是(静态变量、静态初始化块)>(成员变量、初始化块)>构造器。

 

 

public class InitialOrderTest { 

// 静态变量 
public static String staticField = "静态变量"; 
// 变量 
public String field = "变量"; 

// 静态初始化块 
static { 
System.out.println(staticField); 
System.out.println("静态初始化块"); 
} 

// 初始化块 
{ 
System.out.println(field); 
System.out.println("初始化块"); 
} 

// 构造器 
public InitialOrderTest() { 
System.out.println("构造器"); 
} 

public static void main(String[] args) { 
new InitialOrderTest(); 
} 
} 

 

 

 二、继承的初始化

 

class Parent { 
// 静态变量 
public static String p_StaticField = "父类--静态变量"; 
// 变量 
public String p_Field = "父类--变量"; 

// 静态初始化块 
static { 
System.out.println(p_StaticField); 
System.out.println("父类--静态初始化块"); 
} 

// 初始化块 
{ 
System.out.println(p_Field); 
System.out.println("父类--初始化块"); 
} 

// 构造器 
public Parent() { 
System.out.println("父类--构造器"); 
} 
} 

 

 

public class SubClass extends Parent { 
// 静态变量 
public static String s_StaticField = "子类--静态变量"; 
// 变量 
public String s_Field = "子类--变量"; 
// 静态初始化块 
static { 
System.out.println(s_StaticField); 
System.out.println("子类--静态初始化块"); 
} 
// 初始化块 
{ 
System.out.println(s_Field); 
System.out.println("子类--初始化块"); 
} 

// 构造器 
public SubClass() { 
System.out.println("子类--构造器"); 
} 

// 程序入口 
public static void main(String[] args) { 
new SubClass(); 
} 
} 
 

 

 

分享到:
评论
1 楼 刀枪剑戟 2011-04-11  
不错,学习了

相关推荐

Global site tag (gtag.js) - Google Analytics