JAVA中的反射

JAVA中的反射机制

概述

在Java环境中,反射机制允许程序在执行时获取某个类自身的定义信息,例如熟悉和方法等也可以实现动态创建类的对象、变更属性的内容或执行特定的方法的功能。从而使Java具有动态语言的特性,增强了程序的灵活性和可移植性。(反射机制是在运行状态下)

一、用途

Java反射机制主要用于实现以下功能。
(1)在运行时判断任意一个对象所属的类型。
(2)在运行时构造任意一个类的对象。
(3)在运行时判断任意一个类所具有的成员变量和方法。
(4)在运行时调用任意一个对象的方法,甚至可以调用private方法。

二、反射相关的API

实现Java反射机制的API在Java.lang.reflect包下,具有以下几点。
(1)Class类:代表一个类。
(2)Filed类:代表类的成员变量。
(3)Method类:代表类的方法。
(4)Constructor类:代表类的构造方法。
(5)Array类:提供了动态创建数组及访问数组元素的静态方法。该类中的 所有方法都是静态的。
1.class类
class代表类的实体,在运行的java应用程序中表示类和接口。
java文件被编译后生成了.class文件,被编译后的java文件.class也被JVM解析为一个对象,这个对象就是java.lang.class . 这样当程序在运行时,每个java文件就最终变成了class类对象的一个实例**(这个class 对象存放在方法区,不在堆里)**。我们通过java的反射机制应用到这个实例,**就可以获得甚至去添加改变这个类的属性和动作,**使得这个类成为一个动态的类。

常见的获得类相关的方法
getClassLoader()            //获得类的加载器
getDeclaredClasses() //返回一个数组,数组中包含该类中所有的接口类的对象(包括私有的)
forName(String className)   //根据类名返回类的对象
newInstance()     //创建类的实例
getName()    //获得类的完整路径名字

2.field 类 :属性相关

常见的获得类中属性相关的方法
getField()   // 获得某个公有的属性对象
getFields()   //获得所有公有的属性对象
getDeclaredField(String name)  // 获得某个属性对象
getDeclaredFields()  //获得所有属性对象

3.Constructor 类 : 构造器相关

getConstructor(Class...<?> parameterTypes)  //获得该类中与参数类型匹配的公有构造方法
getConstructors()  //获得该类的所有公有构造方法
getDeclaredConstructor(Class...<?> parameterTypes)  //获得该类中与参数类型匹配的构造方法
getDeclaredConstrucor() //获得该类所有构造方法

4.Method类 : 方法相关

getMethod(String name,Class..<?> parameterTypes) //获得该类某个公有方法
getMethods() //获得该类所有公有方法
getDeclaredMethod(String name,Class...<?> parameterTypes) //获得该类某个方法
getDeclaredMethods() //获得该类所有方法

5.所有和反射相关的包都在import java.lang.reflect 包下面
java.lang.reflect.Constructor
java.lang.reflect.Field
java.lang.reflect.Method

三、反射优点和缺点

优点
1.对于任意一个类,都能知道这个类的所有属性和方法;对于任意一个对象,都能调用它的任意方法
2.增加程序的灵活性和扩展性,降低耦合性,提高自适应能力
3.发射已经运用在很多流行框架如:Struts、Hibernate、Spring 等
缺点:
1.反射会有效率问题,会降低程序的效率
2.反射技术绕过了源代码的技术,会带来维护问题。反射代码比相应的直接代码更复杂。

四、反射的步骤

1.首先获得当前类的Class对象

  • 使用Class.forName(“类的全路径名”);静态方法
  • 使用类名 .class 方法
  • 使用类对象 getClass()方法

2.获得class对象后,通过对应的方法获取类的属性和方法或者构造函数等。

以上就是我所理解的相关反射(reflection)的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值