Java反射API研究(4)——Class中的重要对象
一、Constructor与Method的父类:Executable
Executable表示一个可执行类,构造方法与普通方法都是Executable
| AnnotatedType[] | getAnnotatedExceptionTypes() | |
| AnnotatedType[] | getAnnotatedParameterTypes() | |
| AnnotatedType | getAnnotatedReceiverType() | |
| abstract AnnotatedType | getAnnotatedReturnType() | |
| <T extends Annotation> T | getAnnotation(Class<T> annotationClass) | |
| <T extends Annotation> T[] | getAnnotationsByType(Class<T> annotationClass) | |
| Annotation[] | getDeclaredAnnotations() | |
| abstract Class<?> | getDeclaringClass() | 返回 Class 对象,该对象表示声明由此Executable对象表示的类。 |
| abstract Class<?>[] | getExceptionTypes() | 返回一组表示声明要抛出的异常类型的 Class 对象,这些异常是由此Executable对象表示的底层方法抛出的。 |
| Type[] | getGenericExceptionTypes() | 返回一组 Type 对象,这些对象表示声明要由此Executable对象抛出的异常。 |
| Type[] | getGenericParameterTypes() | 按照声明顺序返回一组 Type 对象,这些对象表示此Executable对象所表示的方法的形参类型。 |
| abstract int | getModifiers() | 以整数形式返回此Executable对象所表示构造方法的 Java 语言修饰符。 |
| abstract String | getName() | 以字符串形式返回此构造方法的名称。 |
| abstract Annotation[][] | getParameterAnnotations() | 按照声明顺序返回一组数组,这些数组表示通过此Executable对象表示的方法的形参上的注释。 |
| int | getParameterCount() | 返回参数数量 |
| Parameter[] | getParameters() | 返回该Executable对象上所有的参数对象 |
| abstract Class<?>[] | getParameterTypes() | 按照声明顺序返回一组Class对象,这些对象表示此Executable对象所表示构造方法的形参类型。 |
| abstract TypeVariable<?>[] | getTypeParameters() | 按照声明顺序返回一组 TypeVariable 对象,这些对象表示通过此 GenericDeclaration 对象所表示的一般声明来声明的类型变量。 |
| boolean | isSynthetic() | 如果此Executable是一个复合方法,则返回 true;否则返回 false。 |
| boolean | isVarArgs() | 如果声明此构造方法可以带可变数量的参数,则返回 true;否则返回 false。 |
| abstract String | toGenericString() | 返回描述此Executable的字符串,其中包括类型参数。 |
二、Constructor<T>
| Constructor<T> | ||
| boolean | equals(Object obj) | |
| AnnotatedType | getAnnotatedReceiverType() | |
| AnnotatedType | getAnnotatedReturnType() | |
| <T extends Annotation> T | getAnnotation(Class<T> annotationClass) | |
| Annotation[] | getDeclaredAnnotations() | |
| Class<T> | getDeclaringClass() | |
| Class<?>[] | getExceptionTypes() | |
| Type[] | getGenericExceptionTypes() | |
| Type[] | getGenericParameterTypes() | |
| int | getModifiers() | |
| String | getName() | |
| Annotation[][] | getParameterAnnotations() | |
| int | getParameterCount() | |
| Class<?>[] | getParameterTypes() | |
| TypeVariable<Constructor<T>>[] | getTypeParameters() | |
| int | hashCode() | |
| boolean | isSynthetic() | |
| boolean | isVarArgs() | |
| T | newInstance(Object... initargs) | 使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。 |
| String | toGenericString() | 返回描述此 Constructor 的字符串,其中包括类型参数。 |
类的构造器对象,通过Class对象的getConstructors()、getConstructor(Class<?>... parameterTypes)(只返回public的构造方法),getDeclaredConstructor(Class<?>... parameterTypes)、getDeclaredConstructors()(可包括非public构造方法)获取。
重要方法是newInstance(Object... initargs),这个可以用于调用非默认构造方法来创建该类的实例。
对于不可访问的非public方法,可以调用父类AccessibleObject的setAccessible(boolean flag) 方法来强制访问。
三、Method
| boolean | equals(Object obj) | |
| AnnotatedType | getAnnotatedReturnType() | |
| <T extends Annotation> T | getAnnotation(Class<T> annotationClass) | |
| Annotation[] | getDeclaredAnnotations() | |
| Class<?> | getDeclaringClass() | |
| Object | getDefaultValue() | 返回由此 Method 实例表示的注释成员的默认值。 |
| Class<?>[] | getExceptionTypes() | |
| Type[] | getGenericExceptionTypes() | |
| Type[] | getGenericParameterTypes() | |
| Type | getGenericReturnType() | 返回表示由此 Method 对象所表示方法的正式返回类型的 Type 对象。 |
| int | getModifiers() | |
| String | getName() | |
| Annotation[][] | getParameterAnnotations() | |
| int | getParameterCount() | |
| Class<?>[] | getParameterTypes() | |
| Class<?> | getReturnType() | 返回一个Class对象,该对象描述了此Method对象所表示的方法的正式返回类型。 |
| TypeVariable<Method>[] | getTypeParameters() | |
| int | hashCode() | |
| Object | invoke(Object obj, Object... args) | 对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。 |
| boolean | isBridge() | 如果此方法是 bridge 方法,则返回 true;否则,返回 false。 |
| boolean | isDefault() | 是否是默认方法,对应于接口中的默认方法。 |
| boolean | isSynthetic() | |
| boolean | isVarArgs() | |
| String | toGenericString() | |
关注其中的invoke(Object obj, Object... args)方法,第一个是要调用这个方法的对象,剩下的方法的参数,返回值就是该函数的返回值。
通过Class对象的getMethod(String name, Class<?>... parameterTypes)、getMethods()(包含继承的public方法)、getDeclaredMethod(String name, Class<?>... parameterTypes)、getDeclaredMethods()(不包含继承的方法,但包含非public方法)来返回该类的Method对象。
同样可调用setAccessible(boolean flag)来强制调用非public方法。
四、函数的参数Parameter对象
| boolean | equals(Object obj) | |
| AnnotatedType | getAnnotatedType() | |
| <T extends Annotation> T | getAnnotation(Class<T> annotationClass) | |
| Annotation[] | getAnnotations() | |
| <T extends Annotation> T[] | getAnnotationsByType(Class<T> annotationClass) | |
| <T extends Annotation> T | getDeclaredAnnotation(Class<T> annotationClass) | |
| Annotation[] | getDeclaredAnnotations() | |
| <T extends Annotation> T[] | getDeclaredAnnotationsByType(Class<T> annotationClass) | |
| Executable | getDeclaringExecutable() | 返回该参数所在的Executable对象 |
| int | getModifiers() | 返回该参数的标识符 |
| String | getName() | 返回该参数的名称 |
| Type | getParameterizedType() | 返回参数化类型 |
| Class<?> | getType() | 返回该参数的Class |
| int | hashCode() | |
| boolean | isImplicit() | 如果该参数在代码中是隐式声明的,则返回true,否则false。 |
| boolean | isNamePresent() | 该参数的名称是否保存在class文件中,需要编译时加参数-parameter |
| boolean | isSynthetic() | |
| boolean | isVarArgs() | |
调用Executable对象的getParameters()方法来返回该可执行对象上的所有参数列表。
五、Field对象
表示一个类中的属性
| boolean | equals(Object obj) | |
| Object | get(Object obj) | 返回指定对象上此 Field 表示的字段的值。 |
| AnnotatedType | getAnnotatedType() | |
| <T extends Annotation> T | getAnnotation(Class<T> annotationClass) | |
| <T extends Annotation> T[] | getAnnotationsByType(Class<T> annotationClass) | |
| T | getT(Object obj) | 获取一个静态或实例T类型的值。 |
| Annotation[] | getDeclaredAnnotations() | |
| Class<?> | getDeclaringClass() | |
| Type | getGenericType() | |
| int | getModifiers() | |
| String | getName() | |
| Class<?> | getType() | 返回一个 Class 对象,它标识了此 Field 对象所表示字段的声明类型。 |
| int | hashCode() | |
| boolean | isEnumConstant() | 如果此字段表示枚举类型的元素,则返回 true;否则返回 false。 |
| boolean | isSynthetic() | |
| void | set(Object obj, Object value) | 将指定对象变量上此 Field 对象表示的字段设置为指定的新值。 |
| void | setT(Object obj, T z) | 将字段的值设置为指定对象上的一个T类型值。 |
| String | toGenericString() | |
通过Class对象的getField(String name)、getFields()(包含继承的public属性)、getDeclaredField(String name)、getDeclaredFields()(本类的所有属性,包含非public的)来获取Field对象。
可调用setAccessible(boolean flag)来强制修改非public属性。
六、补充上面除了Parameter外其他几个的父类:AccessibleObject
| <T extends Annotation> T | getAnnotation(Class<T> annotationClass) | |
| <T extends Annotation> T | getDeclaredAnnotation(Class<T> annotationClass) | |
| Annotation[] | getAnnotations() | |
| Annotation[] | getDeclaredAnnotations() | |
| <T extends Annotation> T[] | getAnnotationsByType(Class<T> annotationClass) | |
| <T extends Annotation> T[] | getDeclaredAnnotationsByType(Class<T> annotationClass) | |
| boolean | isAnnotationPresent(Class<? extends Annotation> annotationClass) | |
| boolean | isAccessible() | 获取此对象的 accessible 标志的值。 |
| static void | setAccessible(AccessibleObject[] array, boolean flag) | 使用单一安全性检查(为了提高效率)为一组对象设置 accessible 标志的便捷方法。 |
| void | setAccessible(boolean flag) | 将此对象的 accessible 标志设置为指示的布尔值。 |
七、数组相关类型Array
| static Object | get(Object array, int index) | 返回指定数组对象中索引组件的值。 |
| static T | getT(Object array, int index) | 以T形式返回指定数组对象中索引组件的值。如果array不是T类型的,则get时进行扩展转换,但如果发生收缩转换,则抛出 IllegalArgumentException。 |
| static int | getLength(Object array) | 以int形式返回指定数组对象的长度。 |
| static Object | newInstance(Class<?> componentType, int... dimensions) |
创建一个具有指定的组件类型和维度的新数组。 |
| static Object | newInstance(Class<?> componentType, int length) |
创建一个具有指定的组件类型和长度的新数组。 |
| static void | set(Object array, int index, Object value) |
将指定数组对象中索引组件的值设置为指定的新值。 |
| static void | setT(Object array, int index, T z) |
将指定数组对象中索引组件的值设置为指定的新T值。如果array不是T类型的,则set时进行扩展转换,但如果发生收缩转换,则抛出 IllegalArgumentException。 |
八、修饰符Modifier
| Modifier | 还有同名常量 | Modifier 类提供了static方法和常量,对类和成员访问修饰符进行解码。 |
| static boolean | isAbstract(int mod) | 整数参数是否包括 abstract 修饰符 |
| static boolean | isFinal(int mod) | 整数参数是否包括 final 修饰符 |
| static boolean | isInterface(int mod) | 整数参数是否包括 interface 修饰符 |
| static boolean | isNative(int mod) | 整数参数是否包括 native 修饰符 |
| static boolean | isPrivate(int mod) | 整数参数是否包括 private 修饰符 |
| static boolean | isProtected(int mod) | 整数参数是否包括 protected 修饰符 |
| static boolean | isPublic(int mod) | 整数参数是否包括 public 修饰符 |
| static boolean | isStatic(int mod) | 整数参数是否包括 static 修饰符 |
| static boolean | isStrict(int mod) | 整数参数是否包括 strictfp 修饰符 |
| static boolean | isSynchronized(int mod) | 整数参数是否包括 synchronized 修饰符 |
| static boolean | isTransient(int mod) | 整数参数是否包括 transient 修饰符 |
| static boolean | isVolatile(int mod) | 整数参数是否包括 volatile 修饰符 |
| static String | toString(int mod) | 返回描述指定修饰符中的访问修饰符标志的字符串。 |
Java反射API研究(4)——Class中的重要对象的更多相关文章
- Java反射API研究(1)——注解Annotation
注解在表面上的意思,只是标记一下这一部分,最好的注解就是代码自身.而在java上,由于注解的特殊性,可以通过反射API获取,这种特性使得注解被广泛应用于各大框架,用于配置内容,代替xml文件配置. 要 ...
- Java反射API研究(3)——java.lang.Class<T>
对于反射来说,Class是核心,任何反射的对象都需要通过Class来获得. Class 类的实例表示正在运行的 Java 应用程序中的类和接口.枚举是一种类,注释是一种接口.每个数组属于被映射为 Cl ...
- Java反射API研究(2)——java.lang.reflect详细内容与关系
对于最新的java1.8而言,reflect中接口的结构是这样的: java.lang.reflect.AnnotatedElement java.lang.reflect.AnnotatedType ...
- Java反射机制demo(一)—实例化Class对象,并获得其他类包名和类型
Java反射机制demo(一)——实例化Class对象,通过对象获得包名和类型 使用Java中的 本地类作为实验对象,避免自定义的类带来的一些不便. public static void main(S ...
- Java反射机制在Spring IOC中的应用
反射的定义: 反射是java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成员进行操作.例如它允许一个java的类获取它所有的成员变量和方法并且显示出来. 反射机制的 ...
- Java反射机制在代理模式中的使用
代理模式的核心思路就是一个接口有两个子类,一个子类完成核心的业务操作,另一个子类完成与核心业务有关的辅助性操作. 代理模式分为静态代理模式和动态代理模式. 静态代理模式: //接口类 interfa ...
- Java反射在整个程序运行中的位置
①java的核心机制 java有两种核心机制:java虚拟机(JavaVirtual Machine)与垃圾收集机制(Garbage collection): ①Java虚拟机:是运行所有Java程序 ...
- java反射API
反射主要对象 Class Constructor Field Method API-Class 获取Class对象 Object.getClass() className.class Class.fo ...
- Java反射机制在工厂模式中的应用
在本篇文章中就不详细介绍工厂模式,主要介绍一下反射在工厂模式中的使用,让读者对反射机制带来的好处有更深的认识. 首先看一下简单工厂模式 简单工厂模式(simple factory)是类的创建模式,又叫 ...
随机推荐
- node使用JsonWebToken 生成token,完成用户登录、登录检测
最近在用node做后台的登录,检测登录功能.在本地使用session可以成功,但是放服务器后发现session失效了,每次请求session都会变化,着了很久原因.原来,自己项目是前后端分离的,前端调 ...
- 修改Gradle 和Maven本地仓库的位置方法
本文转载自:https://www.cnblogs.com/dwb91/p/6523541.html 关于Maven的配置: 用过Maven的开发人员应该知道Maven可以通过配置 conf文件夹下面 ...
- 转转转---js正则表达exec与match的区别说明
正则表达式对象有两个定义方式:: 1.第一种定义: new RegExp(pattern, attributes);如var reg = new RegExp("abc",&quo ...
- 访问https请求出现警告,去掉警告的方法
在顶部引多一个包即可 from requests.packages.urllib3.exceptions import InsecureRequestWarning,InsecurePlatformW ...
- app遍历——appCrawler的使用
1.appCrawler环境配置 1.1 apkinfo获取安装包的报名和mainActivity https://github.com/codeskyblue/apkinfo/releases 使用 ...
- buffer cache —— buffer busy waits/read by other session
oracle提供非常精确.有效的row level lock机制,多个用户同时修改数据时,为了保护数据,以块为单位挂起锁的情况不会发生.但这不太正确.以块为单位的锁虽然不存在,但正因为oracle I ...
- MySql 日期函数比较
查询当天数据 select * from tab where FROM_UNIXTIME(fabutime, '%Y%m%d') = 20121217; mysql TO_DAYS(date) 函 ...
- volyaire重振Infiniband
InfiniBand简 称IB,DoSTOR存储小字典里的解释是,一种新的I/O总线技术,用于取代目前的PCI总线.IB主要应用在企业网络和数据中心,也可以应用在高速线 速路由器.交换机.大型电信设备 ...
- 好记性不如烂笔头--linux学习笔记9练手写个shell脚本
#!/bin/bash #auto make install httpd #by authors baker95935 #httpd define path variable H_FILES=http ...
- 前端开发中常用的CSS选择器解析(一)
你也许已经掌握了id.class.后台选择器这些基本的css选择器.但这远远不是css的全部.下面向大家系统的介绍css中最常用的选择器,包括我们最头痛的浏览器兼容性问题.掌握了它们,才能真正领略cs ...