一文搞定Java.lang.Class.IsInstance和Instanceof的区别

开发 前端
Java.lang.Class.isInstance和instanceof关键字都是用来判断对象类型的,但是当程序在运行时动态地判断对象的类型时instanceof就无能为力了。

[[420534]]

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

  1. public class Car { 
  2. public class Train{ 
  3. public class Benz extends Car { 
  4. public void printBenz() { 
  5. System.out.println("printBenz"); 
  6. Car c1=new Car(); 
  7. Benz b1=new Benz(); 
  8. System.out.println(b1 instanceof Benz); 
  9. System.out.println(b1 instanceof Car); 
  10. 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。

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

  1. public static void main(String[] args)throws ClassNotFoundException { 
  2. System.out.println(checkType(newBenz(), "com.my.demo.Car")); 
  3. System.out.println(checkType(newBenz(), "com.my.demo.Benz")); 
  4. public static boolean checkType(Object obj,String className) throws ClassNotFoundException { 
  5. 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来创建。

 

责任编辑:姜华 来源: 今日头条
相关推荐

2021-03-28 18:40:02

LinuxWindowsJava

2019-09-23 10:51:14

JavaJava虚拟机Linux

2021-08-13 05:50:01

ContainerdDockerKubernetes

2024-01-09 08:24:47

JMM核心线程

2021-10-25 16:01:01

Linux设备树字符串

2017-07-28 09:11:14

HIVEHBASE区别

2024-04-10 13:50:41

CentOSUbuntu操作系统

2023-08-01 08:27:15

Java I/ONIO

2021-07-05 00:00:55

TomcatNginxApache

2021-08-31 07:02:20

Diff算法DOM

2022-08-17 18:25:37

Java分布式搜索引擎

2023-12-28 07:37:24

CAS内存阻塞

2020-03-03 17:47:07

UDP TCP面试题

2021-10-06 20:23:08

Linux共享内存

2020-10-29 08:55:04

微服务

2020-11-04 07:49:04

Select

2023-10-30 18:08:50

2022-06-10 09:04:24

Python读取文件代码

2021-04-15 09:41:30

云计算PAASSAAS

2021-04-19 17:32:34

Java内存模型
点赞
收藏

51CTO技术栈公众号