网站首页 > java教程 正文
java.lang.Class.isInstance和instanceof关键字都是用来判断对象类型的,但是当程序在运行时动态地判断对象的类型时instanceof就无能为力了。话不多说,直接上代码!
public class Car {
}
public class Train{
}
public class Benz extends Car {
public void 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来创建。
猜你喜欢
- 2024-10-06 如何使用Java 文件系统 File类?(java files类)
- 2024-10-06 Spring问题之提示文件不存在处理it does not exist
- 2024-10-06 Java中类加载器的工作原理(java中类加载器有几种)
- 2024-10-06 java常见问题(java常见问题及答案)
- 2024-10-06 「Java」常用的文件操作(java 文件处理)
- 2024-10-06 JAVA中的文件操作2-如何读写文件(java高并发读写文件)
- 2024-10-06 bitmap算法:如何在20亿个非负整数中如何判断一个数是否存在?
- 2024-10-06 Java 如何验证文件名的有效性?(java判断文件名包含字符串)
- 2024-10-06 java中读取properties文件最简单的方法
- 2024-10-06 五十六、探析Java文件过滤技术与高级文件检索方法
你 发表评论:
欢迎- 最近发表
-
- 你真的会用 Java 中的线程池吗?多个企业级线程池工具类封装实践
- 线程池的实现原理、优点与风险、以及四种线程池实现
- Java线程池ThreadPoolExecutor实现原理剖析
- 深入分析线程池的实现原理(线程池是干嘛的)
- 一文搞懂JAVA线程池工作原理(java线程池的工作流程)
- Java线程池的工作原理(java线程池的实现原理)
- 5分钟读懂C#中TcpClient、TcpListener和Socket三个类的角色
- JVM对象的创建过程(jvm运行过程中创建的对象一般存放在方法区)
- 对象组成与Java内存模型JMM分析(java对象在内存中存储的结构)
- JVM对象内存分配详细过程(栈上分配->TLAB->老年代->Eden区)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)