JAVA反射机制

本文介绍了Java反射的相关知识。首先区分了反射和反省的概念,指出反省是反射的一部分,如C++支持反省但不支持反射。还给出了二者的例子。接着阐述了反射的作用,包括运行时检查对象类型、构造对象等,且提到反射是框架常用方法,如Junit就会使用。

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

原文出处:www.programcreek.com/2013/09/java-reflection-tutorial/

 

什么是反射?为什么它有用?怎么使用它?

 

1. 反射是什么?

“反射一般用于需要动态对正运行在java虚拟机中的应用的行为进行检查和修正的程序中。" 这个概念容易和“反省”(introspection)混淆。下面是它们在Wiki上面的定义:

  1. 反省(introspection)是指在程序运行时检查一个对象的类型和性质的能力。
  2. 反射(Reflection is)是指程序在运行是检查和修改一个对象的结构和行为的能力。

从它们的定义可以看出,反省(introspection)是反射的一部分。一些编程语言支持反省(introspection),但是不支持反射。例如 C++。

 

reflection-introspection

 

 

反省(introspection)例子:instanceof 操作判断一个对象是否属于某个特定的类

 

if(obj instanceof Dog){
   Dog d = (Dog)obj;
   d.bark();
}

 

反射例子: Class.forName()方法返回与给定的名字与之相关的类或者对象的一个class对象,并对其进行初始化。

 

// with reflection
Class<?> c = Class.forName("classpath.and.classname");
Object dog = c.newInstance();
Method m = c.getDeclaredMethod("bark", new Class<?>[0]);
m.invoke(dog);

 

在Java中,反射更像是反省,因为不能改变一个对象的结构。一些API只是改变了对它的属性和方法的访问标记,而不是改变它的结构。

 

2.我们为什么需要反射?

反射的作用:

  • 在运行期间检查一个对象的类型
  • 在运行期间构造一个类的对象
  • 在运行期间检查类的字段与方法
  • 在运行期间调用对象方法
  • 改变构造方法、普通方法、字段的访问标记
  • 等等

反射是框架常见共方法

例如,Junit 使用反射

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值