一、通过反射获取运行时类的完整结构
Class 类中提供了大量实例方法来获取该 Class 对象所对应类的详细信息, Class 类大致包含如下几种方法,下面每种方法都可能包含多个重载的版本。
如:包、修饰符、类名、父类、父接口、注解、及成员(属性、构造器、方法)等。
反射相关的 API 主要是 java.lang.Class 和 java.lang.reflect 包的内容。
Field、 Method、 Constructor、 Superclass、 Interface、 Annotation
实现的全部接口
所继承的父类
全部的构造器
全部的方法
全部的Field
二、丰富结构的 Person 类
在这里提供具有丰富结构的 Person类,然后利用反射机制来获取 Person 类的信息。
(1)Creature<T> 包含泛型的父类
1 public class Creature<T> implements Serializable {
2 private char gender;
3 public double weight;
4
5 private void breath(){
6 System.out.println("生物呼吸");
7 }
8
9 public void eat(){
10 System.out.println("生物吃东西");
11 }
12
13 }
(2)MyInterface 自定义接口
1 public interface MyInterface {
2 void info();
3 }
(3)MyAnnotation 自定义注解
1 @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
2 @Retention(RetentionPolicy.RUNTIME)
3 public @interface MyAnnotation {
4 String value() default "hello";
5
6 }
(4)Person 类
1 @MyAnnotation(value="hi")
2 public class Person extends Creature<String> implements Comparable<String>,MyInterface{
3
4 private String name;
5 int age;
6 public int id;
7
8 public Person(){}
9
10 @MyAnnotation(value="abc")
11 private Person(String name){
12 this.name = name;
13 }
14
15 Person(String name,int age){
16 this.name = name;
17 this.age = age;
18 }
19 @MyAnnotation
20 private String show(String nation){
21 System.out.println("我的国籍是:" + nation);
22 return nation;
23 }
24
25 public String display(String interests,int age) throws NullPointerException,ClassCastException{
26 return interests + age;
27 }
28
29
30 @Override
31 public void info() {
32 System.out.println("我是一个人");
33 }
34
35 @Override
36 public int compareTo(String o) {
37 return 0;
38 }
39
40 private static void showDesc(){
41 System.out.println("我是一个可爱的人");
42 }
43
44 @Override
45 public String toString() {
46 return "Person{" +
47 "name='" + name + '\'' +
48 ", age=" + age +
49 ", id=" + id +
50 '}';
51 }
52 }
(5)
三、