反射的笔记

一.概念

运行过程中,对任意一个类都能获取类中的属性和方法,对任意一个对象都能调用对象中的属性和方法,动态获取信息及调用对象的方法,实现功能的反射机制

作用:动态获取类的信息

相关类主要包括:Class 类型; Constructor 构造方法; Method 方法; Field 属性,Class外的其他三个都在java.lang.reflect包中

1.Class类

一旦class文件被加载到内存,就会创建一个Class对象,Class类是反射机制的基础,通过Class类可以得到类的基础信息.

获取的三种方法:

1.Object中的getClass方法:适用于知道对象获取

2.类名.class方法:适用于通过类名获得

3.通过Class.forName("类的地址")获取Class对象

2.Constructor类

Constructor<泛型数据> constructor ="Class对象".getConstructor("参数类型.class,没有可以不写");

可以通过getxxx方法获得构造方法的基本信息,例如:getName(返回构造方法的名字),getId(返回构造方法中的id)等

还可以通过newInstance创建实例

constructor.newInstance(参数数据);

3.Feild类

public Field getField(String name)通过指定Field名字,返回 Field实例

获得类中属性

getField("name")获得指定名称的公共权限的属性名

getDeclaredField("name")获得指定名称的所有私有权限的属性名

getFields获得公共权限的属性名

getDeclaredFields获得所有私有权限的的属性名

4.Method类

Method getMethod(String name, Class... parameterTypes) : 通过指定方法名,参数类型,返回一个Method实例

获得类中的方法

x.getMethods()获得类中所有的公共的成员方法

x.getMethod("getId",type) 获得公共的指定名称参数的成员方法

x.getDeclaredMethods();得类中所有的成员方法(包含私有的)

x.getDeclaredMethod("name",type)得公共的指定名称参数的类中所有的成员方法

invoke

x.invoke(y)实现在y里的x方法

优点:

● 1.增加程序的灵活性,可以在运行的过程中动态对类进行修改和操作

● 2.提高代码的复用率,比如动态代理

● 3.可以在运行时轻松获取任意一个类的方法、属性,并且还能通过反射进行动态 调用

缺点:

● 1.反射会涉及到动态类型的解析,导致性能要比非反射调用更低

● 2.使用反射技术通常要在一个没有安全限制的程序运行.

● 3.反射可以绕过一些限制访问的属性或者方法,可能会导致破坏代码本身的抽象 性

你可能感兴趣的:(java,开发语言)