statis代码块以及非static代码块之执行

 1 package com.hangao.teststatic;
 2 
 3 /**
 4  * @author hangao hangao1204@hotmail.com
 5  * 
 6  * 1.声明父类引用,指向父类对象,代码执行顺序是
 7  *        依次执行父类的静态代码块,再依次执行父类非静态代码块,最后执行父类构造方法
 8  *
 9  * 2.声明父类引用,指向子类对象,代码执行顺序是
10  *        依次执行父类的静态代码块,依次执行子类的静态代码块
11  *        再依次执行父类非静态代码块,执行父类构造方法
12  *        再依次执行子类非静态代码块,最后执行子类构造方法
13  * 
14  * 3.声明子类引用,指向子类对象,代码执行顺序是<!-- 同上 -->
15  *        依次执行父类的静态代码块,依次执行子类的静态代码块
16  *        再依次执行父类非静态代码块,执行父类构造方法
17  *        再依次执行子类非静态代码块,最后执行子类构造方法
18  *
19  * 4.总结:静态代码块在类被jvm加载的时候执行,且只执行一次
20  *         非静态代码块在类构造方法被调用的时候执行,可能会执行多次
21  */
22 public class TestStatic {
23     public static void main(String[] args) {
24         testStatic1();
25         testStatic2();
26         testStatic3();
27         testStatic4();
28     }
29 
30     /**
31      * 运行结果:
32      * Animal-static1
33      * Animal-static2
34      * Animal-no-static1
35      * Animal-no-static2
36      * Animal.Animal()
37      * Animal.eat()
38      */
39     private static void testStatic1() {
40         Animal animal = new Animal();
41         animal.eat();
42     }
43     
44     /**
45      * 运行结果:
46      * Animal-static1
47      * Animal-static2
48      * Dog-static1
49      * Dog-static2
50      * Animal-no-static1
51      * Animal-no-static2
52      * Animal.Animal()
53      * Dog-no-static1
54      * Dog-no-static2
55      * Dog.Animal()
56      * Dog.eat()
57      */
58     private static void testStatic2() {
59         Animal animalDog = new Dog();
60         animalDog.eat();
61     }
62     
63     /**
64      * 运行结果:
65      * Animal-static1
66      * Animal-static2
67      * Dog-static1
68      * Dog-static2
69      * Animal-no-static1
70      * Animal-no-static2
71      * Animal.Animal()
72      * Dog-no-static1
73      * Dog-no-static2
74      * Dog.Animal()
75      * Dog.eat()
76      */
77     private static void testStatic3() {
78         Dog dog = new Dog();
79         dog.eat();
80     }
81     
82     /**
83      * 运行结果:
84      * Animal-static1
85      * Animal-static2
86      * Animal-no-static1
87      * Animal-no-static2
88      * Animal.Animal()
89      * Animal-no-static1
90      * Animal-no-static2
91      * Animal.Animal()
92      * Animal.eat()
93      */
94     private static void testStatic4() {
95         Animal animal = new Animal();
96         animal = new Animal();
97         animal.eat();
98     }
99 }
 1 package com.hangao.teststatic;
 2 
 3 public class Animal {
 4     static{
 5         System.out.println("Animal-static1");
 6     }
 7     {
 8         System.out.println("Animal-no-static1");
 9     }
10     public Animal() {
11         System.out.println("Animal.Animal()");
12     }
13     {
14         System.out.println("Animal-no-static2");
15     }
16     static{
17         System.out.println("Animal-static2");
18     }
19     public void eat(){
20         System.out.println("Animal.eat()");
21     }
22 }
Animal
 1 package com.hangao.teststatic;
 2 
 3 public class Dog extends Animal {
 4     static{
 5         System.out.println("Dog-static1");
 6     }
 7     {
 8         System.out.println("Dog-no-static1");
 9     }
10     public Dog() {
11         System.out.println("Dog.Animal()");
12     }
13     {
14         System.out.println("Dog-no-static2");
15     }
16     static{
17         System.out.println("Dog-static2");
18     }
19     @Override
20     public void eat() {
21         System.out.println("Dog.eat()");
22     }
23 }
Dog

 

posted @ 2016-11-08 15:02  jackkke  阅读(268)  评论(0编辑  收藏  举报