Java中instanceof 關(guān)鍵字的使用
instanceof 通過返回一個(gè)布爾值來指出,某個(gè)對(duì)象是否是某個(gè)特定類或者是該特定類的子類的一個(gè)實(shí)例。
如果 object 是class 的一個(gè)實(shí)例,則 instanceof 運(yùn)算符返回 true,如果 object 不是指定類的一個(gè)實(shí)例,或者object 是null, 則返回false。class 可以是類,可以是接口。
instanceof 在Java 的編譯狀態(tài) 和 運(yùn)行狀態(tài)是有區(qū)別的:
- 在編譯狀態(tài)中,class(指的是對(duì)象的引用)可以是object對(duì)象、父類,自身類,子類。在這三種情況下Java編譯時(shí)不會(huì)報(bào)錯(cuò)。
- 在運(yùn)行狀態(tài)中,class 可以是 object 對(duì)象,父類,自身類,不能其他是子類。在前面三種情況下 result 的結(jié)果為 true,最后一種為false。但是class為子類時(shí)編譯不會(huì)報(bào)錯(cuò)。運(yùn)行結(jié)果為false.(大致就是判斷表達(dá)式:class 變量=(class)object的引用 是否立)。
示例代碼:
AnimalParent.java
package com.api.Demo06; public class AnimalParent { //public interface AnimalParent { //也可以時(shí)接口 }
Cat.java
package com.api.Demo06; public class Cat extends AnimalParent{ //public class Cat implements AnimalParent{ }
Dog.java
package com.api.Demo06; public class Dog extends AnimalParent{ //public class Dog implements AnimalParent{ }
Test.java
package com.api.Demo06; public class Test01 { public static void main(String[] args) { //多態(tài)技術(shù) AnimalParent cat = new Cat(); // 類型轉(zhuǎn)換異常 // Dog dog = (Dog) cat; //com.api.Demo06.Cat cannot be cast to com.api.Demo06.Dog // if(對(duì)象的引用 instanceof 具體的類型(類或接口)) if (cat instanceof Dog) { //返回 布爾類型 是該類型 返回true,不是則返回false System.out.println("cat 是 Dog 類型"); } else { System.out.println("cat 不是 Dog 類型"); } /** * cat instanceof Dog 不是 * cat instanceof Cat||AnimalParent||Object 是 * 在編譯狀態(tài)中,class(對(duì)象的引用)可以是object對(duì)象的父類(AnimalParent),自身類(Cat),子類。 * 在這三種情況下Java編譯時(shí)不會(huì)報(bào)錯(cuò)。 */ // 強(qiáng)轉(zhuǎn)時(shí) 程序可能會(huì)直接 拋出異常,所以可以使用 instanceof 判斷一下 if (cat instanceof Dog) { Dog dog = (Dog) cat; System.out.println("類型符合,可以強(qiáng)轉(zhuǎn)"); } else { System.out.println("類型不符,不能強(qiáng)轉(zhuǎn)"); } } /** * 在運(yùn)行狀態(tài)中,class 可以是 object 對(duì)象的父類(AnimalParent),自身類(Cat),不能是其他的子類(Dog、)。 * 在前面兩種情況下 result 的結(jié)果為 true,最后一種為false。 */ }
到此這篇關(guān)于Java中instanceof 關(guān)鍵字的使用的文章就介紹到這了,更多相關(guān)Java instanceof 關(guān)鍵字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java中instanceOf關(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é)
相關(guān)文章
Java使用Lettuce客戶端在Redis在主從復(fù)制模式下命令執(zhí)行的操作
這篇文章主要介紹了Java使用Lettuce客戶端在Redis在主從復(fù)制模式下命令執(zhí)行的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04Java實(shí)現(xiàn)按權(quán)重隨機(jī)數(shù)
這篇文章主要介紹了Java實(shí)現(xiàn)按權(quán)重隨機(jī)數(shù),本文給出了提出問題、分析問題、解決問題三個(gè)步驟,需要的朋友可以參考下2015-04-04SpringBoot集成DJL實(shí)現(xiàn)圖片分類功能
DJL是一個(gè)使用Java?API簡化模型訓(xùn)練、測試、部署和使用深度學(xué)習(xí)模型進(jìn)行推理的開源庫深度學(xué)習(xí)工具包,開源的許可協(xié)議是Apache-2.0,本文給大家介紹了SpringBoot集成DJL實(shí)現(xiàn)圖片分類功能,需要的朋友可以參考下2024-10-10解決springboot configuration processor對(duì)maven子模塊不起作用的問題
這篇文章主要介紹了解決springboot configuration processor對(duì)maven子模塊不起作用的問題,本文通過圖文實(shí)例代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09Intellij?IDEA?中調(diào)試?maven?插件的步驟
這篇文章主要介紹了Intellij?IDEA?中調(diào)試?maven?插件,本文分步驟給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03基于<aop:aspect>與<aop:advisor>的區(qū)別
這篇文章主要介紹了<aop:aspect>與<aop:advisor>的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11