撸代码第1天:类的初始化

类的初始化

类只有在第一次加载时才需要初始化,初始化类变量,类方法;

类的编译决定了类的初始化过程。

编译器生成的class文件主要对定义在源文件中的类进行了如下的更改:

1)       先按照静态成员变量的定义顺序在类内部声明成员变量。

2)       再按照原java类中对成员变量的初始化顺序进行初始化。

一个java类和编译后的class对应的转换如下:

public class a {
   public static String a = "a";
   public static int i ;
   static{
      i = 1;
      System.out.println("初始化   i  ");
   }
   public static boolean b ;
   static{
      a = "ab";
      b = true;
      i = 2;
   }
   public static void main(String[] args) {
      System.out.println(a);
      System.out.println(i);
      System.out.println(b);
   }
}

转成class后:

public class a {
   public static String a = "a";
   public static int i ;
   public static boolean b ;
   static{
      i = 1;
      System.out.println("初始化   i  ");
      a = "ab";
      b = true;
      i = 2;
   }
   public static void main(String[] args) {
      System.out.println(a);
      System.out.println(i);
      System.out.println(b);
   }
}

初始化顺序依据转换后对应的class类成员变量的初始化顺序依次执行,所以所有的静态成员变量都是先声明,后执行赋值的,而且赋值的顺序也是依照源代码对静态成员变量初始化的顺序进行的,注意:定义一个成员变量并直接初始化与在静态代码块中进行初始化是等价的,都是依据它们在源代码中定义的顺序进行的

你可能感兴趣的:(类初始化)