Java中instanceof 關(guān)鍵字的使用
instanceof 通過(guò)返回一個(gè)布爾值來(lái)指出,某個(gè)對(duì)象是否是某個(gè)特定類(lèi)或者是該特定類(lèi)的子類(lèi)的一個(gè)實(shí)例。
如果 object 是class 的一個(gè)實(shí)例,則 instanceof 運(yùn)算符返回 true,如果 object 不是指定類(lèi)的一個(gè)實(shí)例,或者object 是null, 則返回false。class 可以是類(lèi),可以是接口。
instanceof 在Java 的編譯狀態(tài) 和 運(yùn)行狀態(tài)是有區(qū)別的:
- 在編譯狀態(tài)中,class(指的是對(duì)象的引用)可以是object對(duì)象、父類(lèi),自身類(lèi),子類(lèi)。在這三種情況下Java編譯時(shí)不會(huì)報(bào)錯(cuò)。
- 在運(yùn)行狀態(tài)中,class 可以是 object 對(duì)象,父類(lèi),自身類(lèi),不能其他是子類(lèi)。在前面三種情況下 result 的結(jié)果為 true,最后一種為false。但是class為子類(lèi)時(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();
// 類(lèi)型轉(zhuǎn)換異常
// Dog dog = (Dog) cat; //com.api.Demo06.Cat cannot be cast to com.api.Demo06.Dog
// if(對(duì)象的引用 instanceof 具體的類(lèi)型(類(lèi)或接口))
if (cat instanceof Dog) { //返回 布爾類(lèi)型 是該類(lèi)型 返回true,不是則返回false
System.out.println("cat 是 Dog 類(lèi)型");
} else {
System.out.println("cat 不是 Dog 類(lèi)型");
}
/**
* cat instanceof Dog 不是
* cat instanceof Cat||AnimalParent||Object 是
* 在編譯狀態(tài)中,class(對(duì)象的引用)可以是object對(duì)象的父類(lèi)(AnimalParent),自身類(lèi)(Cat),子類(lèi)。
* 在這三種情況下Java編譯時(shí)不會(huì)報(bào)錯(cuò)。
*/
// 強(qiáng)轉(zhuǎn)時(shí) 程序可能會(huì)直接 拋出異常,所以可以使用 instanceof 判斷一下
if (cat instanceof Dog) {
Dog dog = (Dog) cat;
System.out.println("類(lèi)型符合,可以強(qiáng)轉(zhuǎn)");
} else {
System.out.println("類(lèi)型不符,不能強(qiáng)轉(zhuǎn)");
}
}
/**
* 在運(yùn)行狀態(tài)中,class 可以是 object 對(duì)象的父類(lèi)(AnimalParent),自身類(lèi)(Cat),不能是其他的子類(lèi)(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客戶(hù)端在Redis在主從復(fù)制模式下命令執(zhí)行的操作
這篇文章主要介紹了Java使用Lettuce客戶(hù)端在Redis在主從復(fù)制模式下命令執(zhí)行的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04
Java實(shí)現(xiàn)按權(quán)重隨機(jī)數(shù)
這篇文章主要介紹了Java實(shí)現(xiàn)按權(quán)重隨機(jī)數(shù),本文給出了提出問(wèn)題、分析問(wèn)題、解決問(wèn)題三個(gè)步驟,需要的朋友可以參考下2015-04-04
SpringBoot集成DJL實(shí)現(xiàn)圖片分類(lèi)功能
DJL是一個(gè)使用Java?API簡(jiǎn)化模型訓(xùn)練、測(cè)試、部署和使用深度學(xué)習(xí)模型進(jìn)行推理的開(kāi)源庫(kù)深度學(xué)習(xí)工具包,開(kāi)源的許可協(xié)議是Apache-2.0,本文給大家介紹了SpringBoot集成DJL實(shí)現(xiàn)圖片分類(lèi)功能,需要的朋友可以參考下2024-10-10
SpringBoot過(guò)濾器與攔截器使用方法深入分析
大家應(yīng)該都曉得實(shí)現(xiàn)過(guò)濾器需要實(shí)現(xiàn) javax.servlet.Filter 接口,而攔截器會(huì)在處理指定請(qǐng)求之前和之后進(jìn)行相關(guān)操作,配置攔截器需要兩步,本文通過(guò)實(shí)例代碼給大家介紹SpringBoot 過(guò)濾器和攔截器的相關(guān)知識(shí),感興趣的朋友一起看看吧2022-12-12
解決springboot configuration processor對(duì)maven子模塊不起作用的問(wèn)題
這篇文章主要介紹了解決springboot configuration processor對(duì)maven子模塊不起作用的問(wèn)題,本文通過(guò)圖文實(shí)例代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09
Intellij?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
Java實(shí)現(xiàn)表達(dá)式二叉樹(shù)
這篇文章主要為大家詳細(xì)介紹了如何利用Java實(shí)現(xiàn)表達(dá)式二叉樹(shù),感興趣的小伙伴們可以參考一下2016-08-08

