700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 通过反射突破private访问修饰符获取私有和公共的属性 设置和获取值

通过反射突破private访问修饰符获取私有和公共的属性 设置和获取值

时间:2022-02-04 21:36:35

相关推荐

通过反射突破private访问修饰符获取私有和公共的属性 设置和获取值

import operate425.demo.demo1.Student;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;/*** 通过反射突破private访问修饰符获取私有和公共的属性,设置和获取值** @author silence*/public class ClassFile {public static void main(String[] args) throws Exception {//获得字节码文件Class<?> clazz = Class.forName("operate425.demo.demo1.Student");// 通过私有的构造,获取类 私有的单个属性值// method1(clazz);//获取公共的属性值 设置value 并获取值// method2(clazz);//获取所有的公共属性// method3(clazz);// 获取所有公共的和私有的属性// method4(clazz);}/*** 获取所有公共的和私有的属性** @param clazz clazz*/private static void method4(Class<?> clazz) {Field[] declaredFields = clazz.getDeclaredFields();for (Field df : declaredFields) {System.out.println(df);}}/*** 获取所有的公共属性** @param clazz clazz*/private static void method3(Class<?> clazz) {Field[] fields = clazz.getFields();for (Field f : fields) {System.out.println(f);}}/*** 获取公共的值** @param clazz clazz*/private static void method2(Class<?> clazz) throws NoSuchFieldException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {//通过公共的带参构造器获得构造引用Constructor<?> constructor = clazz.getConstructor(String.class);//创建对象Student student = (Student) constructor.newInstance("张三");//获取属性值的对象引用Field password = clazz.getField("passwrod");//给属性设置值password.set(student, "这里是我设置的密码");//获取属性值String pas = (String) password.get(student);System.out.println(pas);}/*** 通过私有的构造,获取类 私有的属性值** @param clazz clazz* @throws Exception Exception*/private static void method1(Class<?> clazz) throws Exception {//获得私有无参构造器Constructor<?> constructor = clazz.getDeclaredConstructor();//私有的构造器必须临时修改访问修饰符检测constructor.setAccessible(true);//通过构造器创建对象Student student = (Student) constructor.newInstance();//通过属性名, 获得属性引用Field username = clazz.getDeclaredField("username");//调用私有的属性 必须临时修改访问修饰符检测username.setAccessible(true);//获得属性应用的值String name = (String) username.get(student);//输出System.out.println(name);}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。