1. IllegalAccessException
使用反射访问对象的私有属性,正常代码如下:
Field field = obj.getClass().getDeclaredField(fieldName);
field.setAccessible(true); // 设置对象的访问权限,保证对private的属性的访问
String result=(String) field.get(obj);
此时,如果没有写field.setAccessible(true);这一行代码,会导致IllegalAccessException异常,表示没有访问权限。
所以要通过添加field.setAccessible(true);,获取对私有属性的访问权限。
2. NoSuchFieldException
如果在编写代码时,将getDeclaredField写为getFeild,如下:
Field field = obj.getClass().getField(fieldName);
field.setAccessible(true); // 设置对象的访问权限,保证对private的属性的访问
String result=(String) field.get(obj);
则会产生NoSuchFieldException异常,表示没有相应属性,因为feildName字段是私有的,通过getFeild方法是获取不到的。
而getDeclaredField可以获取私有、保护、公开属性。