为了保证面向对象的封装特性,同城会将域设置成私有的,然后提供对应的get和set方法。对于非内部类而言只能使用get和set方法来操作该域。然而利用反射机制,就可以在运行时修改类的私有域。
Field类提供有关类和接口的单个字段的信息,以及对他的动态访问权限。反射的字段可能是一个类的(静态)字段或实例字段。
Field类的常用字段
注意:对于私有域,一定要使用setAccessible()方法将其可见性设置为true才能设置新值
public class Test { public static void main(String[] args) { Student stu = new Student(); Class<?> cls = stu.getClass(); System.out.println("类的标准名称:" + cls.getCanonicalName()); try { Field id = cls.getDeclaredField("id"); System.out.println("设置前的id:" + stu.getId()); id.setAccessible(true); id.setInt(stu,10); System.out.println("设置后的id:" + stu.getId()); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } }
原文:https://www.cnblogs.com/cglib/p/11512675.html