xjk2131650 发表于 2013-2-3 14:16:54

反射基本概念

在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]
查看完整版本: 反射基本概念