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