自学内容网 自学内容网

java反射介绍

9d9b0415809a4927a209db374bc1925a.jpg

 

一、反射的基本概念

反射(Reflection):是指在程序运行过程中,能够动态地获取类的内部信息(如类的属性、方法、构造函数等),并能直接操作这些内部信息的一种技术。

类对象(Class Object):在Java中,每个类都有一个与之对应的类对象,它是java.lang.Class类的一个实例。类对象包含了该类的所有信息,包括类的名称、父类、接口、构造函数、属性、方法等。

二、获取类对象的方式

Class.forName(String className):通过类的完全限定名(包括包名和类名)动态地加载类,并返回该类的类对象。

类名.class:在编译时就已经确定了要获取的类,返回该类的类对象。

对象.getClass():通过对象实例来获取该对象的类对象。

三、反射的主要功能

获取类的信息:

getName():获取类的名称。

getSuperclass():获取类的父类。

getInterfaces():获取类实现的接口。

getConstructors():获取类的所有构造函数。

getDeclaredConstructors():获取类声明的所有构造函数(包括私有的)。

getMethods():获取类的所有公共方法。

getDeclaredMethods():获取类声明的所有方法(包括私有的)。

getFields():获取类的所有公共属性。

getDeclaredFields():获取类声明的所有属性(包括私有的)。

创建对象:

newInstance()(已过时,推荐使用Constructor.newInstance()):通过类对象创建该类的实例。

Constructor.newInstance():通过指定的构造函数创建类的实例。

操作属性:

Field.get(Object obj):获取指定对象上该属性的值。

Field.set(Object obj, Object value):设置指定对象上该属性的值。

调用方法:

Method.invoke(Object obj, Object... args):在指定对象上调用该方法,并传递参数。

四、反射的应用场景

框架开发:如Spring等框架,通过反射技术实现了依赖注入等功能。

动态代理:通过反射机制,可以在运行时动态地创建代理对象,实现AOP(面向切面编程)。

工具类开发:如一些ORM(对象关系映射)框架,通过反射技术实现了将数据库表映射为Java对象的功能。

调试和测试:在调试和测试阶段,可以使用反射技术来动态地获取类的内部信息,并进行相应的测试。

五、反射的注意事项

性能开销:反射操作相比直接操作代码有一定的性能开销,因此在使用时需要权衡性能需求。

安全性:反射操作可能会破坏类的封装性,导致不可预见的问题。因此,在使用时需要谨慎处理。

异常处理:反射操作可能会抛出多种异常,如ClassNotFoundException、NoSuchMethodException、IllegalAccessException等,需要进行相应的异常处理。

 


原文地址:https://blog.csdn.net/weixin_57763462/article/details/143085480

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!