聊聊反射

一、什么是反射?

概念:反射是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,我们希望做什么并且它满足我们的要求。这类操作总是慢于直接执行相同的操作。

 

posted @ 2022-05-02 15:46  卷心菜-小白  阅读(36)  评论(0)    收藏  举报