反射之IllegalAccessException、NoSuchFieldException

简介: 本文目录1. IllegalAccessException2. NoSuchFieldException

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可以获取私有、保护、公开属性。

相关文章
反射
何为反射?在运行状态时,对于任何一个类,都能够动态获取这个类得所有方法和属性(私有,公有,受保护),都能够调用任意一个方法和属性。
43 0
|
4月前
|
缓存 安全 Java
反射带来的问题
反射带来的问题
36 0
|
7月前
|
API C# 数据库
C#反射详解
C#反射详解
65 0
|
Java 数据库连接 数据库
JVAVEE反射
JVAVEE反射
54 0
|
存储 Java 索引
反射理解
个人对反射的学习理解与代码
74 0
|
缓存 前端开发 JavaScript
一起来学反射(上)
一起来学反射
102 0
|
设计模式 安全 Java
一起来学反射(下)
一起来学反射
101 0
|
Java
简单理解下反射是啥
《基础系列》
105 0
反射小练习
通过反射创建级联对象