文章目录
一.反射的基本概念
二.反射常用类
三.使用反射的基本步骤
四.Class类详解
(1)Class类存放类的结构信息
(2)获取 Class对象的方式
(3)获取类的其他结构信息
(4)动态创建对象
(5)动态执行方法
(6)反射动态操作属性值
(7)反射技术的优点和缺点
一.反射的基本概念
- 程序运行期间,动态的获取类的基本信息。
- 对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
二.反射常用类
- Class类—可获取类和类的成员信息
- Field类—可访问类的属性
- Method类—可调用类的方法
- Constructor类—可调用类的构造方法
三.使用反射的基本步骤
- 1.导入java.lang.reflect.*
- 2.获得需要操作的类的Java.lang.Class对象
- 3.调用Class的方法获取Field、Method等对象
- 4.使用反射API进行操作(设置属性﹑调用方法)
四.Class类讲解
java.lang.class是反射的源头:我们创建了一个类,通过编译(javac.exe)生成对应的.class文件,之后我们使用java.exe加载(JVM的类加载器完成的)此class文件加载到内存以后,就是一个运行时类,存在缓存区。那么这个运行类本身就是一个Class的实例!
特别说明
- 每个类都有自己的Class对象
- 用于获取与类相关的各种信息
- 提供了获取类信息的相关方法
- Class类继承自Object类
(1)Class类存放类的结构信息
- 类名
- 父类﹑接口
- 方法﹑构造方法﹑属性
- 注释
(2)获取 Class对象的方式
- 第一种方式:对象.getClass()
//方法1:对象.getClass()Person p=new Person();Class clazz=p.getClass();
- 第二种方式:类.class
//方法2:类.classclazz= Student.class;
- 第三种方式:Class.forName()
//方法3:Class.forName()clazz=Class.forName("java.lang.String");clazz=Class.forName("java.util.Date");
- 补充常见案例
(4)获取类的其他结构信息
(5)动态创建对象
- 方法一:使用Class的newInstance()方法,仅适用于无参构造方法
- 方法二:调用Constructor的newInstance()方法,适用所有构造方法
(6)动态执行方法
- 调用方法基本步骤:
- 1.通过Class对象获取Method 对象
- 2.调用Method对象的invoke()方法
例如:
Object invoke(Object obj,Object [] args);//object 返回值,obj 当前方法所属对象,args 当前方法的参数列表
(7)反射动态操作属性值
- 操作属性的基本步骤
- 1.通过Class对象获取Field 对象
- 2.调用Field 对象的方法进行取值或赋值操作
(8)反射技术的优点和缺点
- 优点:
- 1.提高了Java程序的灵活性和扩展性,降低了耦合性,提高自适应能力
- 2.允许程序创建和控制任何类的对象,无需提前硬编码目标类
- 缺点:
- 1.性能问题
- 2.代码维护问题