建構函式與變數載入順序引起的問題分析

2021-08-27 08:45:04 字數 561 閱讀 6565

在初始化類時,在父類方法中對子類變數賦值,之後走完父類構造方法後,在完成子類構造方法時,列印該變數仍為預設值。

由於初始化變數時,給了變數乙個預設值,載入順序為建構函式、變數,導致在建構函式中賦值後,載入變數時再次賦為預設值。

解決 方法:

1、不給變數預設值。

2、新增static關鍵子,讓變數優先與建構函式載入。

**:

public abstract class base

public abstract void setinfo(int x);

}

public abstract class secondinfo extends base

}

public class three extends secondinfo

@override

public void setinfo(int x)

}

呼叫: 

three a = new three();
列印:

this x setinfo : 5

this.x : 0

建構函式與static執行順序

2015年的第一篇,1 static靜態塊 jvm載入類時就會執行,而建構函式是你在例項化物件是才會執行。public class testutil public testutil public void ff public static void main string args 因此執行上面 的...

C 建構函式初始化變數的順序

在 c 中類的建構函式初始值列表 中提到,c 中類的建構函式初始值列表可以對類的成員進行初始化。但是需要注意的是,建構函式的初始化列表只是說明各變數的初始值,並沒有指定變數的初始化順序。其中,myclass類建構函式的初始化列表只是說明了變數i的初始值是1,變數j的初始值是i的值。但是並不一定是先初...

建構函式和變數初始化順序

class a 輸出 a 這一行和下一行是為了構造c類物件的基類b,而在構造基類b的時候需要先初始化b的成員變數a,因而呼叫了a的建構函式 b a 這一行和下一行是c類物件在初始化成員變數b時,需要構造b,因此需要先初始化b的成員變數a,因而再次呼叫了a的建構函式 b a 這一行是c類物件初始化成員...