1.反射的概念
2.反射的作用
3.反射的具体例子
4.总结
1.
反射指的是程序可以访问、检测和修改它本身状态和行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。
2.
作用1:原来的.class 文件可以转换为.java文件。
作用2:通过反射机制可以访问java对象的属性,方法和构造方法等。
3.
首先了解一下常见的反射机制中的类:
java.lang.Class;
java.lang.reflect.Constructor;
java.lang.reflect.Field;
java.lang.reflect.Method;
java.lang.reflect.Modifier;
1.反射机制获取类的三中方法:(以获取student为例)
//第一种方式
Calss c1 = Class.forName("student");
//第二种方式(java中每个类都有class属性)
Class c2 = student.class;
//第三种方式
//java语言中任何一种语言都有getClass方法
Student = new student();
Student c3 = e.getClass();//c3是运行时的类,e的运行时类是student
2.创建对象:获取类以后我们可以用来创建它的对象,利用new Instance。
Class c = Class.forName("Employee");
//创建此Class对象所表示的类一个新实例
Object to = c.newInstance(); //调用了student的无参构造方法。
3.获取属性(获取所有的属性和特定的属性)
①:
获取所有的属性
使用getDeclaredFields()方法。
获取属性的修饰符
使用getModifiers()方法。
②:
获取特定的属性
public static void main(String[] args)throws Exception{
//以前的方式
User u = new User();
u.age = 12;
System.out.print(u.age);
//利用反射机制
//获取类
Class c = Class.forName("user");
//获取id属性
Class idf = c.getDeclaredField("id");
//实例化这个类赋值给b
Object b = c.newInstance();
//打破封装
idf.getAccessible(true);
给b对象的id属性赋值11
idf.set(b,"11");
System.print.out("idf.get(b)");
}
4.
java的反射机制提供了很多功能,比如在运行时可以判定任意一个对象所属的类,可以构造任意一个类的对象,可以判定任意一个类所具有的成员变量和方法,可以调用任意一个对象的方法,生成动态代理。
当我们需要逆向代码即反编译时、动态生成类框架时、与注解相结合框架时、应用于单纯的反射机制应用框架时可以使用反射机制。
应用反射机制时的性能是一个问题,反射相当于一系列解释操作,通知jvm要做的事情,性能比直接的java代码要慢很多。