java对象初始化顺序(含测试代码)

本文通过一个具体的Java示例,详细解析了对象初始化的过程,包括静态成员、实例成员、静态初始化块及构造方法的执行顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对象初始化顺序:

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

package test1;


/** 
 * @ClassName: test1 
 * @Description: 测试class对象对向上转型的影响
 * @author: pgj
 * @date: 2017年10月12日 下午4:54:05  
 *  class RTTI说明: http://www.cnblogs.com/vamei/archive/2013/04/14/3013985.html
 * 
 */
public class test1 {
 
 static{
 
System.out.println("test1 static");
 }
public static void main(String[] args) throws ClassNotFoundException {
System.out.println("***1***");
girl girl=new girl();
girl.setId(2);
girl.setName("rose");
girl.setHair("yellow");
girl.setHigh(25);
System.out.println("***2***");
human human=new human();
human.setId(1);
human.setName("tom");
System.out.println("*****");
human human2=(human)girl;///向上转型


System.out.println("----");
Class humangetClass=  human.getClass();
System.out.println("-----");
 Class humforclass=Class.forName("test1.human");
 
 
 String humanZhuanxing=human2.getName();
 System.out.println("humanZhuanxing:"+humanZhuanxing);
System.out.println("humangetClass:"+humangetClass.getName());
System.out.println("humforclass:"+humforclass.getName());

}
class human{
static{

System.out.println("这里是hunman:static");
}
public human() {
// TODO Auto-generated constructor stub
    System.out.println("这里是hunam:constation");
}
private int id;
private String name;
private static test11 test11=new test11();
private test12 test12=new test12();
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return id+" : "+name;
}

}
 class  girl extends human{
static{
 
System.out.println("这里是girl:static");
}
public girl() {
// TODO Auto-generated constructor stub
System.out.println("这里是girl:constation");
}
private Integer high;
private String hair;
private static test11 test11=new test11();
private test12 test12=new test12();
public void setHair(String hair) {
this.hair = hair;
}
public void setHigh(Integer high) {
this.high = high;
}
public String getHair() {
return hair;
}
public Integer getHigh() {
return high;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return high+" : "+hair;
}
 
 }
 class test11{
public test11() {
// TODO Auto-generated constructor stub
System.out.println("这里是静态属性初始化");
}
 
 }
 class test12{
public test12() {
// TODO Auto-generated constructor stub
System.out.println("这里字段属性初始化");
}
 
 }

输出结果:

test1 static
***1***
这里是hunman:static
这里是静态属性初始化
这里是girl:static
这里是静态属性初始化
这里字段属性初始化
这里是hunam:constation
这里字段属性初始化
这里是girl:constation
***2***
这里字段属性初始化
这里是hunam:constation
*****
----
----
-----
humanZhuanxing:rose
humangetClass:test1.human
humforclass:test1.human
结果分析,符合上面结论。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值