Java程式碼執行順序
阿新 • • 發佈:2020-12-02
1 package com.cn.donleo.test; 2 3 /** 4 * @author liangd 5 * date 2020-10-20 15:23 6 * code 程式碼執行順序測試 7 */ 8 public class TestCodeSequence { 9 /* 10 * 靜態程式碼塊,類變數(靜態變數),可以向前引用(即引用,再定義) 11 */ 12 static { 13 username = "liangd1234"; 14 System.out.println("執行靜態程式碼塊");15 } 16 17 /* 18 * 類變數(靜態變數),再類初始化之前初始化,無論類的例項被建立多少個,凡是被static修飾符修飾的, 19 * 都將按照順序執行,所以輸出的是liangd,而不是liangd1234 20 */ 21 22 /** 23 * 類變數(靜態變數) 24 */ 25 public static String username = "liangd"; 26 27 /** 28 * 例項變數(非靜態變數),定義時被賦予初始值,會比在構造器賦予值更早執行 29 */30 private String phone = "18090287931"; 31 32 /* 33 非靜態程式碼塊 實際上,非靜態程式碼塊在類初始化建立例項時,將會被提取到類的構造器中, 34 但是,非靜態程式碼塊會比構造器中的程式碼塊優先被執行, 35 所以phone輸出的值是構造器中定義的值,不是非靜態程式碼塊的值,更不是初始值。 36 */ 37 { 38 phone = "liangd18090287931"; 39 System.out.println("執行程式碼塊");40 } 41 42 /** 43 * 構造方法 44 */ 45 private TestCodeSequence() { 46 phone = "15982600186"; 47 System.out.println("執行構造方法"); 48 } 49 50 public static void main(String[] args) { 51 TestCodeSequence testCodeSequence = new TestCodeSequence(); 52 System.out.println(username); 53 System.out.println(testCodeSequence.phone); 54 } 55 56 }