子类实例化顺序
-父类
public class test {
public static String testStatic = “testStaticString”;
//public static Integer i=0;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String name;
public test(){
System.out.println(“test”);
System.out.println(i);
}
static {
i=10;
System.out.println(“testStatic”);
System.out.println(test.testStatic);
}
- 子类
public class test123 extends test {
public static String test123Static = “test123StaticString”;
public test123(){
System.out.println(“test123”);
}
static {
System.out.println(“test123Static”);
}
public static void main(String[] args) {
// System.out.println(test123.test123Static);
// System.out.println(test123.testStatic);
test123 te = new test123();
结果:testStatic
testStaticString
test123Static
test
10
test123
- 结果分析:1先加载父类的静态代码块(或静态成员变量,和代码顺序有关),2加载子类的静态代码块(或成员变量,和代码顺序有关),3加载父类构造函数给父类属性符初值(不会实例化父类对象),4加载子类构造子类构造函数生成子类实例,5,父类和子类同名属性时,子类覆盖父类的,改变子类的属性值父类的不会改变(存在两个内存值)