1. 程式人生 > >流程控制—靜態程式碼塊、構造器、常量以及Spring的@AutoWired註釋

流程控制—靜態程式碼塊、構造器、常量以及Spring的@AutoWired註釋

  五種型別變數:靜態程式碼塊,父類構造器,普通變數/靜態變數,一般程式碼塊(放在{}中),構造器以及@Autowired的執行順序及注意細節是:
  

  1. 靜態程式碼塊—>父類構造器—>變數(包含靜態變數)—>一般程式碼塊—>子類構造器—>@Autowired;
  2. 每次新建物件都會呼叫靜態變數類構造器,同普通變數;靜態變數與靜態程式碼塊不同;
  3. 靜態程式碼塊只執行一次,普通程式碼每次初始化物件都執行;
  4. 構造器中如果使用@Autowired註釋的變數會報錯,因為構造器先於其執行;

示例程式碼(@AutoWired未生效):驅動程式和演示程式

//驅動程式
public
class TestVarAndAnno { public static void main(String[] args) { new VarAndAnno(); new VarAndAnno(); new VarAndAnno(); } }
//演示程式

/**
 * 測試變數、靜態程式碼塊、構造器、父類構造器以及@AutoWried註釋變數的初始化順序
 *
 * @author dugenkui
 *         on 2017/10/28.
 */


class ClassVarX{
    public ClassVarX
() { System.out.println("Var's Constructor"); } } class StaticVar{ public StaticVar() { System.out.println("StaticVar's Constructor"); } public void test(){ System.out.println("ClassVarY's method"); } } class Father{ public Father() { System.out.println("father's Constroctor"
); } } public class VarAndAnno extends Father{ //靜態程式碼塊 static{ System.out.println("static code"); } //父類構造器 //變數 ClassVarX classVarX=new ClassVarX(); StaticVar staticVar=new StaticVar(); //普通程式碼塊 { System.out.println("common code in {}"); } //構造器 public VarAndAnno() { System.out.println("son's Constroctor"); } }