反射总结

来源:互联网 发布:java架构师岗位职责 编辑:程序博客网 时间:2024/06/05 06:29

反射简单讲就是把一个java类中的所有成分都映射成一个相应的java类。这个java类包含有前一个类的相关信息。

通过反射得到的是相应累得字节码文件,总共有三种加载字节码的方式: 1、类名.class         2、对象.getClass();    3、Class.forName("");//这里要为类的全路径:包名.类名

一、预定义Class实例对象,8个基本类型对象和一个void对象。

void即void.class

isPrimitive():是否是原始类型。

如:int.class.isPrimitive()    返回值为true  

数组类型的Class实例对象

如:int[].class.isArray()         返回值为true

         只要在源程序中出现的类型,都有各自的Class实例对象。

二、Constructor类代表某个类中的一个构造方法。

反射利用getConstructor()获取构造方法。

一个类通常有不止一个构造函数,getConstructor()通过构造函数的参数个数和类型的不同来区分

如:Constructor c=String.class.getConstructor(StringBuffer.class)//一个StringBuffer类型的参数

利用构造方法实现一个对象,传递参数

c.newInstance(new StringBuffer("aaa"));

三、Field类代表某个类中的一个成员变量。

反射中,如果出现private修饰的变量。想要得到它时,需要用到暴力反射将

获取公共成员字段的getField()修改成getDeclaredField()获得声明的字段。同时还要设置该变量

setAccessible(true)就可以获得类文件中私有变量的属性了

四、Method代表某个类的一个成员方法。

注:反射得到的方法并不属于某个对象

如:Method m=String.class.getMethod("charAt",int.class);//参数为 方法的名称 方法的参数

   String str="abc";

利用反射得到str的charAt方法:

m.invoke(str,1);//参数为 对象名称  传的参数

如果传递给Method对象的invoke()方法的第一个参数为null,

这说明Method对象对应的是一个静态方法

1 0
原创粉丝点击