您的位置:首页 > 编程语言 > Java开发

java反射

2016-07-04 17:29 369 查看
一、概念:
    反射:主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。
   反射是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

<span style="font-family:FangSong_GB2312;font-size:18px;">import java.lang.reflect.Constructor;  
import java.lang.reflect.Field;  
import java.lang.reflect.InvocationTargetException;  
import java.lang.reflect.Method;  
  
import org.junit.Test;  
//通过这个类解析出People类的所有字段、方法,并对People进行实例化  
public class TestFlact {  
      
    @Test  
    public void loadClazz() throws ClassNotFoundException, SecurityException,  
            NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {  
          
          
        Class<?> clazz = Class.forName("People");     //把People类加载到内存  
  
        //创建出类的实例  
        Constructor<?> con = clazz.getConstructor(String.class);//获得People的构造函数  
        People p = (People) con.newInstance("hello");//调用people构造函数获得实例  
          
        //解析出所有的字段  
        Field[] f =  clazz.getDeclaredFields();  
        for (Field field :f){  
            System.out.println(field.toGenericString());  
        }  
        //解析出所有方法。  
        Method[] method = clazz.getMethods();  
  
        for(Method th : method){  
            System.out.println(th.getName().toString());  
        }  
          
       
    }  
}  
</span>  

People类:

[java]
view plain
copy

<span style="font-family:FangSong_GB2312;font-size:18px;">public class People {  
    String name ;  
    int age;  
    boolean sex;  
      
    People(){  
          
    }  
    People(String name){  
    }  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public boolean isSex() {  
        return sex;  
    }  
  
    public void setSex(boolean sex) {  
        this.sex = sex;  
    }  
      
      
  
}  
</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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: