java 繼承與初始化

2021-08-18 08:27:11 字數 973 閱讀 4998

class b

public static int x_b = printint("b static init");

public int y_b = printint("b no static init");

public static int printint(string s)

}class c extends b

public static int x_c = printint("c static init");

public int y_c = printint("c no static init");

}class d extends c

public static int x_d = printint("d static init");

public int y_d = printint("d no static init");

}public class main

}

執行結果:

在main中,列印d中的靜態變數x_d,會初始化d中的所有靜態變數。根據結果輸出,靜態變數的初始化順序是先初始化基類中的靜態變數。當new乙個新的d物件(子類)時,會先初始化基類中的變數,然後是基類中的構造方法,接著才會初始換子類中的變數,然後構造方法。因為在這裡,列印語句已經觸發靜態變數的唯一一次初始換,所以new物件的時候就不會再初始化static變數了。

總結:

當new乙個子類的物件,順序如下:

基類static變數》子類static變數》基類非static變數》基類構造方法》子類非static變數》子類構造方法

具體可以參考jvm中的類載入機制,在載入子類的時候,要先保證基類已經載入進來了

繼承與初始化

當存在繼承的情況時,各變數的初始化情況變得更為複雜了 不關區域性變數的事 我們有必要梳理一下。class insect private static int x1 printinit static insect.x1 initialized public int x2 printinit shape...

Java繼承 初始化順序(四)

在new建立物件時,首先對物件屬性和初始化塊分配記憶體,並執行預設初始化。如果存在父類,則先為父類物件屬性和初始化塊先分配記憶體並執行初始化。然後執行父類構造器中的初始化程式,接著才開始對子類的物件屬性和初始化塊執行初始化。我們修改一下 看一下繼承的初始化順序 package com.ws.basi...

java 初始化與方法

初始化與方法 方法 函式 可以稱之為是乙個類中的最小單位。下面以乙個例子說明怎樣定義方法 下面是乙個特殊的函式 建構函式 constructor 建構函式是沒有返回型別的。publicclassmethodtest 帶引數的建構函式 publicmethodtest inta,intb public...