您的位置:首页 > 编程语言 > Java开发

Java类的初始化顺序

2011-09-08 16:01 211 查看
一:先不考虑继承。一个类中初始化的顺序规则是:

(1)静态变量>普通变量>构造器。

(2)变量定义的顺序决定初始化的顺序。

(3)静态变量和静态块是一样的,变量和非静态块是一样的。即可以把静态块看作是静态变量,把非静态块看作是

变量。

public   class D {
/**D的构造器**/
public D(){
System.out.println("D的构造器");
}
/**D静态代码块**/
static{
System.out.println("执行静态代码块");
}

/**D变量**/
private C c1=new C("变量--(1)");
private C c2=new C("变量--(2)");

/**D非静态代码块**/
{
System.out.println("执行非静态代码块");
}

/**D的静态变量**/

private static C c3=new C("静态变量--(3)");
private static C c4=new C("静态变量--(4)");
public static void main(String [] args){
new D();
}
}
class C{
public C(String s){
System.out.println(s+"------cccccccccccccc");
}
}


执行静态代码块

静态变量--(3)------cccccccccccccc

静态变量--(4)------cccccccccccccc

变量--(1)------cccccccccccccc

变量--(2)------cccccccccccccc

执行非静态代码块

D的构造器

二:如果有继承的话。那么初始化的顺序规则是:

(1)父类的初始化>子类的初始化

(2)静态变量>普通变量>构造器。

(3)变量定义的顺序决定初始化的顺序。

(4)静态变量和静态块是一样的,变量和非静态块是一样的。即可以把静态块看作是静态变量,把非静态块看作是

变量。

class C{
public C(String s){
System.out.println(s+"------cccccccccccccc");
}
}

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

/***** 静态变量****/
public static C c3=new C("父类静态变量1");
/***** 静态初始化块****/
static {
System.out.println("父类--静态初始化块");
}
public static C c4=new C("父类静态变量2");

/***** 变量****/
public C c1 = new C("父类--变量1");
/***** 始化块****/
{
System.out.println("父类--初始化块");
}
public C c2 = new C("父类--变量2");

}

public class B extends A {
/***构造器***/
public B() {
System.out.println("子类--构造器");
}

/***** 静态变量****/
public static C c1=new C("子类静态变量1");
/***** 静态初始化块****/
static {
System.out.println("子类--静态初始化块");
}
public static C c2=new C("子类静态变量2");

/***** 变量****/
public C c3 = new C("子类--变量1");
/***** 始化块****/
{
System.out.println("子类--初始化块");
}
public C c4 = new C("子类--变量2");

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


父类静态变量1------cccccccccccccc

父类--静态初始化块

父类静态变量2------cccccccccccccc

子类静态变量1------cccccccccccccc

子类--静态初始化块

子类静态变量2------cccccccccccccc

父类--变量1------cccccccccccccc

父类--初始化块

父类--变量2------cccccccccccccc

父类--构造器

子类--变量1------cccccccccccccc

子类--初始化块

子类--变量2------cccccccccccccc

子类--构造器

注:父类静态变量->子类静态变量->父类实例变量->父类构造器->子类实例变量->子类构造器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: