java对象初始化顺序(含测试代码)
2017-10-12 20:19
447 查看
对象初始化顺序:
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:
4000
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
结果分析,符合上面结论。
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:
4000
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
结果分析,符合上面结论。
相关文章推荐
- Java 类的初始化顺序 附测试代码
- Java中创建对象时,初始化成员变量的代码的执行顺序
- 简单测试java里一个对象的初始化是按怎样的顺序执行的
- Java对象初始化顺序
- Java对象初始化顺序
- Java类和对象的初始化顺序
- 剖析一个java对象初始化顺序问题
- JAVA对象初始化顺序
- 关于java中初始化顺序的总结及其势力代码!希望高手们可以帮助补充
- java中对象方法初始化顺序
- java对象初始化顺序
- java对象初始化顺序
- 百无聊赖时对java类初始化先后顺序的测试
- java对象实例初始化顺序
- Java基础 构造对象初始化变量的顺序浅见
- java对象的初始化顺序
- java类与对象的初始化顺序
- My_Java之笔记(3)-对象初始化顺序
- Java学习笔记(1) 对象初始化顺序
- Java 对象初始化顺序