黑马程序员技术交流社区

标题: Field的问题 [打印本页]

作者: 清心玉质    时间: 2013-8-21 10:19
标题: Field的问题
本帖最后由 清心玉质 于 2013-8-21 15:19 编辑

getDeclaredField和getFiled有什么区别
作者: 薛淑凯    时间: 2013-8-21 10:30
前者可以获得私有的东西  method和 Constructor都有对应的两个方法
作者: 胡智    时间: 2013-8-21 11:01
getFiled只能获取公共的成员变量。
getDeclaredField可以获取所有声明的成员变量。
反射里面你只要看到没加Declared这个单词的就都只能获取被public修饰的成员、构造函数。
作者: 黑马-文鸿利    时间: 2013-8-21 11:24
其中getField用于返回一个指定名称的属性,但是这个属性必须是公有的,这个属性可以在父类中定义。如果是私有属性或者是保护属性,那么都会抛出异常提示找不到这个属性。getFields则是返回类型中的所有公有属性,所有的私有属性和保护属性都找不到。getDeclaredField获得在这个类型的声明中定义的指定名称的属性,这个属性必须是在这个类型的声明中定义,但可以使私有和保护的。getDeclaredFields获得在这个类型的声明中定义的所有属性,包括私有和保护的属性都会被返回,但是所有父类的属性都不会被返回。
作者: 清心玉质    时间: 2013-8-21 12:14
薛淑凯 发表于 2013-8-21 10:30
前者可以获得私有的东西  method和 Constructor都有对应的两个方法

不能获取私有的吧,我试验了一下怎么不能获取呢
作者: 吴光新    时间: 2013-8-21 13:07
清心玉质 发表于 2013-8-21 12:14
不能获取私有的吧,我试验了一下怎么不能获取呢

那就要暴力反射,加上setAccessible(true) 该方法取消字段的权限检查,然后就可以反射私有成员变量了
作者: 坚持远方    时间: 2013-8-21 14:04
getDeclaredField:获取字节码文件中的所有字段,包括私有的,但是当你使用的时候,必须通过setAccessible方法对其访问设置为true之后,就可以对该私有对象进行获取和设置了
getFiled :只能获取公共的字段





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2