黑马程序员-JAVA学习之反射getDeclaredField()方法与getField()方法的区别
2014-09-24 14:17
666 查看
--------android培训、java培训、期待与你交流!--------
在使用反射的时候,常用到的几个方法老是傻傻的分不清楚是干吗的,功能差不多的啊,
比如:
Class.getFields(), Class.getField(String), Class.getDeclaredFields(), Class.getDeclaredField(String)
和
Class.getMethods(), Class.getMethod(String, Class[]), Class.getDeclaredMethods(), Class.getDeclaredMethod(String, Class[])
主要的就是有没有Declared单词的区别,
经过仔细研究有Declared单词的是获取的是某个类自己定义的成员,包括公开的,私有的,保护的等等的字段或方法,
如果没有Declared单词的一般都是获取某个类所拥有的所有公开的成员,包括自己定义的和继承下来的公开成员,如公开的字段和继承的公开的方法.
如以下代码所示:
上面的代码中,有两个类一个是父类Person,一个是子类Student分别都有一些公开的和私有的字段,方法略.其中子类还有从父类继承过来的两个公开字段
在测试代码中,都是分别调用getFields()和getDeclaredFields(),关打印结果,结果如下:
![](http://images.cnitblog.com/blog/582263/201409/241414421706062.png)
这里有一个测试题目,也是用到这个字段的用法,之前没有深入研究的时候可是纠结了我好久啊
需求是:
写一个方法,此方法可将obj对象中名为propertyName的属性的值设置为value.
public void setProperty(Object obj, String propertyName, Object value){ /*一些实现代码*/}
对应是答案是:
没事代码还是要多多敲才有用啊.
在使用反射的时候,常用到的几个方法老是傻傻的分不清楚是干吗的,功能差不多的啊,
比如:
Class.getFields(), Class.getField(String), Class.getDeclaredFields(), Class.getDeclaredField(String)
和
Class.getMethods(), Class.getMethod(String, Class[]), Class.getDeclaredMethods(), Class.getDeclaredMethod(String, Class[])
主要的就是有没有Declared单词的区别,
经过仔细研究有Declared单词的是获取的是某个类自己定义的成员,包括公开的,私有的,保护的等等的字段或方法,
如果没有Declared单词的一般都是获取某个类所拥有的所有公开的成员,包括自己定义的和继承下来的公开成员,如公开的字段和继承的公开的方法.
如以下代码所示:
import java.lang.reflect.*; public class Test2 { public static void main(String[] args) throws Exception { Person p = new Person();// 实例化一个父类 Field[] pf1 = p.getClass().getFields();// getFields()方法获取所表示的类或接口的所有可访问公共字段。包括继承过来的可访问公共字段 show(pf1); Field[] pf2 = p.getClass().getDeclaredFields();// getDeclaredFields()方法获取对象所表示的类或接口所声明的所有字段。包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。 show(pf2); Student s = new Student();// 实例化一个子类 Field[] pf3 = s.getClass().getFields();// getFields()方法获取所表示的类或接口的所有可访问公共字段。包括继承过来的可访问公共字段 show(pf3); Field[] pf4 = s.getClass().getDeclaredFields();// getDeclaredFields()方法获取对象所表示的类或接口所声明的所有字段。包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。 show(pf4); } // 方便打印的方法 public static void show(Field[] fields) { for (Field f : fields) { System.out.println(f); } System.out.println("----------------------"); } } // 父类 class Person { private String name; private String sex; private String address; public String school; public String zip; } // 子类 class Student extends Person { private String code; private String classmate; public String teacher; public String desk; }
上面的代码中,有两个类一个是父类Person,一个是子类Student分别都有一些公开的和私有的字段,方法略.其中子类还有从父类继承过来的两个公开字段
在测试代码中,都是分别调用getFields()和getDeclaredFields(),关打印结果,结果如下:
![](http://images.cnitblog.com/blog/582263/201409/241414421706062.png)
这里有一个测试题目,也是用到这个字段的用法,之前没有深入研究的时候可是纠结了我好久啊
需求是:
写一个方法,此方法可将obj对象中名为propertyName的属性的值设置为value.
public void setProperty(Object obj, String propertyName, Object value){ /*一些实现代码*/}
对应是答案是:
public static void setProperty(Object object,String propertyName,Object value) throws Exception { Class<?> c=object.getClass(); Field f=c.getDeclaredField(propertyName);//取得这个类自己定义的所有公开的私有的字段,但是不包括继承的字段 f.setAccessible(true); f.set(object,value); } //在这里我们用getDeclaredField()方法在这个类自己定义的所有字段,但是不包括继承的字段中查找名字为形参"propertyName"的字段,然后给这个字段重新赋值.
没事代码还是要多多敲才有用啊.
相关文章推荐
- java反射getDeclaredField和getField的区别
- Java反射之getDeclaredField和getField的区别
- java反射中getDeclaredField和getField的区别
- java 反射 getDeclaredField和getField的区别
- Java 反射机制中 getMethod()和getDeclaredField()区别
- Java 反射机制中 getMethod()和getDeclaredField()区别
- Java 反射机制中 getMethod()和getDeclaredField()区别
- Java 反射机制中 getMethod()和getDeclaredField()区别
- JAVA反射中的getFields()方法和getDeclaredFields ()方法的区别 关于获取类的字段有两种方式:getFields()和getDeclaredFields()
- JAVA反射中的getFields()方法和getDeclaredFields ()方法的区别
- JAVA反射中的getFields()方法和getDeclaredFields ()方法的区别
- Java 反射机制中 getMethod()和getDeclaredField()区别
- JAVA反射中的getFields()方法和getDeclaredFields ()方法的区别
- JAVA反射中的getFields()方法和getDeclaredFields ()方法的区别
- Java反射代码 得到某类的所有字段 getFields()与getDeclaredFields()区别 getMethod()和getDeclaredMethod()区别
- 黑马程序员——【Java反射学习】方法的反射/成员变量的反射/构造函数的反射
- Java 反照机制中 getMethod()和getDeclaredField()区别
- Java反射学习(利用反射遍历链表并执行所有对象的所有get方法)
- Java反射 getFields()和getDeclaredFields()的区别
- java反射中getDeclaredMethods和getMethods的区别