關於類中靜態,非靜態,構造方法的執行順序

2021-07-27 12:57:02 字數 2695 閱讀 5654

題目要求:輸出執行結果:

public class text   

static

public text(string str)

public static int print(string str)

public static void main (string args)

}

執行結果如下:

1:j   i=0    n=0

2:構造塊   i=1    n=1

3:t1   i=2    n=2

4:j   i=3    n=3

5:構造塊   i=4    n=4

6:t2   i=5    n=5

7:i   i=6    n=6

8:靜態塊   i=7    n=99

9:j   i=8    n=100

10:構造塊   i=9    n=101

11:init   i=10    n=102

首先看到static

關鍵字,腦子裡面第一反應有幾點,

1、公有屬性,可以有類名稱直接訪問。

2、靜態方法,可以有類名稱直接方法。

3、靜態方法或者屬性,可以再物件例項化之前就呼叫

至於該題中,順序執行,先執行publicstaticintk=0 ;

因為沒有輸出不用考慮這個,接著publicstatictext t1= newtext("t1") ;

在t1物件初始化時先執行非靜態方法或者非靜態常量,順序執行,接著執行構造引數,

根據程式來看應該列印三條記錄,分別是

1:j   i=0    n=0

2:構造塊   i=1    n=1

3:t1   i=2    n=2

接下來publicstatictext t2= newtext("t2") ;

同理,執行完之後繼續執行

static**塊或者賦值靜態變數,在main()方法中new了乙個新的例項,靜態變數只執行一次,接下來就是順序執行非靜態方法---->構造方法。應該是這樣的順序,面試的時候我寫的不完成,哎。

接著想到繼承關係(extends

)子類繼承乙個父類之後,物件初始化的順序又是怎樣?

我寫了乙個

demo,

class a  

public a()

} class b extends a

public b()

} public class demo

}

輸入結果如下:

父類靜態方法

子類靜態方法

父類非靜態方法

父類構造

子類非靜態方法

子類構造

最後總結了幾點:

1 /*   

2 * 幾大原則

3 * 一、靜態成員變數(static)

4 * 1、靜態成員變數為類變數,所有物件共享同一記憶體空間

5 * 2、靜態成員變數的宣告和定義僅在首次載入類時執行一次

6 * 3、首次載入類時首先對所有靜態成員變數根據型別預設賦初值,然後再對有右值的附右值

7 * 二、靜態初始塊

8 * 1、靜態初始化塊僅在首次載入類時執行一次

9 * ······多個靜態成員變數與靜態始化快參照出現順序先後執行······

10 * 三、動態成員變數

11 * 1、動態成員變數定義在每次例項化物件時在建構函式之前執行

12 * 四、動態初始化塊

13 * 1、動態初始化塊在每次例項化物件時在建構函式之前執行

14 * ······多個動態成員變數與動態初始化塊參照出現順序先後執行······

15 * 總結:總的來說,在不涉及繼承的前提下,當首次載入類時,按照如下順序執行

16 * 1、按照出現順序先後執行靜態成員變數定義與靜態初始化塊

17 * 2、按照出現順序先後執行動態成員變數定義與動態初始化塊

18 * 3、執行建構函式

19 * 再次例項化物件時只執行第2、3步即可

20 *

21 * ············成員變數與定義與初始化塊先於建構函式執行·········

22 * 五、當涉及到繼承時,按照如下順序執行

23 * 1、執行父類的靜態成員變數定義與靜態初始化塊,執行子類的靜態成員變數定義與靜態初始化塊

24 * 2、執行父類的非靜態成員變數定義與動態初始化塊,執行父類構造方法

25 * 3、執行子類的非靜態成員變數定義與動態初始化塊,執行子類構造方法

26 * 另:父類構造方法中用到的方法如果已被子類重寫,那麼在構造子類物件時在呼叫父類建構函式中使用子類重寫的方法

類中的靜態 非靜態方法

c 的類中可以包含兩種方法 靜態方法和非靜態方法。使用了static 修飾符的方法為靜態方法,反之萴是非靜態方法。靜態方琺是 種 特殊的成園方琺,它不屬紆類的某乙個具體的實唎,而是屬於類本裑。葰以對靜態方法不需要首先建立乙個類哋例項,而是採用類名.靜態方法的格式 1.static方法是類中的乙個成園...

類中的靜態 非靜態方法

c 的類中可以包含兩種方法 靜態方法和非靜態方法。使用了static 修飾符的方法為靜態方法,反之萴是非靜態方法。靜態方琺是 種 特殊的成園方琺,它不屬紆類的某乙個具體的實唎,而是屬於類本裑。葰以對靜態方法不需要首先建立乙個類哋例項,而是採用類名.靜態方法的格式 1.static方法是類中的乙個成園...

C 靜態類 靜態方法與非靜態方法比較

在類 class 上加入static修飾,表示該類無法被例項化,並將該類中,無法例項化變數或函式 靜態類的主要特性 所以,可以在普通類中新增靜態方法,但是靜態類中的方法 變數都必須是靜態的。一 靜態方法 使用static修改的方法就是靜態方法,否則就是非靜態方法。二 1 靜態成員屬於類的所以,非靜態...