一、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中的重要对象的更多相关文章

  1. Java反射API研究(1)——注解Annotation

    注解在表面上的意思,只是标记一下这一部分,最好的注解就是代码自身.而在java上,由于注解的特殊性,可以通过反射API获取,这种特性使得注解被广泛应用于各大框架,用于配置内容,代替xml文件配置. 要 ...

  2. Java反射API研究(3)——java.lang.Class<T>

    对于反射来说,Class是核心,任何反射的对象都需要通过Class来获得. Class 类的实例表示正在运行的 Java 应用程序中的类和接口.枚举是一种类,注释是一种接口.每个数组属于被映射为 Cl ...

  3. Java反射API研究(2)——java.lang.reflect详细内容与关系

    对于最新的java1.8而言,reflect中接口的结构是这样的: java.lang.reflect.AnnotatedElement java.lang.reflect.AnnotatedType ...

  4. Java反射机制demo(一)—实例化Class对象,并获得其他类包名和类型

    Java反射机制demo(一)——实例化Class对象,通过对象获得包名和类型 使用Java中的 本地类作为实验对象,避免自定义的类带来的一些不便. public static void main(S ...

  5. Java反射机制在Spring IOC中的应用

    反射的定义: 反射是java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成员进行操作.例如它允许一个java的类获取它所有的成员变量和方法并且显示出来. 反射机制的 ...

  6. Java反射机制在代理模式中的使用

    代理模式的核心思路就是一个接口有两个子类,一个子类完成核心的业务操作,另一个子类完成与核心业务有关的辅助性操作. 代理模式分为静态代理模式和动态代理模式.  静态代理模式: //接口类 interfa ...

  7. Java反射在整个程序运行中的位置

    ①java的核心机制 java有两种核心机制:java虚拟机(JavaVirtual Machine)与垃圾收集机制(Garbage collection): ①Java虚拟机:是运行所有Java程序 ...

  8. java反射API

    反射主要对象 Class Constructor Field Method API-Class 获取Class对象 Object.getClass() className.class Class.fo ...

  9. Java反射机制在工厂模式中的应用

    在本篇文章中就不详细介绍工厂模式,主要介绍一下反射在工厂模式中的使用,让读者对反射机制带来的好处有更深的认识. 首先看一下简单工厂模式 简单工厂模式(simple factory)是类的创建模式,又叫 ...

随机推荐

  1. php7新特性一览

    1.太空船操作符 用于比较2个表达式,例如当\(a小于,等于或大于\)b时,分别返回-1,0,1 php echo 1 <=> 1; //0 echo PHP_EOL; echo 1 &l ...

  2. Java进行spark计算

    首先在Linux环境安装spark: 可以从如下地址下载最新版本的spark: https://spark.apache.org/downloads.html 这个下载下来后是个tgz的压缩包,解压后 ...

  3. solr之高级查询--联表 join查询

    例如有两个业务表:文章表,评论表 . 场景: 一个文章可以由多个人评论. 创建两个core,一个core叫article,一个叫comment.article实例的schema.xml文件中定义几个简 ...

  4. iis应用程序池假死问题

     “Comprehensive orientate   16:05:43  查看原文 IIS貌似问题不少 问:IIS 网站 并发连接线不多,但是运行一段时间后 就非常慢,系统资源占用都正常,一回收应用 ...

  5. 史上最全的Maven Pom文件标签详解

    <span style="padding:0px; margin:0px"><project xmlns="http://maven.apache.or ...

  6. ORA-12528问题解决

    这个问题说明数据库没有Mount 最好先将系统日志一并清空,避免以下报错信息: ERROR:ORA-28056: Writing audit records to Windows Event Log ...

  7. confd test

    vi /etc/confd/confd.toml backend = "consul"confdir = "/etc/confd"log-level = &qu ...

  8. Thread.yield()的简单理解

    Thread.yield( )方法: 使当前线程从执行状态(运行状态)变为可执行态(就绪状态).cpu会从众多的可执行态里选择. 也就是说,当前也就是刚刚的那个线程还是有可能会被再次执行到的,并不是说 ...

  9. for 续3

    --------siwuxie095                 (三)delims=xxx (xxx 是被定义的符号,该符号在文本中存在,将作为分隔符)     定义分隔符(用于切分文本)   ...

  10. shell如何传递变量到另一个脚本文件中

    http://www.jbxue.com/article/shell/20707.html本文介绍了shell脚本传递变量到另一个脚本文件中的方法,在脚本中调用另一脚本,即创建了一个子进程,感兴趣的朋 ...