毕业已有近两年的时间啦,发现大学里刚开始学习的java基础,现在竟然忘得差不多啦,主要原因是平时开发的时候思考的少,所以,才把大学老师教的东西都还给了老师,还好,当时的课件还没丢,现在把当初学习的代码拿来一运行,才知道是这么一回事,现在在这里总结一下,便于以后查阅。
class ClassAA{
int aa=0;
static int a1;
{
System.out.println("AA非Static初始化块!!");
}
ClassAA(){
System.out.println("AA构造方法!!");
}
static{
a1=9;
System.out.println("AA静态初始化块!!");
}
}
class ClassBB extends ClassAA{
{
int a2=3;
System.out.println("BB非Static初始化块!!");
}
ClassBB(){
System.out.println("BB构造方法!!");
}
static{
System.out.println("BB静态初始化块!!");
}
}
public class SonObject {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ClassBB b=new ClassBB();
//System.out.println(b.a2);
}
}
当时老师是这么给总结的:
•Java对象的构造过程执行顺序依次为
1.执行父类的静态成员的赋值
2.执行父类的静态初始化块
3.执行子类的静态成员的赋值
4.执行子类的静态初始化块
5.执行父类的实例成员的赋值
6.执行父类的普通初始化块
7.执行父类的构造函数
8.执行子类的实例成员的赋值
9.执行子类的普通初始化块
10.执行子类的构造函数
因此,上面示例代码中执行结果就是如下
AA静态初始化块!!
BB静态初始化块!!
AA非Static初始化块!!
AA构造方法!!
BB非Static初始化块!!
BB构造方法!!