Java深入講解instanceof關(guān)鍵字的使用
instanceof關(guān)鍵字的使用
1. 語法格式
x instanceof A:檢驗(yàn)x是否為類A的對(duì)象,返回值為boolean類型,如果是,返回true;如果不是,返回false。
? 要求x所屬的類與類A必須是子類和父類的關(guān)系,否則編譯錯(cuò)誤
? 如果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類及其子類對(duì)象} if (e instanceof Student) {//處理Student類及其子類對(duì)象} if (e instanceof Graduate){//處理Graduate類及其子類對(duì)象} }
2. 類型轉(zhuǎn)換 (Casting)
2.1 基本數(shù)據(jù)類型的Casting
? 自動(dòng)類型轉(zhuǎn)換:小的數(shù)據(jù)類型可以自動(dòng)轉(zhuǎn)換成大的數(shù)據(jù)類型。
如:long g=20; double d=12.0f;
? 強(qiáng)制類型轉(zhuǎn)換:可以把大的數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)換(casting)成小的數(shù)據(jù)類型。
如:float f=(float)12.0; int a=(int)1200L;
2.2 對(duì)象類型轉(zhuǎn)換
? 為了避免在向下轉(zhuǎn)型時(shí)出現(xiàn)ClassCastException的異常,我們?cè)谙蛳罗D(zhuǎn)型之前,先進(jìn)行instanceof的判斷,一旦返回true,就進(jìn)行向下轉(zhuǎn)型。如果返回false,不進(jìn)行向下轉(zhuǎn)型。
? 從子類到父類的類型轉(zhuǎn)換可以自動(dòng)進(jìn)行 。
? 從父類到子類的類型轉(zhuǎn)換必須通過造型(強(qiáng)制類型轉(zhuǎn)換)實(shí)現(xiàn) 。
? 無繼承關(guān)系的引用類型間的轉(zhuǎn)換是非法的。
? 如果 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); // 所以下面代碼運(yùn)行時(shí)引發(fā)ClassCastException異常 String str = (String) objPri; /* Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String */ } }
3. 錯(cuò)誤舉例
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("男人負(fù)責(zé)掙錢養(yǎng)家"); } public void eat(){ System.out.println("男人多吃肉,長(zhǎng)肌肉"); } 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) { //問題一:編譯時(shí)通過,運(yùn)行時(shí)不通過 //舉例一: // Person p3 = new Woman(); // Man m3 = (Man)p3; //舉例二: // Person p4 = new Person(); // Man m4 = (Man)p4; //問題二:編譯通過,運(yùn)行時(shí)也通過 // Object obj = new Woman(); // Person p = (Person)obj; //問題三:編譯不通過 // Man m5 = new Woman(); // String str = new Date(); // Object o = new Date(); // String str1 = (String)o; } }
到此這篇關(guān)于Java深入講解instanceof關(guān)鍵字的使用的文章就介紹到這了,更多相關(guān)Java instanceof內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java中instanceOf關(guān)鍵字的用法及特性詳解
- Java中instanceof關(guān)鍵字實(shí)例講解
- Java關(guān)鍵字之instanceof詳解
- Java instanceof關(guān)鍵字用法詳解及注意事項(xiàng)
- java中instanceof 關(guān)鍵字作用和實(shí)際用途詳解
- Java關(guān)鍵字instanceof用法及實(shí)現(xiàn)策略
- Java關(guān)鍵字instanceof的兩種用法實(shí)例
- Java instanceof關(guān)鍵字的的進(jìn)一步理解
- Java中instanceof關(guān)鍵字的用法總結(jié)
- Java中instanceof 關(guān)鍵字的使用
相關(guān)文章
IDEA 去除 mybatis.xml 文件黃色警告的圖文教程
這篇文章主要介紹了IDEA 去除 mybatis.xml 文件黃色警告的方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07Java簡(jiǎn)單使用redis-zset實(shí)現(xiàn)排行榜
這篇文章主要介紹了Java簡(jiǎn)單使用redis-zset實(shí)現(xiàn)排行榜,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Spring Boot + Vue 前后端分離項(xiàng)目如何踢掉已登錄用戶
這篇文章主要介紹了Spring Boot + Vue 前后端分離項(xiàng)目如何踢掉已登錄用戶,需要的朋友可以參考下2020-05-05在Idea2020.1中使用gitee2020.1.0創(chuàng)建第一個(gè)代碼庫的實(shí)現(xiàn)
這篇文章主要介紹了在Idea2020.1中使用gitee2020.1.0創(chuàng)建第一個(gè)代碼庫的實(shí)現(xiàn),文中通過圖文示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07通過weblogic API解析如何獲取weblogic中服務(wù)的IP和端口操作
這篇文章主要介紹了通過weblogic API解析如何獲取weblogic中服務(wù)的IP和端口操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Java import static及import原理區(qū)別解析
這篇文章主要介紹了Java import static及import原理區(qū)別解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10