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

new 对象时,其静态成员变量、非静态成员、代码块、构建器的执行顺序

2013-04-22 15:12 381 查看
1、示例代码:

class Dmeo

{

int a=f1();

static int b=f2();

Demo()

{

System.out.println("构建器开始执行!");

}

{

System.out.println("非静态代码块执行!");

}

static {

System.out.println("静态代码块执行!");

}

int  f1()

{

System.out.println("非静态变量开始初始化");

return 1;

}

int  f2()

{

System.out.println("静态变量开始初始化");

return 2;

}

}

Demo d=new Demo();

结果:

静态变量开始初始化

静态代码块开始初始化

非静态变量开始初始化

非静态代码块开始初始化

构建器开始执行

注意:当同为静态或非静态时,那么执行的顺序就是它们在代码上出现的位置的先后。

2、当一个子类继承一个父类时,那么执行顺序又是如何呢。

class A11

{
A11()
{
System.out.println("A constructor");
}

{
System.out.println("A的非静态代码块");//非静态代码块与非静态成员变量的初始化的顺序与它们自身
//在代码中的位置顺序有关
}
static 
{
System.out.println("A staic area");
}
int a=f1();
static int aa=methodA();//静态代码块与静态成员变量的初始化的顺序与它们自身
//在代码中的位置顺序有关
public static int methodA()
{
System.out.println("A 静态成员初始化!");
return 1;
}
public int  f1()
{
System.out.println("A 对成员变量的初始化");
return 1;
}

}

class B11 extends A11

{
B11()
{
System.out.println("B constructor");
}

{
System.out.println("B的非静态代码块");
}

static 
{
System.out.println("B staic area");
}
int b=f2();
static int bb=methodB();
public static int methodB()
{
System.out.println("B 静态成员初始化!");
return 1;
}
public int  f2()
{
System.out.println("B 对成员变量的初始化");
return 2;
}

}

class C11 extends B11

{

C11()
{
System.out.println("C constructor");
}

{
System.out.println("C的非静态代码块");
}

static 
{
System.out.println("C staic area");
}

int c=f3();
static int cc=methodC();
public static int methodC()
{
System.out.println("C 静态成员初始化!");
return 1;
}
public int  f3()
{
System.out.println("C对成员变量的初始化");
return 3;
}

}

class  InitializeSequenceDmeo

{
public static void main(String[] args) 
{
C11 c=new C11();
}

}

结果:

A staic area

A 静态成员初始化!

B staic area

B 静态成员初始化!

C staic area

C 静态成员初始化!

A的非静态代码块

A 对成员变量的初始化

A constructor

B的非静态代码块

B 对成员变量的初始化

B constructor

C的非静态代码块

C对成员变量的初始化

C constructor

3、扩展

(1) .  类加载先执行的是静态部分(静态成员和静态代码块),再然后是在创建对象实例的时候进行非静态的成员变量还有非静态代码块的执行,再最后才是构造函数。

静态代码块与静态方法的区别:静态代码块是在类加载时自动执行的,而静态方法只有在被调用时才会被执行。

(2)

 a.载入对象的.class文件,并在这时对static 进行初始化。

 b.然后在堆在开辟足够多的内存空间

 c.对所有的基本类型设为默认值

 d.将所有的字断(类成员变量)进行初始化

 e.执行构建器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  初始 执行顺序
相关文章推荐