反射

反射的引入

一般来说,创建一个Java对象使用的是直接New的方式。Java对象的作用是对数据和功能的封装,所有的功能的处理都是对象之间的项目协同操作完成的。但很多情况下,我们无法预知应该创建哪个对象对功能进行处理。反射可以很好地解决动态创建对象。

反射的概念

Java中有一门技术可以在程序运行期间内根据需求动态创建对象,称为反射。

反射的原理

Java中万事万物皆对象,Java类的三大特点是属性 、方法 、构造器。发明一个类,该类用来描述类的信息,一个该类的实例化对象存储一个具体的类文件信息。通过该类的实例化对象中存储的类文件信息,来间接实现对象的创建。

反射注意

反射是一种新的创建对象的方式,可以和传统方式类比,但是不能雷同。

反射的特点

1.根据需求动态地创建对应的对象,使用该对象完成功能的处理;
2.对象是在程序运行期间创建的。

创建对象的两种方式

1、直接创建:明确的知道使用哪个对象完成功能处理,在程序运行前就声明好对象的创建;
2、使用反射:不知使用何对象完成功能处理,在程序运行期间内根据需求动态创建。

反射对对象的操作

1.反射操作对象的属性
2.反射操作对象的方法
3.反射操作对象的构造器

反射获取类对象的三种方式

1、通过全限定路径方式
示例代码:Class cla1=Class.forName(“类的全限定路径”);
类的全限定路径:包名.类名
2、通过类方式
示例代码:Class cla2=类名.class;
3、通过对象方式
示例代码:Class cla3=实例化对象.getClass();

反射获取类的基本信息:参照API

示例代码:
System.out.println(cla01.getName());//获取类的全限定路径
System.out.println(cla01.getSimpleName());//获取类名
System.out.println(cla01.getPackage());//获取包名
System.out.println(cla01.getSuperclass());//获取父类的类对象
System.out.println(cla01.getModifiers());//获取修饰符
***注意:***一个类的类对象只有一个

反射操作对象的属性

获取属性对象(存储了属性的基本信息的对象):

1.获取当前类及其父类的所有公共字段:
示例代码:类对象.getFields();
2.获取当前类声明的所有字段:
示例代码:类对象.getDeclaredFields();
3.获取指定的当前类及其父类的公共字段:
示例代码:类对象.getField(String name);
4.获取当前类指定的公共字段:
示例代码:类对象.getDeclaredField(String name);

操作属性

操作静态属性

1.赋值:
示例代码:属性对象.set(null,Object value);
2.获取:
示例代码:属性对象.get(null);

操作非静态属性

1.赋值:
示例代码:属性对象.set(属性隶属的实例化对象,Object value);
2.获取:
示例代码:属性对象.get(属性隶属的实例化对象);
区别:
传统方式操作: 对象.属性
反射方式操作: 属性(对象)

反射操作对象的方法

获取方法对象(存储了方法信息的对象)

1.获取类对象存储的类的及其父类的所有的公共方法:
示例代码:类对象.getMethods();
2.获取类对象存储的类的所有的方法:
示例代码:类对象.getDeclaredMethods();
3.获取类对象存储的类及其父类的指定的方法对象:
示例代码:类对象.getMethod(String methodName,Class…parameters);
4.获取类对象存储的类的指定的方法对象:
示例代码:类对象.getDeclaredMethod(String methodName,Class…parameters);

执行方法

1.静态方法:
示例代码:方法对象.invoke(null,实参);
2.非静态方法:
示例代码:方法对象.invoke(方法所隶属的实例化对象,实参);

反射操作对象的构造器

1.获取构造器对象:
示例代码1:类对象.getConstructor(Class…parameters);
示例代码2:类对象.getConstructors();
2.创建对象:
示例代码:构造器对象.newInstance(实参);
***注意:***返回的是类对象中存储的类的实例化对象

注意:

一般来说我们使用反射获取类对象存储的类的实例化对象,直接使用**类对象.newIntance().**获取的是类对象中存储的类的无参数的实例化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值