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
|
这个代码的结构理解是基本功,必须掌握精。