Java的反射机制

反射机制概述

Java反射机制是指在运行状态中,动态获取信息以及动态调用对象方法的功能。
Java反射有3个动态性质:

  • 运行时生成对象实例
  • 运行期间调用方法
  • 运行时更改属性
    Java反射机制在编译时并不确定哪个类被加载,在程序运行时才加载、探知和使用。
    通过反射机制,可以实现:
  • 在运行时判断任意一个对象所属的类;
  • 在运行时构造任意一个类的对象;
  • 在运行时判断任意一个类所具有的方法和属性;
  • 在运行时调用任意一个对象的方法。
    在Java程序中使用反射的基本步骤:
    (1)导入java.lang.reflect.*
    (2)获得需要的类的Java.lang.Class对象
    (3)调用Class获得Field、Method等对象
    (4)使用反射API进行操作

反射的应用

获取类的信息

(1)获取Class对象
1)调用对象的getClass()方法

Test t = new Test();
Class cla = t.getClass();

2)调用类的class属性

Class cla = Test.class;

3)使用Class类的forName()静态属性

//	添加完整的包名
Class cla = Class.forName("com.project.Test"); // 正确
Class cla = Class.forName("Test"); // 错误

(2)从Class对象获取信息
1)访问Class对应的类所包含的构造方法

方法说明
Constructor getConstructor( Class… params)返回该类型指定参数列表的public构造方法,构造方法的参数列表与params所指定的类型列表所匹配
Constructor[] getConstructors()返回该类型的所有public构造方法
Constructor getDeclaredConstructor( Class… params)返回该类型的指定参数列表的构造方法,访问级别不限
Constructor[] getDeclaredConstructors()返回该类型的所有构造方法,访问级别不限

2)访问Class对应的类所包含的方法

方法说明
Method getMethod(String name, Class… params)返回该实例中指定的public方法,name参数用于指定方法名称,params参数指定参数列表
Method[] getMethods()返回该实例中所有public方法
Method getDeclaredMethod(String name, Class… params)返回该实例中指定的方法,与方法的访问级别无关
Method[] getDeclaredMethods()返回该实例中的全部方法,与方法的访问级别无关

3)访问Class对应的类所包含的属性

4)访问Class对应的类所包含的注解

创建对象

//	使用Class对象的newInstance()方法创建对象
	Class cla = Date.class;
	Date d = (Date)cla.newInstance();
//	使用Constructor对象创建对象
	Class cla = Date.class;
	Constructor cu = cla.getConstructor(long.class);
	Date d = (Date)cla.newInstance(2023);

访问类的属性

Xx getXx(Object obj)
Object get(Object obj)
void setXx(Object obj, Xx val)
void set(Object obj, Xx val)
void setAccessible(bool flag)

访问类的方法

//	其中obj是执行该方法的对象,args是执行该方法时传入该方法的参数
Object invoke(Object obj, Object args)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值