java反射调用私有方法和修改私有属性

时间:2023-03-09 22:53:58
java反射调用私有方法和修改私有属性
//调用私有方法
package com.java.test; public class PrivateMethod
{ private String sayHello(String name)
{
return "hello "+name;
}
}

测试:

package com.java.test;

import java.lang.reflect.Method;

public class PrivateMethodTest
{ public static void main(String[] args)throws Exception
{
PrivateMethod p = new PrivateMethod(); Class<?> classType = p.getClass(); Method method = classType.getDeclaredMethod("sayHello", new Class[]{String.class}); method.setAccessible(true);//压制java的检查机制 String str = (String)method.invoke(p, new Object[]{"lzyer"}); System.out.println(str);
}
}

修改私有属性:

package com.java.test;

public class PrivateField
{ private String name="zhangsan"; public String getName()
{ return this.name;
}
}

测试:

package com.java.test;

import java.lang.reflect.Field;

public class PrivateFieldTest
{ public static void main(String[] args)throws Exception
{
PrivateField p = new PrivateField(); Class<?> clazz = p.getClass(); Field field = clazz.getDeclaredField("name"); field.setAccessible(true);//压制java检查机制 field.set(p, "lisi"); System.out.println(p.getName());
}
}

  

  

  

相关文章