java反射

来源:互联网 发布:安卓应用知乎 编辑:程序博客网 时间:2024/06/05 18:26
一、概念:

    反射:主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。

   反射是java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接。但是反射使用不当会成本很高!

        

二、作用:

     1、反编译:.class-->.java

     2、通过反射机制访问java对象的属性,方法,构造方法等;

 

三、sun公司的反射机制的类:

    java.lang.Class;                

    java.lang.reflect.Constructor; java.lang.reflect.Field;        

    java.lang.reflect.Method;

    java.lang.reflect.Modifier;

 下面看一个例子:


[java] view plain copy
  1. <span style="font-family:FangSong_GB2312;font-size:18px;">import java.lang.reflect.Constructor;  
  2. import java.lang.reflect.Field;  
  3. import java.lang.reflect.InvocationTargetException;  
  4. import java.lang.reflect.Method;  
  5.   
  6. import org.junit.Test;  
  7. //通过这个类解析出People类的所有字段、方法,并对People进行实例化  
  8. public class TestFlact {  
  9.       
  10.     @Test  
  11.     public void loadClazz() throws ClassNotFoundException, SecurityException,  
  12.             NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {  
  13.           
  14.           
  15.         Class<?> clazz = Class.forName("People");     //把People类加载到内存  
  16.   
  17.         //创建出类的实例  
  18.         Constructor<?> con = clazz.getConstructor(String.class);//获得People的构造函数  
  19.         People p = (People) con.newInstance("hello");//调用people构造函数获得实例  
  20.           
  21.         //解析出所有的字段  
  22.         Field[] f =  clazz.getDeclaredFields();  
  23.         for (Field field :f){  
  24.             System.out.println(field.toGenericString());  
  25.         }  
  26.         //解析出所有方法。  
  27.         Method[] method = clazz.getMethods();  
  28.   
  29.         for(Method th : method){  
  30.             System.out.println(th.getName().toString());  
  31.         }  
  32.           
  33.        
  34.     }  
  35. }  
  36. </span>  
People类:
[java] view plain copy
  1. <span style="font-family:FangSong_GB2312;font-size:18px;">public class People {  
  2.     String name ;  
  3.     int age;  
  4.     boolean sex;  
  5.       
  6.     People(){  
  7.           
  8.     }  
  9.     People(String name){  
  10.     }  
  11.   
  12.     public String getName() {  
  13.         return name;  
  14.     }  
  15.   
  16.     public void setName(String name) {  
  17.         this.name = name;  
  18.     }  
  19.   
  20.     public int getAge() {  
  21.         return age;  
  22.     }  
  23.   
  24.     public void setAge(int age) {  
  25.         this.age = age;  
  26.     }  
  27.   
  28.     public boolean isSex() {  
  29.         return sex;  
  30.     }  
  31.   
  32.     public void setSex(boolean sex) {  
  33.         this.sex = sex;  
  34.     }  
  35.       
  36.       
  37.   
  38. }  
  39. </span>  

输出结果:
java.lang.String People.name
int People.age
boolean People.sex
getName
setName
getAge
setAge
isSex
setSex
wait
wait
wait
hashCode
getClass
equals
toString
notify
notifyAll
0 0
原创粉丝点击