流程控制—靜態程式碼塊、構造器、常量以及Spring的@AutoWired註釋
阿新 • • 發佈:2019-02-20
五種型別變數:靜態程式碼塊,父類構造器,普通變數/靜態變數類,一般程式碼塊(放在{}中),構造器以及@Autowired的執行順序及注意細節是:
- 靜態程式碼塊—>父類構造器—>變數(包含靜態變數類)—>一般程式碼塊—>子類構造器—>@Autowired;
- 每次新建物件都會呼叫靜態變數類構造器,同普通變數;靜態變數與靜態程式碼塊不同;
- 靜態程式碼塊只執行一次,普通程式碼每次初始化物件都執行;
- 構造器中如果使用@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");
}
}