Java反射高级应用--利用反射调用类…

//转自网络 ,用以参考
这个例子是《Thinking in Java》上的

package J2_v1;

public class Test2 {
 private int hiddenVal = 2;
}


package J2_v1;

import java.lang.reflect.Field;

public class Test1 {

 
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Test2 tt2 = new Test2();
  Field g = null;
  try {
   g = tt2.getClass().getDeclaredField("hiddenVal");
  } catch (SecurityException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (NoSuchFieldException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  g.setAccessible(true);
  try {
   System.out.println(g.getInt(tt2));
  } catch (IllegalArgumentException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IllegalAccessException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

}

---------------------------------------------------------------------------------
package me.test;
import java.lang.reflect.*;  //导入反射需要的包
public class ReflectTest {
 public static void main(String[] args)  throws  Exception
 {  
  
   
    Point pt=new Point(3,5);  //创建一个Point对象
    Field fx=pt.getClass().getField("x") ;  //获取x的映射类对象
    Field fy=pt.getClass().getDeclaredField("y");//因为y是私有的所以要调用这个方法 
    Method m2=Point.class.getDeclaredMethod("showPrivate") ;//获得私有方法映射类  
    
    //利用反射调用共有输出 
    m2.setAccessible(true)  ;// 修改showPrivate 权限 改变为可以调用
       m2.invoke(pt) ;//执行私有方法
    //利用成员反射输出x 和 私有的 y  
    System.out.println(fx.getInt(pt));//反射输出x  
    fy.setAccessible(true) ;//改变私有为可访问
    System.out.println(fy.getInt(pt));//输出私有y
        
    //替换成员后并且反射私有方法输出 
    changeString(pt) ;//反射替换成员值
     

你可能感兴趣的:(Java)