黑马程序员技术交流社区
标题:
面向对象中的对象初始化整理,综合子父类、代码块等等
[打印本页]
作者:
wygsqsj
时间:
2016-1-7 12:45
标题:
面向对象中的对象初始化整理,综合子父类、代码块等等
今天总结了一下子父类当中含有静态代码块、代码块、构造函数、成员变量、子类复写父类方法时子类的初始化过程,把思路理清一下
class Fu
{
//父类成员变量
private int num = 3;
//静态代码块,随着类的加载而加载
static{
System.out.println("父类静态代码块");
}
//代码块,运行于构造函数之前,成员变量显示初始化之后
{
System.out.println("父类代码块,num = "+num);
}
//构造函数,先去找他爸爸,运行完父类再运行子类
Fu(){
super();//此处去找Object,可忽略
System.out.println("父类构造函数,num = "+num);
//此处调用的是子类的show方法,因为被覆盖了,注意子类覆盖父类方法时,返回值也得一样
show();
}
public void show()
{
System.out.println("父类show方法,num = "+num);
}
}
class Demo extends Fu
{
private int age =23;
//静态代码块,他有直接父类时,先去加载直接父类
static{
System.out.println("子类静态代码块");
}
//构造代码块,当有直接父类时,当父类运行完毕才轮到构造代码块
{
System.out.println("子类代码块,age = "+age);
}
Demo()
{
System.out.println("子类构造函数,age = "+age);
show();
}
public void show()
{
System.out.println("子类show方法,age = "+age);
}
public static void main(String[] args)throws IOException
{
new Demo();
}
/*
* 父类静态代码块
子类静态代码块
父类代码块,num = 3
父类构造函数,num = 3
子类show方法,age = 0
子类代码块,age = 23
子类构造函数,age = 23
子类show方法,age = 23
* */
}
复制代码
总结一下:
1.父类字节码先被JVM加载,父类静态代码块先运行。
2.子类字节码被加载,子类静态代码块运行。
3.子类构造函数进栈,子类的成员变量默认初始化
4.super启动,父类构造函数进栈,父类成员变量默认初始化(super-->Object,可忽略)
5.父类成员变量显示初始化
6.父类构造代码块加载
7.父类构造函数运行。
8.子类成员变量显示初始化
9.子类构造代码块运行。
10.子类构造函数运行
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2