通过反射突破访问修饰符,调用private私有的方法
生活随笔
收集整理的這篇文章主要介紹了
通过反射突破访问修饰符,调用private私有的方法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
import operate425.demo.demo1.Student;import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;/*** 通過反射突破訪問修飾符,調(diào)用private私有的方法** @author silence*/
public class ClassMethod {public static void main(String[] args) throws Exception {//獲得class字節(jié)碼文件Class<Student> clazz = Student.class;//調(diào)用私有無參無返回值的方法//method1(clazz);//調(diào)用私有有參有返回值的方法//method2(clazz);//調(diào)用公共的有參無返回值的方法//method3(clazz);//調(diào)用私有無參有返回值的方法// method4(clazz);//獲取所有的公共的方法,包括父類的方法// method5(clazz);//獲取所有的公共的和私有的方法 不包含父類的方法//method6(clazz);}private static void method6(Class<Student> clazz) {Method[] declaredMethods = clazz.getDeclaredMethods();for (Method declaredMethod : declaredMethods) {System.out.println(declaredMethod);}}/*** 獲取公共的方法,包括父類的方法** @param clazz clazz*/private static void method5(Class<Student> clazz) {Method[] methods = clazz.getMethods();for (Method method : methods) {System.out.println(method);}}/*** 調(diào)用私有無參有返回值的方法** @param clazz clazz*/private static void method4(Class<Student> clazz) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {Method privatemethod = clazz.getDeclaredMethod("privatemethod");privatemethod.setAccessible(true);String invoke = (String) privatemethod.invoke(new Student());System.out.println(invoke);}/*** 調(diào)用公共的有參無返回值的方法*/private static void method3(Class<Student> clazz) throws Exception {//獲得單個公共方法引用,方法名, 參數(shù)類型Method setboolean = clazz.getMethod("setboolean", boolean.class);setboolean.invoke(new Student(), true);}/*** 調(diào)用私有有參有返回值的方法*/private static void method2(Class<Student> clazz) throws Exception {//獲得對象引用Method getmethod1 = clazz.getDeclaredMethod("getmethod1", String.class);//臨時修改訪問修飾符限制getmethod1.setAccessible(true);//對象引用 和方法實參 這里對象引用直接new的一個新對象Object invoke = getmethod1.invoke(new Student(), "反射實參");//接收輸出返回值System.out.println(invoke);}/*** 調(diào)用私有無參無返回值的方法** @param clazz clazz* @throws Exception Exception*/private static void method1(Class<Student> clazz) throws Exception {//通過反射創(chuàng)建一個對象 這里獲取一個私有的有參數(shù)的Constructor<Student> constructor = clazz.getDeclaredConstructor(int.class);constructor.setAccessible(true);//創(chuàng)建對象需要傳實參Student student = constructor.newInstance(23);//獲取一個參數(shù)引用, 獲取一個私有的 參數(shù)名,和參數(shù)類型Method getmethod1 = clazz.getDeclaredMethod("getmethod1");//私有的方法被調(diào)用也需要修改訪問修飾符權(quán)限getmethod1.setAccessible(true);//對象引用,和實參getmethod1.invoke(student);}
}
總結(jié)
以上是生活随笔為你收集整理的通过反射突破访问修饰符,调用private私有的方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 民生小白卡开卡礼 权益享不停
- 下一篇: 白户办信用卡最多能批多少 额度普遍在一万