1. 程式人生 > >利用java反射機制,實現對類的私有變數和私有方法的訪問

利用java反射機制,實現對類的私有變數和私有方法的訪問

記得有一句很有名的話:No reflection ,no frameworks

這一句短短的話道出了java 反射機制的強大。

java關於反射機制的包主要在java.lang.reflect中,structs,hibernate,spring等框架都是基於java的反射機制。

下面是一個關於利用java的反射機制,實現了對私有屬性和私有方法的訪問的簡單例子,希望能對你有所幫助。

Java程式碼  收藏程式碼
  1. package test.reflection;  
  2. import java.lang.reflect.Field;  
  3. import java.lang.reflect.Method;  
  4. public class Person {  
  5.     private String name;//私有屬性  
  6.     public String address;  
  7.     public Person(String name){  
  8.         this.name=name;  
  9.     }  
  10.     private void setAddress(String address){ //私有方法  
  11.         this.address=address;  
  12.     }  
  13.     public static void main(String[] args) {  
  14.         try
    {  
  15.             Person person=new Person("zhangsan");  
  16.             Class<Person> cls=Person.class;  
  17.             //獲得私有方法  
  18.             Method method=cls.getDeclaredMethod("setAddress"new Class[]{String.class});  
  19.             //設定私有方法可以被訪問  
  20.             method.setAccessible(true);  
  21.             //呼叫私有方法
      
  22.             method.invoke(person, new Object[]{"BJUT"});  
  23.             System.out.println(person.address);//輸出BJUT  
  24.             //訪問私有變數  
  25.             Field field=cls.getDeclaredField("name");  
  26.             field.setAccessible(true);  
  27.             System.out.println(field.get(person));//輸出zhangsan  
  28.         }catch(Exception ex){  
  29.             ex.printStackTrace();  
  30.         }  
  31.     }  
  32. }