寫在前言 : 學習資源B站是最好的也是很全面。
1 、現在出去面試,面試官老是會問你一句話Java 怎麼樣?
不管是大數據崗位還是數據庫都會問一句。 回來痛下決心,決定探索下這門語言的精髓,大數據很多框架也都是Java 寫的,的確懂一門語言,比較穩妥。路也寬敞!!!不然就和喫飯沒筷子,那麼尷尬。把每天學習到的 Java知識分享到這裏會。直到能自己寫個複雜一點Dome得出來。
2、爲了監督自己探索這門語言的動力與決心。特此這段話放到前面!!!
3、挑戰下自己 到底是笨 還是學不會,還是不想學。 好運
文章目錄:
- 寫在前言 : 學習資源B站是最好的也是很全面。
- 1 、現在出去面試,面試官老是會問你一句話Java 怎麼樣?
- 不管是大數據崗位還是數據庫都會問一句。 回來痛下決心,決定探索下這門語言的精髓,大數據很多框架也都是Java 寫的,的確懂一門語言,比較穩妥。路也寬敞!!!不然就和喫飯沒筷子,那麼尷尬。把每天學習到的 Java知識分享到這裏會。直到能自己寫個複雜一點Dome得出來。
- 2、爲了監督自己探索這門語言的動力與決心。特此這段話放到前面!!!
- 3、挑戰下自己 到底是笨 還是學不會,還是不想學。 好運
- 1、概述:
- 2、
- 3、栗子:
- 強制對象類型轉換
- 4、instanceof 關鍵字的使用
- 【轉載註明出處,還望尊重原創 】
- 【作者水平有限,如有錯誤歡迎指正 .】
1、概述:
將一個類型強制轉換成另一個類型的過程被稱爲類型轉換。本節所說的對象類型轉換,是指存在繼承關係的對象,不是任意類型的對象。當對不存在繼承關係的對象進行強制類型轉換時,會拋出 Java 強制類型轉換(java.lang.ClassCastException)異常。
2、
Java 語言允許某個類型的引用變量引用子類的實例,而且可以對這個引用變量進行類型轉換。Java 中引用類型之間的類型轉換(前提是兩個類是父子關係)主要有兩種,分別是向上轉型(upcasting)和向下轉型(downcasting)。
1)向上轉型
父類引用指向子類對象爲向上轉型,語法格式如下:
fatherClass obj = new sonClass();
其中,fatherClass 是父類名稱或接口名稱,obj 是創建的對象,sonClass 是子類名稱。
向上轉型就是把子類對象直接賦給父類引用,不用強制轉換。使用向上轉型可以調用父類類型中的所有成員,不能調用子類類型中特有成員,最終運行效果看子類的具體實現。
2)向下轉型
與向上轉型相反,子類對象指向父類引用爲向下轉型,語法格式如下:
sonClass obj = (sonClass) fatherClass;
其中,fatherClass 是父類名稱,obj 是創建的對象,sonClass 是子類名稱。
向下轉型可以調用子類類型中所有的成員,不過需要注意的是如果父類引用對象指向的是子類對象,那麼在向下轉型的過程中是安全的,也就是編譯是不會出錯誤。但是如果父類引用對象是父類本身,那麼在向下轉型的過程中是不安全的,編譯不會出錯,但是運行時會出現我們開始提到的 Java 強制類型轉換異常,一般使用 instanceof 運算符來避免出此類錯誤。
Dog dog = (Dog) animal; // 向下轉型,把Animal類型轉換爲Dog類型
3、栗子:
註解:
通過引用類型變量來訪問所引用對象的屬性和方法時,Java 虛擬機將採用以下綁定規則:
實例方法與引用變量實際引用的對象的方法進行綁定,這種綁定屬於動態綁定,因爲是在運行時由 Java 虛擬機動態決定的。例如,animal.eat() 是將 eat() 方法與 Cat 類綁定。
靜態方法與引用變量所聲明的類型的方法綁定,這種綁定屬於靜態綁定,因爲是在編譯階段已經做了綁定。例如,animal.staticEat() 是將 staticEat() 方法與 Animal 類進行綁定。
成員變量(包括靜態變量和實例變量)與引用變量所聲明的類型的成員變量綁定,這種綁定屬於靜態綁定,因爲在編譯階段已經做了綁定。例如,animal.name 和 animal.staticName 都是與 Animal 類進行綁定。
強制對象類型轉換
Java 編譯器允許在具有直接或間接繼承關係的類之間進行類型轉換。對於向下轉型,必須進行強制類型轉換;對於向上轉型,不必使用強制類型轉換。
如果要訪問 Cat 類的成員,必須通過強制類型轉換,如下:
((Cat)animal).str = “”; // 編譯成功
((Cat)animal).eatMethod(); // 編譯成功
子類的對象可以轉換成父類類型,而父類的對象實際上無法轉換爲子類類型。因爲通俗地講,父類擁有的成員子類肯定也有,而子類擁有的成員,父類不一定有。因此,對於向上轉型,不必使用強制類型轉換。例如:
Cat cat = new Cat();
Animal animal = cat; // 向上轉型,不必使用強制類型轉換
4、instanceof 關鍵字的使用
- A :判斷對象a 是否是類A的實例。如果是返回true,如果不是返回false。
- 使用場景:爲了避免在向下轉型時出現類異常,我們在向下轉型之前,先進行instanceof 的判斷,一旦返回true,就進行向下轉型,返回false 不進行向下轉型。
【轉載註明出處,還望尊重原創 】