Java中代码的执行顺序

来源:互联网 发布:ovid数据库检索方式 编辑:程序博客网 时间:2024/06/05 21:55

今天要说的问题是,Java中代码的执行顺序,不知道叫这个题目合适不。这里先定义几个类别:

  • 构造方法(如:public className(){……}
  • 静态代码块(如:static {……}
  • 类的属性变量(如:ClassA a = new ClassA()

这些它们在类被初始化时执行的顺序时怎么样的呢?

代码

package test;public class ClassOrderTest {    static class A{        C c =new C();        public A(){            System.out.println("A's Constructor");        }        static {            System.out.println("A's static ");        }    }    static class B extends A{        public B(){            System.out.println("B's Constructor");        }        D d = new D();        C c =new C();        static {            System.out.println("B's static ");        }    }    static class C {        public C(){            System.out.println("C's Constructor");        }        static {            System.out.println("C's static");        }    }    static class D{        public D(){            System.out.println("D's Constructor");        }        static {            System.out.println("D's static");        }    }    public static void main(String args[]){        System.out.println("start");        B b = new B();    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

上面的代码中,因为几个类都要在Main方法中运行,因此就声明为static类型了,这个大家都知道的吧,不声明为static时,编译器会报错:No enclosing instance of type ClassName is accessible. 
主要使用了四个静态内部类。代码比较简答,就不作过多的说明了。

运行结果

startA's static B's static C's staticC's ConstructorA's ConstructorD's staticD's ConstructorC's ConstructorB's Constructor
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

结果分析

所以可以得出结论:

开始父类静态代码块(只执行一次)子类静态代码块(只执行一次)父类的属性类的静态代码块(只执行一次)父类属性类的构造函数父类的构造函数子类属性的静态代码块(只执行一次)子类属性类的构造函数子类的构造函数结束
原创粉丝点击