子类的实例化(静态代码块,静态成员变量,构造方法)
子类实例化顺序
-父类
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,父类和子类同名属性时,子类覆盖父类的,改变子类的属性值父类的不会改变(存在两个内存值)
推荐阅读
-
java 对象的初始化流程(静态成员、静态代码块、普通代码块、构造方法)
-
荐 java基础中的--------构造方法+静态+代码块+主方法解释
-
静态方法和构造方法的执行顺序以及代码块的区分
-
Java构造方法、成员变量初始化以及静态成员变量初始化三者的先后顺序是什么样的?
-
Java中的成员初始化顺序--静态代码、实例变量、构造函数(转)
-
关于静态代码块,构造代码块,构造方法,普通代码块的一些概念和执行顺序
-
关于静态语句块、非静态语句块,成员变量初始化、构造方法在父子类执行的顺序:
-
类加载机制,类初始化时各个成员执行的顺序,静态代码块,静态方法,静态成员变量
-
子类的实例化(静态代码块,静态成员变量,构造方法)
-
Java中的成员初始化顺序--静态代码、实例变量、构造函数(转)