在Java中,對象往往包含屬性、方法及一個存儲空間,若一個對象的屬性和方法是空的則可認為這是一個空對象。
一個空對象也是對象,同樣通過對象名引用方法或屬性,但和一般對象有點不同。
1.空對象調用非靜態方法會出現空指針異常,如下圖:
這是因為一個null對象自身的存儲空間內是沒有任何方法和屬性的,所以任何空對象.xxx調用非靜態方法或屬性都會出現空指針異常;
但空對象可以調用靜態方法或屬性,如下所示:
這是因為Static 方法是存儲在靜態池當中的,一個類的所有對象共享靜態池的方法;
另外,我們可以理解null為空類型的對象,當必要的時候,他除了沒有屬性和方法之外,可以強制轉換為任意類型的對象。
以下為null調用靜態屬性及方法的例子:
以上去掉屬性和方法前面的關鍵字Static后,程序不會報錯(說明實例化null為空指針對象沒有問題),但運行時會報出空指針異常(說明實例化后的空間里面沒有方法和屬性),如下圖:
上面的過程大致可以用下圖來描述,每個類的靜態方法:
下面是一些非空對象的引用方法過程,結構類似於上面,但是.....
1.非空對象強制轉換成非父類對象,程序報錯,如下圖:
2.非空對象可以轉換為父類對象,但是沒有多大意義,感覺像在挖坑,因為它們轉換前后的運行結果並無區別,如下圖:
運行結果是一樣的:
轉載自csdn原創文章