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

2022-09-04 12:17:23

1 packagecn.tx.reflect;2

3 importjava.lang.reflect.Constructor;4 importjava.lang.reflect.Field;5 importjava.lang.reflect.Method;6 importjava.util.Arrays;7 /**

8 * 二、获取一个类的Class对象的三种方式:9 (1)知道类的全路径名:Class> clazz = Class.forName("类的全路径名");10 (2)知道类的名字: Class> clazz = 类名.class;11 (3)知道该类的一个对象 : Class> clazz = 对象名.getClass();12 *@authorAdministrator13 *14 */

15 public classReflectLearn2 {16

17 private static String className = "java.lang.String";18 public static void main(String[] args) throwsException {19

20 //根据类的名字获取类的Class对象

21 getClazzByClassName();22 //根据对象获取Class对象,反射获取类的方法,属性,构造器

23 getCalzzByObject(newPerson());24 }25

26 public static voidgetClazzByClassName(){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 *@paramobj37 */

38 public static voidgetCalzzByObject(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.id76 private java.lang.String cn.tx.Person.name77 private java.lang.String cn.tx.Person.address78 --------------获得类的所有构造器--------------79 public cn.tx.Person()80 public cn.tx.Person(java.lang.Integer,java.lang.String,java.lang.String)81 **/

  • 作者:芒果潔
  • 原文链接:https://blog.csdn.net/weixin_31140599/article/details/114219793
    更新时间:2022-09-04 12:17:23