1 package cn.tx.reflect;
2
3 import java.lang.reflect.Constructor;
4 import java.lang.reflect.Field;
5 import java.lang.reflect.Method;
6 import java.util.Arrays;
7 /**
8 * 二、获取一个类的Class对象的三种方式:
9 (1)知道类的全路径名:Class<?> clazz = Class.forName("类的全路径名");
10 (2)知道类的名字: Class<?> clazz = 类名.class;
11 (3)知道该类的一个对象 : Class<?> clazz = 对象名.getClass();
12 * @author Administrator
13 *
14 */
15 public class ReflectLearn2 {
16
17 private static String className = "java.lang.String";
18 public static void main(String[] args) throws Exception {
19
20 //根据类的名字获取类的Class对象
21 getClazzByClassName();
22 //根据对象获取Class对象,反射获取类的方法,属性,构造器
23 getCalzzByObject(new Person());
24 }
25
26 public static void getClazzByClassName(){
27 Class<?> clazz = Person.class;//类名.class获取类的Class对象
28 Method[] methods = clazz.getDeclaredMethods();
29 for (Method m : methods) {
30 System.out.println(m);
31 }
32 }
33
34 /**
35 * 根据类的对象获取Class对象
36 * @param obj
37 */
38 public static void getCalzzByObject(Object obj){
39 //Class<? extends Object>表示通过反射获取的对象的类型不确定,但是一定是Object类的子类
40 //等价于Class<?> clazz = obj.getClass();
41 Class<? extends Object> clazz = obj.getClass();
42 // 2.获得传递过来的类(上面的String类)的所有方法——目的就是为了调用获得的方法
43 System.out.println("----------------获取类的所有声明的方法-------------------");
44 Method[] methods = clazz.getDeclaredMethods();
45 for (Method m : methods) {
46 System.out.println(m);
47 }
48
49 // 3.获得类的所有声明的属性——目的:设置属性或者是获取属性值
50 System.out.println("-------------获得类的所有声明的属性---------------");
51 Field[] fields = clazz.getDeclaredFields();
52 for (Field field : fields) {
53 System.out.println(field);
54 }
55
56 // 4.获得类的所有构造器——创建对象
57 System.out.println("--------------获得类的所有构造器-----------------");
58 Constructor<?>[] constructors = clazz.getDeclaredConstructors();
59 for (Constructor<?> constructor : constructors) {
60 System.out.println(constructor);
61 }
62 }
63
64 }
65 /* getCalzzByObject(new Person());打印结果如下
66 * ----------获取Person类的信息-------------
67 public java.lang.String cn.tx.Person.toString()
68 public java.lang.String cn.tx.Person.getAddress()
69 public java.lang.String cn.tx.Person.getName()
70 public java.lang.Integer cn.tx.Person.getId()
71 public void cn.tx.Person.setName(java.lang.String)
72 public void cn.tx.Person.setId(java.lang.Integer)
73 public void cn.tx.Person.setAddress(java.lang.String)
74 -------------获得类的所有声明的属性---------------
75 private java.lang.Integer cn.tx.Person.id
76 private java.lang.String cn.tx.Person.name
77 private java.lang.String cn.tx.Person.address
78 --------------获得类的所有构造器--------------
79 public cn.tx.Person()
80 public cn.tx.Person(java.lang.Integer,java.lang.String,java.lang.String)
81 * */