本文主要就是通过实例介绍如何通过Java类对象获取字段或方法相关信息,以及不同方式的对比,因为自己写了实例,想着就用个博文记录下吧!
一、字段
(1)getFields()
获得某个类的所有的公共(public)的字段,包括父类中的字段。
(2)getDeclaredFields()
获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段。
二、方法
(1)getMethods()
获取自身能用所有的公共方法。
1.类本身的public
2.继承父类的public
3.实现接口的
(2)getDeclaredMethods()
获取类自身声明的所有方法。
三、实例
public interface Farther {
void learn();
}
public class Son implements Farther{
private String name;
private Integer age;
@Override
public void learn() {
}
public void job(){
}
private void jobs(){
}
}
public class MyTest {
public static void main(String[] args) {
Field[] fields = Farther.class.getFields();
System.out.println("fields的数量:" + fields.length);
List<Field> list = Arrays.asList(fields);
list.parallelStream().forEach(field -> {
System.out.println("字段名:" + field.getName());
});
System.out.println("------------------------------");
Method[] methods = Farther.class.getMethods();
System.out.println("methods的数量:" + methods.length);
List<Method> lists = Arrays.asList(methods);
lists.parallelStream().forEach(method -> {
System.out.println("方法名:" + method.getName());
});
}
}
做了如下四种测试,结果如下:
(1)接口的getFields()和getMethods()
fields的数量:0
------------------------------
methods的数量:1
方法名:learn
(2)实现类的getFields()和getMethods()
fields的数量:0
------------------------------
methods的数量:11
方法名:toString
方法名:hashCode
方法名:equals
方法名:notify
方法名:notifyAll
方法名:getClass
方法名:wait
方法名:wait
方法名:wait
方法名:learn
方法名:job
(3)接口的getDeclaredFields()和getDeclaredMethods()
fields的数量:0
------------------------------
methods的数量:1
方法名:learn
(4)实现类的getDeclaredFields()和getDeclaredMethods()
fields的数量:2
字段名:age
字段名:name
------------------------------
methods的数量:3
方法名:job
方法名:jobs
方法名:learn