微信
支付宝
# Java 反射字段访问 ## Java反射 - Java反射字段访问 我们可以使用反射在两个步骤中获取或设置字段。 - 获取字段的引用。 - 要读取字段的值,请在字段上调用getXxx()方法,其中Xxx是字段的数据类型。 - 要设置字段的值,请调用相应的setXxx()方法。 以相同的方式访问静态和实例字段。 ## 例子 \`\`\` import java.lang.reflect.Field; class MyClass { public String name = "Unknown"; public MyClass() { } public String toString() { return "name=" + this.name; } } public class Main { public static void main(String\[\] args) { Class ppClass = MyClass.class; try { MyClass p = ppClass.newInstance(); Field name = ppClass.getField("name"); String nameValue = (String) name.get(p); System.out.println("Current name is " + nameValue); name.set(p, "abc"); nameValue = (String) name.get(p); System.out.println("New name is " + nameValue); } catch (InstantiationException \| IllegalAccessException \| NoSuchFieldException \| SecurityException \| IllegalArgumentException e) { System.out.println(e.getMessage()); } } } \`\`\` 上面的代码生成以下结果。 !\[img\](https://atts.w3cschool.cn/attachments/jimg/java_reflection/EXAMPLE__8B3919ED931952C46F87.png) ## 绕过辅助功能检查 使用反射访问类的非可访问字段,方法和构造函数从\` AccessibleObject \`类调用\` setAccessible(boolean flag)\`方法。 我们需要使用true参数调用此方法,以使该字段,方法和构造函数可访问。 \`\`\` import java.lang.reflect.Field; class MyClass { private String name = "Unknown"; public MyClass() { } public String toString() { return "name=" + this.name; } } public class Main { public static void main(String\[\] args) { Class my = MyClass.class; try { MyClass p = my.newInstance(); Field nameField = my.getDeclaredField("name"); nameField.setAccessible(true); String nameValue = (String) nameField.get(p); System.out.println("Current name is " + nameValue); nameField.set(p, "abc"); nameValue = (String) nameField.get(p); System.out.println("New name is " + nameValue); } catch (InstantiationException \| IllegalAccessException \| NoSuchFieldException \| SecurityException \| IllegalArgumentException e) { System.out.println(e.getMessage()); } } } \`\`\` 上面的代码生成以下结果。 !\[img\](https://atts.w3cschool.cn/attachments/image/20170212/1486903019639549.png)
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Veylor
最近发布
常用SQL