一文搞定java.lang.Class.isInstance和instanceof的区别

本文探讨了Java中`instanceof`关键字和`Class.isInstance()`方法在判断对象类型上的区别,强调了`isInstance()`在运行时动态判断的优势。通过示例代码展示了如何使用`isInstance()`进行类型检查,并解释了Class类的重要角色,包括获取对象类型信息和反射的中心地位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java.lang.Class.isInstance和instanceof关键字都是用来判断对象类型的,但是当程序在运行时动态地判断对象的类型时instanceof就无能为力了。话不多说,直接上代码!

public class Car {

}

public class Train{

}

public class Benz extends Car {

         publicvoid printBenz() {

                   System.out.println("printBenz");

         }

}

Car c1=new Car();

Benz b1=new Benz();

System.out.println(b1 instanceof Benz);

System.out.println(b1 instanceof Car);

System.out.println(b1 instanceof Train); //b1与Train没有关系,直接编译提示错误:Incompatible conditional operand

types Benz and Train

运行代码,输出:

true

true

A instanceof B 用来判断实例A 是否是类B的实例。 因为b1 是Benz的实例,所以第一个输出结果是true。

而Benz是Car的子类,所以第二个输出结果也是true。

接下来我们看一下动态地判断对象类型的例子:

public static void main(String[] args)throws ClassNotFoundException {

                 System.out.println(checkType(newBenz(), "com.my.demo.Car"));

                 System.out.println(checkType(newBenz(), "com.my.demo.Benz"));

             }

             public static boolean checkType(Object obj,String className) throws ClassNotFoundException {

                 return Class.forName(className).isInstance(obj);

                        }

运行代码,输出:

true

true

上述代码中,isInstance()是Class类的一个方法public boolean isInstance(Object obj),该方法的作用是在运行时判断指定的obj对象是否是当前Class实例所代表的类的实例。在这里我要提及一下Class这个类。在Java中每个类都有一个相对应的Class类的对象,换句话说:Java程序在启动运行时 一个XXX.java类经过编译生成XXX.class文件后,就会在JVM虚拟机中产生一个XXX类对应的Class类的对象,用于表示这个XXX类的类型信息,其核心作用可以总结为如下4点:

1.java.lang.Class类是Java中的反射中心,在运行时提供或获得某个对象的类型信息。

2.java是大小写敏感的,因此Class和关键字class并不冲突。

3.当我们创建一个类Car时,Java会自动生成一个内容是Car的Class类的对象, Car.class。

4.Class类的对象只能由JVM创建,无法通过new来创建。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试开发Kevin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值