跟王老师学反射(四)Class类:从Class类中获取信息
主讲教师:王少华 QQ群号:483773664
学习内容
获得class类中的信息
根据我们以前学过的一个Java类有以下几部组成,如下代码所示
一、访问Class对应的类所包含的构造方法
(一)public Constructor<T> getConstructor(Class<?>... parameterTypes)
返回此Class对象所表示的类的指定public构造方法。
parameterTypes参数是按声明顺序标识该方法参数类型的Class对象的一个数组。
构造方法的参数类型与parameterTypes所指定的参数类型匹配
(二)、public Constructor<?>[] getConstructors()
返回此Class对象所表示的类的所有public构造方法
(三)public Constructor<?>[] getDeclaredConstructors()
返回此Class对象所表示的类的所有构造器,与构造器的访问级别无关
(四)getDeclaredConstructor(Class<?>... parameterTypes)
(一)public Constructor<T> getConstructor(Class<?>... parameterTypes)
返回此Class对象所表示的类的指定public构造方法。 parameterTypes参数是按声明顺序标识该方法参数类型的Class对象的一个数组。 构造方法的参数类型与parameterTypes所指定的参数类型匹配(二)、public Constructor<?>[] getConstructors()
返回此Class对象所表示的类的所有public构造方法(三)public Constructor<?>[] getDeclaredConstructors()
返回此Class对象所表示的类的所有构造器,与构造器的访问级别无关(四)getDeclaredConstructor(Class<?>... parameterTypes)
返回此Class对象所表示的类指定构造器,与构造器的访问级别无关
二、访问Class对应的类所包含的方法
(一)public Method getMethod(String name,
Class<?>... parameterTypes)
Class<?>... parameterTypes)
返回此Class对象所表示的类的指定public方法
name参数用于指定方法名称
params参数是按声明顺序标识该方法参数类型的Class对象的一个数组
(二)public Method[] getMethods()
数组类返回从 Object
类继承的所有(公共)方法。
(三)public Method getDeclaredMethod(String name,
Class<?>... parameterTypes)
返回此Class对象所表示的类的绽方法,与方法的访问级别无关
name - 方法名
parameterTypes - 参数数组
(四)public Method[] getDeclaredMethods()
返回此Class对象所表示的类的全部方法,与方法的访问级别无关
三、访问Class对应的类所包含的属性
(一)public Field getField(String name)
返回此Class对象所表示的类的指定的public属性
name:指定属性名称
(二)public Field[] getFields()
返回此Class对象所表示的类的所有public属性
(三)public Field getDeclaredField(String name)
返回此Class对象所表示的类的指定属性,与属性访问级别无关
(四)public Field[] getDeclaredFields()
返回此Class对象所表示的类的全部属性,与属性访问级别无关
四、访问Class对应的类上所包含的注释
关于注释的内容,我们将在下一章给大家作详细讲解,这里只介绍API中的访问。
(一)public <A extends Annotation> A getAnnotation(Class<A> annotationClass)
试图获取该Class对象所表示类上指定类型的注释,如果该类型的注释不存在,则返回null
(二)public Annotation[] getAnnotations()
返回此元素上存在的所有注释
(三)public Annotation[] getDeclaredAnnotations()
返回直接存在于此元素上的所有注释
五、访问Class对象对应类包含的内部类
(一)public Class<?>[] getDeclaredClasses()
返回该Class对象所对应类里包含的全部内部类。
六、访问该Class对象对应类所在的外部类
(一)public Class<?> getDeclaringClass()
返回该Class对象所对应类所在的外部类
1 2 3 |
|
备注:访问外部类和内部类的方法名称的区别
七、访问该Class对象所对应类所继承的父类、所实现的接口
(一)public Class<?>[] getInterfaces()
返回该Class对象对应类所实现的全部接口
(二)public int getModifiers()
返回此类或接口的所有修饰符。修饰符由public、protected、private、final、static、abstract等对应的常量组成,返回整数应使用Mofifier工具类的方法来解码,才可以获取真实的修饰符。
(三)public Package getPackage()
获取此类的包
(四)public String getName()
以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
(五)public String getSimpleName()
以字符串形式返回此Class对象所表示的类的简称(六)public Class<? super T> getSuperclass()
返回该Class所表示的类的超类对应的Class对象八、判断Class对象对应的类是否为接口、枚举、注释类型
(一)public boolean isAnnotation()
如果此类对象表示一个注释类型,则返回 true;否则返回 false(二)public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
判断此Class对象是否使用了Annotation注释修饰(三)public boolean isAnonymousClass()
返回此Class对象是否是一个匿名类(四)public boolean isArray()
返回此Class对象是事表示一个数组类(五)public boolean isEnum()
返回此Class对象是否是一个枚举
(六)public boolean isInterface()
判定指定的
Class
对象是否表示一个接口类型。(七)public boolean isInstance(Object obj)
判断obj是否是此Class对象的实现,该方法可以完全代替instanceof操作符
九、练习
这节课我们学习很多方法,如果一时记不住也没有关系,要养成使用api的习惯。
(一)需求:获取Person的信息
在控制台输出Person类的详细信息,包括全部方法、属性、指定方法和属性、全部及指定多个参数的构造方法、内部类、外部类、父类、所在包。
(二)Person类