1. 程式人生 > >03-類與對象--課後作業

03-類與對象--課後作業

自動 指定 實例成員 height 成員 方向 拆箱 nbsp stat

1.請總結一下,這個方法有哪些“與眾不同之處”,你能列出幾條?

(1).方法名字與類名相同

(2).該方法沒有返回值

2.以下代碼為何無法通過編譯?哪兒出錯了?

技術分享

該類自定義了一個有參數的構造方法,將不再自動調用系統默認構造方法,需要提供一個整型數據才能保證程序正常運行。

3.如果一個類中既有初始化塊,又有構造方法,同時還設定了字段的初始值,誰說了算?

執行類成員定義時指定的默認值或類的初始化塊,到底執行哪一個要看哪一個“排在前面”。

執行類的構造函數。

類的初始化塊不接收任何的參數,而且只要一創建類的對象,它們就會被執行。因此,適合於封裝那些“對象創建時必須執行的代碼”。

4.請依據代碼的輸出結果,自行總結Java字段初始化的規律。

技術分享

Java進行初始化的地方有兩個:初始化塊和構造函數。Java字段初始化規律系統會按順序對Java字段進行初始化,如果有好幾個方法都對同一個變量進行了初始化,Java會將最後一次的初始化結果賦給該變量。 如果在主函數中創建對象時沒有形參時,就會把初始化塊值賦給主函數中的變量,如果在主函數中創建對象時有形參,則調用類中對應的構造函數。

5.靜態方法中只允許訪問靜態數據,那麽,如何在靜態方法中訪問類的實例成員(即沒有附加static關鍵字的字段或方法)?

技術分享

技術分享

在靜態方法中訪問類的實例變量需首先進行類的實例化,然後用類名.變量名進行調用。

6.Integer類的裝箱和拆箱到底是怎樣實現的?

裝箱,就是把基本類型用他們相對應的引用類型包裝起來,使他們可以具有對象的特質,如可以把int型包裝成Integer類的對象,或者把double包裝成Double等等。

拆箱,就是跟裝箱的方向相反,將Integer及Double這樣的引用類型的對象重新簡化為值類型的數據。

在裝箱的時候自動調用的是Integer的valueOf(int)方法。而在拆箱的時候自動調用的是Integer的intValue方法。以這兩種方法實現拆箱裝箱。

7.兩對整數明明完全一樣,為何一個輸出true,一個輸出false?

技術分享

輸出結果表明i1和j1指向的是同一個對象,而i2和j2指向的是不同的對象。

在通過valueOf方法創建Integer對象的時候,如果數值在[-128,127]之間,便返回指向IntegerCache.cache中已經存在的對象的引用;否則創建一個新的Integer對象。上面的代碼中i1和ij1的數值為100,因此會直接從cache中取已經存在的對象,所以i1和j1指向的是同一個對象,而i2和j2則是分別指向不同的對象。

03-類與對象--課後作業