聊聊反射
一、什么是反射?
概念:反射是Java的一种机制,让我们可以在运行时获取类的信息。
加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射。
二、如何获取class对象?【三种方法】
第一种:类名.class
若已知具体的类,通过类的class属性获取,该方法最为安全可靠,程序性能最高。
Class clazz= Person.class;
第二种:实例.getClass()
已知某个类的实例,调用该实例getClass()方法获取Class对象
Person person =new Person(); Class clazz= person.getClass();
第三种:Class.forName(“类的全限定名”)
已知一个类的全类名,且该类在类路径下,可通过Class类的静态方法forName()获取
Class clazz= Class.forName("java.util.Date");
二、通过反射可以获取到的主要描述信息
| 方法名 | 功能说明 |
| static ClassforName(String name) | 返回指定类名name的Class对象 |
| Object newlnstance() | 调用缺省构造函数,返回Class对象的一个实例 |
| getName() | 返回此Class对象所表示的实体(类,接口,数组类或void)的名称。 |
| Class getSuperClass() | 返回当前Class对象的父类的Class对象 |
| Class[] getinterfaces() | 获取当前Class对象的接口 |
| ClassLoader getClassLoader() | 返回该类的类加载器 |
| Constructor]getConstructors() | 返回一个包含某些Constructor对象的数组 |
| Method getMothed(String name,Class.. T) | 返回一个Method对象,此对象的形参类型为 |
| Field[getDeclaredFields() | 返回Field对象的一个数组 |
三、反射的作用
通过反射,我们可以在程序运行时动态创建对象,还能获取到类的所有信息,比如它的属性、构造器、方法、注解等;
获取Class对象的成员变量
获取Class对象的构造方法
获取Class对象的成员方法
四、反射优点和缺点
优点:可以实现动态创建对象和编译,体现出很大的灵活性
缺点:对性能有影响。使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的要求。这类操作总是慢于直接执行相同的操作。

浙公网安备 33010602011771号