- public class Main extends PP{
- static{//子类的静态初始块
- System.out.println("Main:Static Block Init");
- }
- static int a=U.f("Main:static a Init");//子类的静态域
- {//子类的普通初始块
- System.out.println("Main:Block Init");
- d = 10;//尽管d在后面定义的,但这里已经有效。
- }
- int d=U.f("Main:d Init");//子类的成员变量
- public Main() {//子类的无参构造方法
- System.out.println("Main:Construct Init");
- }
- public static void main(String[] rgs) {
- new Main();//new一个子类对象
- }
- }
- class PP{//父类
- static int c = U.f("PP:static c Init");//父类的静态域
- int b=U.f("PP:b Init");//父类的成员变量
- static{//父类的静态初始块
- System.out.println("PP:Static Block Init");
- }
- {//父类的普通初始块
- System.out.println("PP:Block Init");
- }
- PP(){//父类的无参构造方法
- System.out.println("PP:Construct Init");
- }
- }
- class U{
- static int f(String s){
- System.out.println(s);
- return 1;
- }
- }
复制代码 最先开始的就是类的静态域和静态初始块,这两者先后顺序以在代码中出现的顺序为准。先是父类的静态部分,再是子类的静态部分。
接着是父类的成员变量和普通初始块,两者先后顺序依然以在代码中的出现顺序为准。这两者完成后,是父类的构造方法。
接下来才是子类的成员变量和普通初始块,先后顺序依然以代码里的先后顺序为准,最后才是子类的构造方法。 |