Java 代码的执行顺序
通过以下代码,更加快速地理解代码的执行顺序,以助于理解jvm的加载顺序,帮助我们在写代码时,写出更深刻的代码。
Sub 子类
public class Sub {          private static final String str1 = "00";          private final String str2 = "01";          private String str3 = "02";          private static String str4 = "03";
      {         System.out.println("Sub code block1 str1: " + str1);         System.out.println("Sub code block1 str2: " + str2);         System.out.println("Sub code block1 str3: " + str3);         System.out.println("Sub code block1 str4: " + str4);         System.out.println("Sub: " + "04");     }
      static {         System.out.println("Sub: " + "05");         System.out.println("Sub Static block1 str1: " + str1);         System.out.println("Sub Static block1 str4: " + str4);     }
      {         System.out.println("Sub: " + "06");         System.out.println("Sub code block2 str1: " + str1);         System.out.println("Sub code block2 str2: " + str2);         System.out.println("Sub code block2 str3: " + str3);         System.out.println("Sub code block2 str4: " + str4);     }
      public Sub() {         System.out.println("Sub: " + "07");         System.out.println("Sub: " + str1);         System.out.println("Sub: " + str2);         System.out.println("Sub: " + str3);         System.out.println("Sub: " + str4);                  str4 = str4 + "++Sub++";                  System.out.println("Sub: " + str4);                  str3 = str3 + "--Sub--";         System.out.println("Sub: " + str3);     }
      static {         System.out.println("Sub: " + "08");         System.out.println("Sub Static block2 str1: " + str1);         System.out.println("Sub Static block2 str4: " + str4);     } }
  | 
 
Father 父类
public class Father extends Sub {          private static final String str1 = "0";          private final String str2 = "1";          private String str3 = "2";          private static String str4 = "3";
      {         System.out.println("Father: " + 4);     }
      static {         System.out.println("Father: " + 5);     }
      {         System.out.println("Father: " + 6);     }
      public Father() {         System.out.println("Father: " + 7);         System.out.println("Father: " + str1);         System.out.println("Father: " + str2);         System.out.println("Father: " + str3);         System.out.println("Father: " + str4);                  str4 = str4 + "++Father++";                  System.out.println("Father: " + str4);                  str3 = str3 + "--Father--";         System.out.println("Father: " + str3);     }
      static {         System.out.println("Father: " + 8);     } }
  | 
 
Test 测试
public class Test {          private static final String str1 = "0000000";          private final String str2 = "0000001";          private String str3 = "0000002";          private static String str4 = "0000003";
      static {         System.out.println("Test: " + "0000004");         System.out.println("Test Static code1 str1: " + str1);         System.out.println("Test Static code2 str4: " + str4);     }
      public Test() {         System.out.println("Test: " + str1);         System.out.println("Test: " + str2);         System.out.println("Test: " + str3);         System.out.println("Test: " + str4);                  str4 = str4 + "++Test++";                  System.out.println("Test: " + str4);                  str3 = str3 + "--Test--";         System.out.println("Test: " + str3);     }
      {         System.out.println("Test: " + "0000005");         System.out.println("Test code block1 str1: " + str1);         System.out.println("Test code block1 str2: " + str2);         System.out.println("Test code block1 str3: " + str3);         System.out.println("Test code block1 str4: " + str4);     }
      public static void main(String[] args) {         System.out.println("Test: " + 4);         Father test = new Father();         System.out.println("\033[32;4m" + "==========================" + "\033[0m");         Father test2 = new Father();         System.out.println("Test: " + 5);     }
      static {         System.out.println("Test: " + "0000006");         System.out.println("Test Static code2 str1: " + str1);         System.out.println("Test Static code2 str4: " + str4);     }
      {         System.out.println("Test: " + "0000007");         System.out.println("Test code block2 str1: " + str1);         System.out.println("Test code block2 str2: " + str2);         System.out.println("Test code block2 str3: " + str3);         System.out.println("Test code block2 str4: " + str4);     } }
  | 
 
直接结果如下
 Test: 0000004 Test Static code1 str1: 0000000 Test Static code2 str4: 0000003 Test: 0000006 Test Static code2 str1: 0000000 Test Static code2 str4: 0000003 Test: 4 Sub: 05 Sub Static block1 str1: 00 Sub Static block1 str4: 03 Sub: 08 Sub Static block2 str1: 00 Sub Static block2 str4: 03 Father: 5 Father: 8 Sub code block1 str1: 00 Sub code block1 str2: 01 Sub code block1 str3: 02 Sub code block1 str4: 03 Sub: 04 Sub: 06 Sub code block2 str1: 00 Sub code block2 str2: 01 Sub code block2 str3: 02 Sub code block2 str4: 03 Sub: 07 Sub: 00 Sub: 01 Sub: 02 Sub: 03 Sub: 03++Sub++ Sub: 02--Sub-- Father: 4 Father: 6 Father: 7 Father: 0 Father: 1 Father: 2 Father: 3 Father: 3++Father++ Father: 2--Father-- ========================== Sub code block1 str1: 00 Sub code block1 str2: 01 Sub code block1 str3: 02 Sub code block1 str4: 03++Sub++ Sub: 04 Sub: 06 Sub code block2 str1: 00 Sub code block2 str2: 01 Sub code block2 str3: 02 Sub code block2 str4: 03++Sub++ Sub: 07 Sub: 00 Sub: 01 Sub: 02 Sub: 03++Sub++ Sub: 03++Sub++++Sub++ Sub: 02--Sub-- Father: 4 Father: 6 Father: 7 Father: 0 Father: 1 Father: 2 Father: 3++Father++ Father: 3++Father++++Father++ Father: 2--Father-- Test: 5
  Process finished with exit code 0
 
  | 
 
这个代码的结构理解是基本功,必须掌握精。