package me.test;
import java.lang.reflect.*; //导入反射需要的包
public class ReflectTest {
public static void main(String[] args) throws Exception
{
/* 下面通过反射完成对一个对象中成员的替换
* 并且执行执行私有方法
* 完成对 Poiont类的对象中所有的 String的对象的d换成x
* 并且类中无修改方法
*/
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) ;//反射替换成员值
System.out.println(pt);
}
public static void changeString(Object obj) throws Exception//反射替换对所有String进行替换
{
Field[] f=obj.getClass().getFields() ; //获得成员映射数组
for(Field tem : f) //迭代for循环
{
if(tem.getType()==String.class) //内存中只有一份String字节码
{
String oldString=(String)tem.get(obj) ; //返回内容
String newString=oldString.replace('d', 'x');//将所有b替换为x
tem.setAccessible(true);
tem.set(obj, newString) ;//替换成员值
}
}
}
}
public class Point
{
public int x ;
private int y ;
public Point(int x, int y) {
super();
this.x = x;
this.y = y;
}
public String a="dsfdsfd" ; //只有 共有可以替换
public String b="fdsfdsfewewwwww" ;
public String c="adddssss" ;
private void showPrivate() //私有方法输出
{
System.out.println("x="+this.x+"\n"+"y="+this.y);
System.out.println(this.a);
System.out.println(this.b);
System.out.println(this.c);
}
public String toString()
{
return this.a+"\n"+this.b+"\n"+this.c;
}
}
分享到:
相关推荐
java 反射 调用私有方法(有参数私有方法)获取私有属性值
Java反射机制,万物皆对象,class也是一个类的对象,通过类类型,反射获得类的成员属性,构造方法,成员方法,并调用类中的方法,也可以调用私有方法。
Java反射 调用空参方法 调用Object类型参数的方法 调用基本类型参数的方法 调用基本类型数组参数的方法 调用String数组参数的方法 调用Object数组参数的方法 调用私有方法
编写Student类,类中包含学生姓名,学号等私有数据成员。 使用JAVA反射机制修改一个学生对象的私有数据成员(不允许调用setters)
利用自定义数据可以把单个的私有成员打包,然后将外部变量的地址指向类内部的私有成员数据地址,就可以实现修改外部变量的同时,类内部的私有成员数据也发生了变化。从而实现了类内部私有成员的数据可以直接操作的...
Java 反射详解(包含私有方法属性的调用)
使用JAVA反射机制动态调用 计算器对象的加法,减法函数。 使用JAVA反射机制修改一个学生对象 的私有数据成员(不允许调用setters) 使用的类有Class, Method, Field
Method,invoke,getMethod等反射私有方法和私有属性
使用Java反射机制动调用计算器的加法,加法函数 使用Java反射机制修改一个学生对象的私有数据成员
C#私有成员反射调用类库
介绍一篇关于PHP通过反射方法调用执行类中的私有方法,希望这篇教程能够帮助到各位朋友,有兴趣的可以进来看看。具有完整的反射 API,添加了对类、接口、函数、方法和扩展进行反向工程的能力。
通过Java反射调用方法,适合初级自学者,通俗易懂
基于java的开发源码-brap(Java远程调用框架 BRAP).zip 基于java的开发源码-brap(Java远程调用框架 BRAP).zip 基于java的开发源码-brap(Java远程调用框架 BRAP).zip 基于java的开发源码-brap(Java远程调用框架 BRAP)....
JUnit4利用反射机制测试类的私有成员
Java试题-5:应用反射创建对象,调用对象方法 反射为Java的高级技术应用
java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名。本项目为普通java项目
反射,动态加载指定类调用类中的方法 简单例子
Java 反射创建get set方法及反射方法的调用
通过java类的路径实例化类并调用方法:仅仅知道类的路径,就可以实例化对象,利用反射机制调用其方法