反射基本概念
在java运行时环境中,对于任意一个类,能够动态的获取类的信息,动态调用类的方法。在运行期间:判断,构造,调用任意一个类的成员变量和方法。而在编译期间:我们是用new 创建java的对象。
通过reflection机制,我们可以在运行时取得任何一个已知名称的class的内部信息,包括其修饰符,以及superclass,interfaces,也包括fields和methods的所有信息。
在jdk中主要由以下类来实现java反射机制:
-class类,
-Field类,
-Mehtod类,
-Array类。
------------------
动态语言定义:程序运行时,允许改变程序结构或者变量类型,这种语言称为动态语言。从这个观点看,perl,python,ruby,javasacript是动态语言,c++,java,c#不是动态语言。但是java却有一个非常突出的动态相关机制,Reflection。
----------------------
1.要想使用反射,首先需要获得待处理类或对象的class对象
2.获取class的三种方法。
1)通过Class.forName("");
2)通过类.class,eg:string.class;
3)通过对象的 obj.getClass();
3.若想通过类的不带参数的构造方法生成对象,有两种方式:
a)先获得class对象,然后通过class对象的newInstance()方法直接生成即可
b)先获得class对象,然后通过该对象获得对应的Constructor对象,再通过该Construtor对象的newInstance()方法生成;Class<?> classType=StringBuffer.class;
Constructor cons=classType.getConstructor(new Class[]{});
Object obj=new cons.newInstance(new Object[]{});
4.
若想通过类的带参数的构造方法生成对象,只有一个方法:
先获得class对象,然后通过该对象获得对应的Constructor对象,再通过该Construtor对象的newInstance()方法生成;Class<?> classType=StringBuffer.class;
Constructor cons=classType.getConstructor(new Class{});
Object obj=new cons.newInstance(new Object[]{"abing",5});
5.通过反射可以调用一个对象的private方法,或者修改一对象的private属性。
<div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 9px; color: #545454; line-height: 25px; background-color: transparent; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; width: 766px; padding: 1px;" class="dp-highlighter"><div style="padding: 0px; margin: 0px;" class="bar"><div style="font-weight: bold; padding: 3px; margin: 0px;" class="tools">Java代码
页:
[1]