Java反射之获取类的信息

转自:https://blog.csdn.net/TimHeath/article/details/53305528

1. 获取Class对象

要想解剖一个类,得先获得它,一个类是用类Class描述的,所以一个类就是一个Class对象,下面有三种方法可以获取一个类的Class对象。此处获取Person类的Class对象,假设Person的全限定类名为edu.jyu.reflect.Person。

  1. Class类的forName()静态方法,Class clazz = Class.forName(“edu.jyu.reflect.Person”);
  2. 调用某个类的class属性,Class clazz = Person.class;
  3. 调用每个类的实例对象的getClass()方法,Class clazz = new Person().getClass();

2. 获取构造函数

类的构造方法,是用java.lang.reflect包中的类Constructor表示的,获取一个类的构造函数,有以下几个方法

  1. Constructor[] getDeclaredConstructors();返回已加载类声明的所有的构造方法(包括private修饰)的Constructor 对象数组.
  2. Constructor getDeclaredConstructor(Class[] paramTypes);返回已加载类声明的指定构造方法的Constructor 对象,paramTypes指定了参数类型.
  3. Constructor[] getConstructors();返回已加载类声明的所有的 public类型的构 
    造方法的Constructor 对象数组.
  4. Constructor getConstructor(Class[] paramTypes);返回已加载类声明的指定 
    的public类型的构造方法的Constructor对象,paramTypes指定了参数类型

3. 获取字段

类的字段,是用java.lang.reflect包中的类Field表示的,获取一个类的字段,有以下几个方法

  1. Field[] getDeclaredFields():返回已加载类声明的所有字段的Field对象数 
    组,不包括从父类继承的字段.
  2. Field getDeclaredField(String name):返回已加载类声明的所有字段的 
    Field对象,不包括从父类继承的字段,参数name指定字段的名称.
  3. Field[] getFields():返回已加载类声明的所有public型的字段的Field对象 
    数组,包括从父类继承的字段
  4. Field getField(String name):返回已加载类声明的所有字段的 Field对象, 
    包括从父类继承的字段,参数name指定字段的名称

4. 获取方法

类的方法,是用java.lang.reflect包中的类Method表示的,获取一个类的方法,有以下几个方法

  1. Method[] getDeclaredMethods():返回已加载类声明的所有方法的 Method 对象数组,不包括从父类继承的方法.
  2. Method getDeclaredMethod(String name,Class[] paramTypes):返回已加载类声明的所有方法的 Method对象,不包括从父类继承的方法,参数name指定方 
    法的名称,参数 paramTypes指定方法的参数类型.
  3. Method[] getMethods():返回已加载类声明的所有方法的Method对象数组,包 
    括从父类继承的方法.
  4. Method getMethod(String name,Class[] paramTypes):返回已加载类声明的 
    所有方法的Method对象,包括从父类继承的方法,参数name指定方法的名称,参 
    数paramTypes指定方法的参数类型

大家可以观察到,获取类方法的这几个方法与获取类的字段十分相像,所以在此便不再多解释了。

5. 获取其它信息

当你得到一个类的Class对象的时候,基本上你就可以获取它的全部信息了,除了构造方法,字段,方法外还有一些类的包名、父类等等信息,如下面这几种。

  1. int getModifiers():返回已加载类的修饰符的整形标识值.
  2. Package getPackage():返回已加载类的包名
  3. Class getSuperclass():返回已加载类的父类的 Class实例.
  4. Class [] getInterfaces():返回已加载类实现的接口的 Class对象数组.
  5. boolean isInterface():返回已加载类是否是接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值