從乙個小程式看Java的物件構造過程

2021-04-14 02:46:22 字數 822 閱讀 9665

class

testa 

public

void

a1() 

}public

class

testb 

extends

testa 

public

void

a1() 

public

static

void

main(string args) }

現在來猜猜執行結果會是什麼?testa還是testb?x是1,10還是100?

如果你對上面幾個數字念念不忘,那麼恭喜你,你提前知道了自己錯了。正確的答案是:

x in testb is 0

下面來說說原因:

類初始化時構造函式呼叫順序:

(1)初始化物件的儲存空間為零或null值;

(2)呼叫父類建構函式;

(3)按順序分別呼叫類成員變數和例項成員變數的初始化表示式;

(4)呼叫本身建構函式。

首先new testb()例項化乙個testb的物件

(1)先給自己分配了空間,並賦初始值;

(2)由於testb繼承至testa,這裡使用的是預設的沒有引數的建構函式,它會先呼叫父類的建構函式,父類的建構函式中呼叫了a1()方法,但我們例項化的是乙個子類testb的物件,在子類中已經覆蓋了a1()方法,因此呼叫的是子類的a1()方法,這時候步驟(3)還並沒有被執行,因此x還是初始值,int的預設初始值是0;

(3)執行x=10;

(4)執行testb中的建構函式中的x=100;

我們的程式是在第(2)步中列印結果的,所以結果會是上面那樣。

乙個java小程式

能讓阿拉伯數字讀成符合漢語語法和漢語習慣的中文.就這我 還做了一天呢 鬱悶.public class itcs string unit1 new string string unit2 new string string str args 0 string str 2 null system.out...

從乙個物件例項看資料抽象與封裝

本章目標 1 用c的方式實現棧2 用c 資料抽象的方式實現棧 3 比較兩者的差異性 棧的插入用頭插法,這樣子訪問最快 不採用頭節點。c include include include 定義棧中的元素 struct link 定義乙個棧結構體 只需要頭指標 沒有頭結點 還有結構體的大小維護 struc...

有乙個Java小程式

class trangle else double getlength public double getarea else public void setabc double a,double b,double c else class lader double getarea class cir...