java 静态代码块和构造方法执行优先顺序

时间:2022-05-15 19:37:06
  对静态代码块以及构造函数的执行先后顺序,一直很迷惑,现用下面的这段小程序来简明扼要的叙述一下,以加深理解,与君共勉....                              

                public class Fu {

                                      static {
                                            System.out.print(1);

                                                  }

                                      public Fu() {
                                             System.out.print(2);
                                                 }
                                          }

               public class Zi extends Fu {

                                       static {
                                            System.out.print("a");
                                                 }

                                       public Zi() {
                                            System.out.print("b");
                                                   }
                                           }

           public class demo {

                          public static void main(String[] args) {
                                         Fu fu = new Zi();
                                         fu = new Zi();
                                                      }
                                             }

1.
       当父类与子类都有静态代码块和构造函数的时候,执行顺序如下:

       父类静态代码块 > 子类静态代码块 java虚拟机加载类时,就会执行该块代码。

       父类构造函数 > 子类构造函数 (先有父亲,后有孩子)

       如果是多级继承关系的话,高层的父类首先执行,然后依次递减

    总结:静态优先执行,父类优先于子类执行
                静态代码块是在JVM加载类的时候执行的,而且静态代码块执行且仅执行一次


2.

       在调用类中的方法时,在方法体执行之前,首先要对类中的成员变量进行赋值,如果代码中没有赋具体的值,就会赋予变量默认值。成员变量的赋值顺序按照前后顺序进行。如果代码中既有直接赋值,也有构造方法赋值,那么根据先后顺序执行