java成员变量初始化顺序

闲来无事,写了一个java成员变量初始化的顺序的小例子
[size=large]代码如下[/size]
[size=large]父类[/size]


package com.own.test;

public class Bird {

private String birdColor;
private static Enemy enemy = new Enemy("superclass static member is initialized");
private int age = getAge();

public Bird(String birdColor){
this.birdColor = birdColor;
System.out.println("superclass constructor called");
}

private int getAge() {
// TODO Auto-generated method stub
System.out.println("superclass member is initialized");
return 9;
}

public Bird(){
System.out.println("Bird() constructor called ");
}

}



[size=large]子类[/size]

package com.own.test;

public class Parrot extends Bird {
private Food food = new Food("subclass member is initialized");
private static Friend friend = new Friend("sublass static member is initialized");
public Parrot(String birdColor){
super(birdColor);
System.out.println("subclass contructor is called");
}


}


[size=large]辅助类[/size]
package com.own.test;

public class Enemy {

public Enemy(String message) {
System.out.println(message);
}


}



package com.own.test;

public class Food {

public Food(String message){
System.out.println(message);
}
}




package com.own.test;

public class Friend {

public Friend(String message){
System.out.println(message);
}

}



[size=large]测试类[/size]


package test;

import org.junit.Test;

import com.own.test.Parrot;

public class MemberInitSequenceTest {

@Test
public void testInitSequence(){
Parrot p = new Parrot("green");
}

}



[size=large]输出结果如下[/size]
[size=large]
superclass static member is initialized
sublass static member is initialized
superclass member is initialized
superclass constructor called
subclass member is initialized
subclass contructor is called
[/size]
[size=large]总结如下:[/size]
[size=large]
当运行这个测试的时候,执行到new parrot()的时候虚拟机回加载Parrot这个类,在加载的过程中发现他继承Bird这个类,虚拟机就回去加载Bird这个类,直到没有父类,不管你创不创建父类对象,父类都会被加载到虚拟机里,然后jvm会执行父类的静态初始化(这里是Bird类)然后是派生类的静态变量初始化(可能子类的静态变量初始化要用到父类的静态成员初始化),直到所有的派生类的静态成员初始化完成,到此,所有的类都加载完了,可以创建父对象了,所有的primitive类型的被设为默认值,reference被设置成null,这个过程很快,如果有对成员变量赋值,则执行赋值,然后执行构造函数,派生类的执行给父类一样,这里不再重复。
[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值