Java反射学习-2 - 获取Class对象的三种方式

 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  * */

 

posted @ 2018-06-04 20:59  清风拂来  阅读(2629)  评论(0编辑  收藏  举报