Java深入講解instanceof關鍵字的使用
instanceof關鍵字的使用
1. 語法格式
x instanceof A:檢驗x是否為類A的對象,返回值為boolean類型,如果是,返回true;如果不是,返回false。
⭕ 要求x所屬的類與類A必須是子類和父類的關系,否則編譯錯誤
⭕ 如果x屬於類A的子類B,x instanceof A值也為true
public class Person extends Object {…} public class Student extends Person {…} public class Graduate extends Person {…} ------------------------------------------------------------------- public void method1(Person e) { if (e instanceof Person) {// 處理Person類及其子類對象} if (e instanceof Student) {//處理Student類及其子類對象} if (e instanceof Graduate){//處理Graduate類及其子類對象} }
2. 類型轉換 (Casting)
2.1 基本數據類型的Casting
⭕ 自動類型轉換:小的數據類型可以自動轉換成大的數據類型。
如:long g=20; double d=12.0f;
⭕ 強制類型轉換:可以把大的數據類型強制轉換(casting)成小的數據類型。
如:float f=(float)12.0; int a=(int)1200L;
2.2 對象類型轉換
⭕ 為瞭避免在向下轉型時出現ClassCastException的異常,我們在向下轉型之前,先進行instanceof的判斷,一旦返回true,就進行向下轉型。如果返回false,不進行向下轉型。
⭕ 從子類到父類的類型轉換可以自動進行 。
⭕ 從父類到子類的類型轉換必須通過造型(強制類型轉換)實現 。
⭕ 無繼承關系的引用類型間的轉換是非法的。
⭕ 如果 a instanceof A返回true,則 a instanceof B也返回true, 其中,類B是類A的父類。
2.3 代碼演示
public class ConversionTest { public static void main(String[] args) { double d = 13.4; long l = (long) d; System.out.println(l);//13 int in = 5; // boolean b = (boolean)in; Object obj = "Hello"; String objStr = (String) obj; System.out.println(objStr);//Hello Object objPri = new Integer(5); // 所以下面代碼運行時引發ClassCastException異常 String str = (String) objPri; /* Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String */ } }
3. 錯誤舉例
class Person { String name; int age; int id = 1001; public void eat(){ System.out.println("人:吃飯"); } public void walk(){ System.out.println("人:走路"); } } class Man extends Person{ boolean isSmoking; int id = 1002; public void earnMoney(){ System.out.println("男人負責掙錢養傢"); } public void eat(){ System.out.println("男人多吃肉,長肌肉"); } public void walk(){ System.out.println("男人霸氣的走路"); } } class Woman extends Person{ boolean isBeauty; public void goShopping(){ System.out.println("女人喜歡購物"); } public void eat(){ System.out.println("女人少吃,為瞭減肥"); } public void walk(){ System.out.println("女人窈窕的走路"); } } public class PersonTest { public static void main(String[] args) { //問題一:編譯時通過,運行時不通過 //舉例一: // Person p3 = new Woman(); // Man m3 = (Man)p3; //舉例二: // Person p4 = new Person(); // Man m4 = (Man)p4; //問題二:編譯通過,運行時也通過 // Object obj = new Woman(); // Person p = (Person)obj; //問題三:編譯不通過 // Man m5 = new Woman(); // String str = new Date(); // Object o = new Date(); // String str1 = (String)o; } }
到此這篇關於Java深入講解instanceof關鍵字的使用的文章就介紹到這瞭,更多相關Java instanceof內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Java instanceof關鍵字用法詳解及註意事項
- 一篇文章帶你深入瞭解Java對象與Java類
- Java基礎之Object類詳解
- 一篇文章帶你瞭解Java基礎-多態
- Java如何重寫object類的equals方法詳解