Java深入講解instanceof關(guān)鍵字的使用
instanceof關(guān)鍵字的使用
1. 語法格式
x instanceof A:檢驗x是否為類A的對象,返回值為boolean類型,如果是,返回true;如果不是,返回false。
? 要求x所屬的類與類A必須是子類和父類的關(guān)系,否則編譯錯誤
? 如果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. 類型轉(zhuǎn)換 (Casting)
2.1 基本數(shù)據(jù)類型的Casting
? 自動類型轉(zhuǎn)換:小的數(shù)據(jù)類型可以自動轉(zhuǎn)換成大的數(shù)據(jù)類型。
如:long g=20; double d=12.0f;
? 強制類型轉(zhuǎn)換:可以把大的數(shù)據(jù)類型強制轉(zhuǎn)換(casting)成小的數(shù)據(jù)類型。
如:float f=(float)12.0; int a=(int)1200L;

2.2 對象類型轉(zhuǎn)換
? 為了避免在向下轉(zhuǎn)型時出現(xiàn)ClassCastException的異常,我們在向下轉(zhuǎn)型之前,先進行instanceof的判斷,一旦返回true,就進行向下轉(zhuǎn)型。如果返回false,不進行向下轉(zhuǎn)型。
? 從子類到父類的類型轉(zhuǎn)換可以自動進行 。
? 從父類到子類的類型轉(zhuǎn)換必須通過造型(強制類型轉(zhuǎn)換)實現(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);
// 所以下面代碼運行時引發(fā)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("男人負責掙錢養(yǎng)家");
}
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;
}
}
到此這篇關(guān)于Java深入講解instanceof關(guān)鍵字的使用的文章就介紹到這了,更多相關(guān)Java instanceof內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java中instanceOf關(guān)鍵字的用法及特性詳解
- Java中instanceof關(guān)鍵字實例講解
- Java關(guān)鍵字之instanceof詳解
- Java instanceof關(guān)鍵字用法詳解及注意事項
- java中instanceof 關(guān)鍵字作用和實際用途詳解
- Java關(guān)鍵字instanceof用法及實現(xiàn)策略
- Java關(guān)鍵字instanceof的兩種用法實例
- Java instanceof關(guān)鍵字的的進一步理解
- Java中instanceof關(guān)鍵字的用法總結(jié)
- Java中instanceof 關(guān)鍵字的使用
相關(guān)文章
源碼分析Spring?中?@Qualifier?注解基本用法
這篇文章主要介紹了源碼分析Spring?中?@Qualifier?注解基本用法,在源碼分析的過程中,也?GET?到?Spring?許多新的玩法,感興趣的小伙伴趕緊去試試吧2023-08-08
Netty客戶端接入流程NioSocketChannel創(chuàng)建解析
這篇文章主要為大家介紹了Netty客戶端接入流程NioSocketChannel創(chuàng)建源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-03-03
Spring?Data?JPA框架的Repository自定義實現(xiàn)詳解
Spring?Data?JPA是Spring基于JPA規(guī)范的基礎(chǔ)上封裝的?套?JPA?應(yīng)?框架,可使開發(fā)者?極簡的代碼即可實現(xiàn)對數(shù)據(jù)庫的訪問和操作,本篇我們來了解Spring?Data?JPA框架的Repository自定義實現(xiàn)2022-04-04
基于springboot+vue實現(xiàn)垃圾分類管理系統(tǒng)
這篇文章主要為大家詳細介紹了基于springboot+vue實現(xiàn)垃圾分類管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07
SpringBoot項目使用slf4j的MDC日志打點功能(最新推薦)
這篇文章主要介紹了SpringBoot項目使用slf4j的MDC日志打點功能,本文通過示例代碼給大家介紹非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06
Java獲取網(wǎng)頁數(shù)據(jù)步驟方法詳解
這篇文章主要介紹了Java獲取網(wǎng)頁數(shù)據(jù)步驟方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03

