在使用反射的时候,常用到的几个方法老是傻傻的分不清楚是干吗的,功能差不多的啊,
比如:
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 classTest2
{public static voidmain(String[] args) throws Exception
{
Person p= new Person();//实例化一个父类
Field[] pf1= p.getClass().getFields();//getFields()方法获取所表示的类或接口的所有可访问公共字段。包括继承过来的可访问公共字段
show(pf1);
Field[] pf2= p.getClass().getDeclaredFields();//getDeclaredFields()方法获取对象所表示的类或接口所声明的所有字段。包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。
show(p