关于Java反射机制的几个问题

简介: 运行时类型识别(Run-time Type Identification, RTTI)主要有两种方式, 一种是在编译时和运行时已经知道了所有的类型,另外一种是反射机制。

如何在运行时确定对象类型

运行时类型识别(Run-time Type Identification, RTTI)主要有两种方式,

一种是在编译时和运行时已经知道了所有的类型,另外一种是反射机制。

类型信息在运行时是如何表示的,是由Class对象完成的,它包含了与类有关的信息。
类是程序的重要组成部分,每个类都有一个Class对象,每当编写并编译了一个新类就会产生一个Class对象,它被保存在一个同名的.class文件中。
在运行时,当我们想生成这个类的对象时,运行这个程序的Java虚拟机(JVM)会确认这个类的Class对象是否已经加载,
如果尚未加载,JVM就会根据类名查找.class文件,并将其载入,一旦这个类的Class对象被载入内存,它就被用来创建这个类的所有对象。

一般的RTTI形式包括三种:
(1)通过传统的类型转换是否成功判断

如“(Apple)Fruit”,由RTTI确保类型转换的正确性,如果执行了一个错误的类型转换,就会抛出一个ClassCastException异常。

(2)通过Class对象来获取对象的类型

1
2
Class c = Class.forName(“Apple”);
Object o = c.newInstance();

 

(3)通过关键字instanceof或Class.isInstance()方法来确定对象是否属于某个特定类型的实例
准确的说,应该是instanceof / Class.isInstance()可以用来确定对象是否属于某个特定类及其所有父类的实例,
注意和equals() / ==区分,它们用来比较两个对象是否属于同一个类的实例,没有考虑继承关系。


Class下的newInstance()和new()有什么区别

首先,newInstance( )是一个方法,而new是一个关键字,
其次,Class下的newInstance()的使用有局限,因为它生成对象只能调用无参的构造函数,而使用new关键字生成对象没有这个限制。
总结如下:
Class.forName("")返回的是类;
Class.forName("").newInstance()返回的是Object。


理解Class.forName()方法

一般来说,使用Class.forName( )静态方法的目的是为了动态加载类,
在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便操作。
因此,使用Class.forName( )最终目的是为了实例化对象。

 


目录
相关文章
|
7月前
|
SQL 前端开发 Java
深入了解Java反射机制
深入了解Java反射机制
115 0
|
16天前
|
Java
Java反射机制
Java反射机制
26 0
|
2月前
|
开发框架 Java 程序员
java反射机制
了解java反射机制
|
2月前
|
设计模式 安全 Java
玩转Java反射机制
玩转Java反射机制
47 1
|
4月前
|
安全 IDE Java
【Java反射机制详解】—— 每天一点小知识
【Java反射机制详解】—— 每天一点小知识
|
7月前
|
Java
Java反射机制详解
Java反射机制详解
31 0
|
8月前
|
设计模式 Java API
java反射机制及其详解
java反射机制及其详解
127 7
|
12月前
|
安全 Java
32 java反射机制详解
1 反射快速上手案例
70 0
|
安全 Java 程序员
java反射机制解读
1.什么是反射 反射就是Reflection,Java的反射是指程序在运行期可以拿到一个对象的所有信息。 加载类后,在堆中就产生了一个class类型的对象,这个对象包含了类的完整结构的信息,通过这个对象得到类的结构。这个class对象就像一面镜子,透过这个镜子可以看到类的结构,所以形象的称之为“反射” 反射机制是框架的灵魂,一个java程序员不能不会使用反射😶‍🌫️没有反射机制,java将一无是处
57 0
java反射机制解读
|
Java
Java反射机制(初步认识)
Java反射机制(初步认识)
90 0
Java反射机制(初步认识)