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