Java中的运算符“instanceof“详解
在Java中,instanceof运算符用于检查一个对象是否是某个特定类的实例,或者是否实现了某个特定接口。它返回一个布尔值(true或false),用于在运行时进行类型检查。这在处理多态性时尤其有用,可以帮助我们确定对象的具体类型,以便进行相应的操作。
instanceof运算符的语法
result = object instanceof ClassName
object:要检查的对象。
ClassName:要检查的对象是否是该类的实例。
result:如果object是ClassName的实例,则为true,否则为false。
示例代码
下面我们通过一个具体的例子来理解instanceof运算符的使用。
1. 定义类层次结构
/ 定义一个基类 Animal
class Animal {public void eat() {System.out.println("动物吃东西");}
}// 定义一个子类 Dog 继承自 Animal
class Dog extends Animal {public void bark() {System.out.println("狗叫");}
}// 定义一个接口 Pet
interface Pet {void play();
}// 定义一个类 Cat 继承自 Animal 并实现 Pet 接口
class Cat extends Animal implements Pet {public void meow() {System.out.println("猫叫");}@Overridepublic void play() {System.out.println("猫玩");}
}
2. 使用instanceof进行类型检查
public class InstanceOfExample {public static void main(String[] args) {// 创建一个 Dog 对象Animal myDog = new Dog();// 使用 instanceof 检查 myDog 是否是 Dog 的实例if (myDog instanceof Dog) {System.out.println("myDog 是 Dog 类的实例");// 可以安全地转换为 Dog 类型Dog dog = (Dog) myDog;dog.bark();}// 创建一个 Cat 对象Animal myCat = new Cat();// 使用 instanceof 检查 myCat 是否是 Cat 的实例if (myCat instanceof Cat) {System.out.println("myCat 是 Cat 类的实例");// 可以安全地转换为 Cat 类型Cat cat = (Cat) myCat;cat.meow();}// 使用 instanceof 检查 myCat 是否实现了 Pet 接口if (myCat instanceof Pet) {System.out.println("myCat 实现了 Pet 接口");// 可以安全地转换为 Pet 类型Pet pet = (Pet) myCat;pet.play();}// 使用 instanceof 检查 myCat 是否是 Dog 的实例if (myCat instanceof Dog) {System.out.println("myCat 是 Dog 类的实例");// 这行代码永远不会执行,因为 myCat 不是 Dog 的实例Dog dog = (Dog) myCat;} else {System.out.println("myCat 不是 Dog 类的实例");}}
}
3. 输出结果
myDog 是 Dog 类的实例
狗叫
myCat 是 Cat 类的实例
猫叫
myCat 实现了 Pet 接口
猫玩
myCat 不是 Dog 类的实例
代码解析
1. 类层次结构:
Animal是一个基类,定义了eat方法。
Dog继承自Animal,并添加了bark方法。
Cat继承自Animal并实现了Pet接口,添加了meow方法和play方法。
2. 类型检查:
myDog instanceof Dog:检查myDog是否是Dog的实例。由于myDog是Dog的对象,条件为true,可以安全地调用Dog类的方法。
myCat instanceof Cat:检查myCat是否是Cat的实例。由于myCat是Cat的对象,条件为true,可以安全地调用Cat类的方法。
myCat instanceof Pet:检查myCat是否实现了Pet接口。由于Cat实现了Pet接口,条件为true,可以安全地调用Pet接口的方法。
myCat instanceof Dog:检查myCat是否是Dog的实例。由于myCat是Cat的对象,条件为false,不会执行转换操作。
注意事项
instanceof运算符不仅检查对象的类是否与指定的类相同,还会检查是否是其子类的实例。
在使用instanceof进行类型检查后,最好进行类型转换(强制类型转换),以确保后续代码可以安全地调用对象的方法。
如果对象为null,instanceof运算符总是返回false,因此不需要担心null指针异常。
通过使用instanceof运算符,Java程序可以在运行时进行类型检查,从而实现更灵活和安全的面向对象编程。
相关文章:
Java中的运算符“instanceof“详解
在Java中,instanceof运算符用于检查一个对象是否是某个特定类的实例,或者是否实现了某个特定接口。它返回一个布尔值(true或false),用于在运行时进行类型检查。这在处理多态性时尤其有用,可以帮助我们确定对…...
SVG无功补偿装置MATLAB仿真模型
“电气仔推送”获得资料(专享优惠) 模型简介 SVG(又称ASVG 或STATCOM)是Static Var Generator 的缩写,叫做静止无功发生器。也是做无功补偿的,比SVC 更加先进。其基本原理是将自换相桥式电路通过电抗器或…...
Java 虚拟机:承载 Java 生态的神奇魔盒
在软件开发的世界里,Java 虚拟机(JVM)就像一位智慧的管家,默默守护着 Java 生态系统的运行。它不仅让 Java 实现了"一次编写,到处运行"的梦想,更是成为了多种编程语言的运行平台。让我们一起走进…...
多输入多输出 | Matlab实现TCN-LSTM时间卷积神经网络结合长短期记忆神经网络多输入多输出预测
多输入多输出 | Matlab实现TCN-LSTM时间卷积神经网络结合长短期记忆神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现TCN-LSTM时间卷积神经网络结合长短期记忆神经网络多输入多输出预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 多输入多输出 | Matlab实现…...
快速排序算法讲解(c基础)
一、快速排序的基本原理 快速排序是一种基于分治策略的高效排序算法。它的基本思想是: 选择一个基准元素(pivot),通过一趟排序将待排序序列分割成两部分,其中一部分的所有元素都比基准元素小,另一部分的所有…...
数据结构--二叉树的创建和遍历
目录 引入 定义 性质 二叉树的创建 迭代法 注意事项: 递归法 注意事项: 二叉树的遍历 深度优先 广度优先 先序遍历(前序遍历) 中序遍历 后序遍历 层序遍历 查找树结构中是否存在某数值 方法一: 方法…...
2024143读书笔记|《遇见》——立在城市的飞尘里,我们是一列忧愁而又快乐的树
2024143读书笔记|《遇见》——立在城市的飞尘里,我们是一列忧愁而又快乐的树 第1章 年年岁岁岁岁年年第2章 遇见第3章 有个叫“时间”的家伙走过第4章 初雪第6章 回首风烟 《华语散文温柔的一支笔:张晓风作品集(共5册)》作者张晓风…...
计算机毕业设计Python+卷积神经网络股票预测系统 股票推荐系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
leetcode hot100【LeetCode 48.旋转图像】java实现
LeetCode 48.旋转图像 题目描述 给定一个 n x n 的二维矩阵 matrix,表示一个图像。请你将该图像顺时针旋转 90 度。 说明: 你必须在 原地 修改输入的二维矩阵。你可以假设矩阵的所有元素将会是整数。 示例 1: 输入: [[1, 2, 3],[4, 5, 6],[7, 8, …...
力扣1382:将二叉搜索树便平衡
给你一棵二叉搜索树,请你返回一棵 平衡后 的二叉搜索树,新生成的树应该与原来的树有着相同的节点值。如果有多种构造方法,请你返回任意一种。 如果一棵二叉搜索树中,每个节点的两棵子树高度差不超过 1 ,我们就称这棵二…...
ElasticSearch学习篇19_《检索技术核心20讲》搜推广系统设计思想
目录 主要是包含搜推广系统的基本模块简单介绍,另有一些流程、设计思想的分析。 搜索引擎 基本模块检索流程 查询分析查询纠错 广告引擎 基于标签倒排索引召回基于向量ANN检索召回打分机制:非精确打分精准深度学习模型打分索引精简:必要的…...
实战ansible-playbook:Ansible Vault加密敏感数据(三)
在实际生产环境中,使用 Ansible Vault 来加密敏感数据是一种常见的做法。以下是一个详细的步骤和实际生产环境的使用案例,展示如何使用 Ansible Vault 来加密和管理敏感数据。 1. 安装 Ansible 确保你已经安装了 Ansible。如果还没有安装,可以使用以下命令进行安装: # 在…...
Python 视频合并工具
Python 视频合并工具 1.简介: 这是一个使用 moviepy 和 tkinter 创建的简单图形用户界面(GUI)应用程序,用于合并两个视频文件,并在两个视频之间添加淡入淡出过渡效果。程序的功能是: 选择两个视频&#…...
JavaScript实用工具lodash库
Lodash中文文档: Lodash 简介 | Lodash中文文档 | Lodash中文网 Lodash是一个功能强大、易于使用的JavaScript实用工具库,它提供了丰富的函数和工具,能够方便地处理集合、字符串、数值、函数等多种数据类型。通过使用Lodash,开发者可以大幅…...
mapstruct DTO转换使用
定义一个基础接口 package com.example.mapstruct;import org.mapstruct.Named;import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.Date; import java.util.List;/*** Author zmn Dat…...
Linux(Centos7)---安装nginx(很简单)
安装 sudo yum install nginx -y开机启动与开启服务 sudo systemctl enable nginx sudo systemctl start nginx...
【接口调试】OpenAI ChatGPT API
【接口调试】AbortController 发出请求finish_reason 参数细节 – Openai ChatGPT 文档 发出请求 可以将以下命令粘贴到终端中以运行第一个API请求。 请确保用您的秘密API密钥替换$OPENAI_API_KEY。 curl https://api.openai.com/v1/chat/completions \-H "Content-Ty…...
云轴科技ZStack助力 “上科大智慧校园信创云平台”入选上海市2024年优秀信创解决方案
近日,为激发创新活⼒,促进信创⾏业⾼质量发展,由上海市经济信息化委会同上海市委网信办、上海市密码管理局、上海市国资委等主办的“2024年上海市优秀信创解决方案”征集遴选活动圆满落幕。云轴科技ZStack支持的“上科大智慧校园信创云平台”…...
CPU性能优化-CPU特性
现代CPU持续的添加新特性,使用这些特性可以大大简化找到底层问题的方法。 1 自顶向下微架构分析TMA,是一种识别应用程序低效使用CPU微架构的强大技术,识别负载的瓶颈,定位出现问题的代码具体位置,封装了CPU微架构中复杂…...
Idea使用Maven连接MySQL数据库
1.首先创建Maven文件 2.在pom.xml里添加代码,配置连接MySQL数据库所需要的配置文件。 <dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version&…...
终极指南:掌握JSON-BigInt解决JavaScript大整数精度丢失问题
终极指南:掌握JSON-BigInt解决JavaScript大整数精度丢失问题 【免费下载链接】json-bigint JSON.parse/stringify with bigints support 项目地址: https://gitcode.com/gh_mirrors/js/json-bigint 在JavaScript开发中,你是否遇到过处理大整数时精…...
给嵌入式新手的保姆级指南:JTAG、SWD、J-Link、ST-Link到底怎么选?
嵌入式开发调试工具全指南:从JTAG到SWD的实战选择策略 第一次拿到STM32开发板时,看着板子上那排密密麻麻的调试接口针脚,我盯着J-Link和ST-Link这两个名词发了半小时呆——它们到底有什么区别?为什么有的教程用JTAG接线࿰…...
Prompt Optimizer
链接:https://pan.quark.cn/s/3d42e4512934Prompt Optimizer v2.2.1是一款开源AI提示词优化工具,致力于通过智能算法提升提示词质量,支持多模型集成和图像生成功能。它提供桌面应用、Docker部署等多种方式,帮助用户快速获得精准的…...
Step3-VL-10B部署案例:金融APP界面自动化测试,覆盖85%人工回归用例
Step3-VL-10B部署案例:金融APP界面自动化测试,覆盖85%人工回归用例 1. 项目背景与痛点 金融APP的每一次版本更新,都伴随着一场紧张的回归测试。测试团队需要反复验证登录、转账、理财购买、账单查询等几十个核心功能,确保新代码…...
告别官方包:手把手教你为遗留项目编译一个“增强版”Qt5.15.17
告别官方包:手把手教你为遗留项目编译一个“增强版”Qt5.15.17 当官方支持终止后,维护基于Qt5的遗留项目就像在悬崖边行走——你需要稳定性,但又渴望那些关键补丁和完整功能。本文将带你深入探索如何为团队构建一个功能完备的私有Qt工具链&am…...
SDMatte企业级应用:批量商品图去背景+Alpha Matte交付方案
SDMatte企业级应用:批量商品图去背景Alpha Matte交付方案 1. 产品概述 SDMatte是一款专为商业场景设计的高精度AI抠图工具,特别适合电商、广告和设计行业的大规模图像处理需求。它能快速将商品图片中的主体与背景分离,生成带有Alpha通道的透…...
【Hot 100 刷题计划】 LeetCode 138. 随机链表的复制 | C++ 链表深拷贝题解
LeetCode 138. 随机链表的复制 | C 哈希表 DFS 深拷贝题解 📌 题目描述 题目级别:中等 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 请你构造这个链表的深拷…...
AI系统-7Pytorch数字识别实战及算子介绍
之前铺垫了神经网络的基础知识,这里使用编程工具Pytorch进行一个实战讲解。首先变成一个看得见、摸得着的程序和代码,然后再说后续怎么使用GPU/NPU硬件去优化。 本文主要参考ZOMI酱《AI系统》:https://chenzomi12.github.io/01Introduction/0…...
别再瞎找了!AI论文软件2026最新测评与推荐
2026年真正好用的AI论文软件,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…...
OpenClaw自动化周报生成:Qwen3-32B私有镜像精准提取Git提交记录
OpenClaw自动化周报生成:Qwen3-32B私有镜像精准提取Git提交记录 1. 为什么需要自动化周报生成 每周五下午,我都会面临同样的困扰:需要从零散的Git提交记录中手动整理本周工作内容,再拼凑成一份结构化的周报。这个过程不仅耗时&a…...
