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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM