Java初始化的三个原则:
1. 静态对象优先于非静态对象
2. 父类优先于子类
3. 成员变量优先于任何方法,包括构造函数
先后顺序为:
父类static变量->父类static代码块->子类static变量->子类static代码块->父类非static变量->父类非static代码块->父类构造函数->子类非static变量->子类非static代码块->子类构造函数
例如:
class Father{
static{
System.out.println("父类静态代码块");
}
{
System.out.println("父类非静态代码块");
}
public Father() {
// TODO Auto-generated constructor stub
System.out.println("父类构造方法");
}
void f(){
System.out.println("父类方法");
}
}
class Son extends Father{
static{
System.out.println("子类静态代码块");
}
{
System.out.println("子类非静态代码块");
}
public Son() {
// TODO Auto-generated constructor stub
System.out.println("子类构造方法");
}
void f(){
System.out.println("子类方法");
}
}
public class test1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Son son = new Son();
son.f();
}
static{
System.out.println("静态代码块");
}
}
输出:
静态代码块
父类静态代码块
子类静态代码块
父类非静态代码块
父类构造方法
子类非静态代码块
子类构造方法
子类方法