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!

推薦閱讀: