JAVA中反射机制五(java.lang.reflect包)
一、简介
java.lang.reflect包提供了用于获取类和对象的反射信息的类和接口。反射API允许对程序访问有关加载类的字段,方法和构造函数的信息进行编程访问。它允许在安全限制内使用反射的字段,方法和构造函数对其底层对等进行操作。
二、java.lang.reflect AccessibleObject类
java.lang.reflect.AccessibleObject类是Field,Method和Constructor类对象的基类。 它提供了将反射对象标记为在使用它时抑制默认Java语言访问控制检查的功能。 当使用Fields,Methods或Constructors类对象来设置或获取字段,调用方法,或创建和初始化新的类实例时,执行访问分别检查(对于public,默认(包)访问,protected和private成员) 。 在反射对象中设置可访问标志允许具有足够权限的复杂应用程序(如Java对象序列化或其他持久性机制)以被禁止的方式操作对象。
类声明
以下是java.lang.reflect.AccessibleObject类的声明 -
public class AccessibleObject
extends Object
implements AnnotatedElement
构造函数
| 编号 | 构造函数 | 描述 |
|---|---|---|
| 1 | protected AccessibleObject() |
构造函数:仅由Java虚拟机使用。 |
类方法
| 编号 | 构造函数 | 描述 |
|---|---|---|
| 1 | T getAnnotation(Class annotationClass) | 如果存在注解,则返回该元素的指定类型的注解,否则返回null。 |
| 2 | Annotation[] getAnnotations() | 返回此元素上存在的所有注解。 |
| 3 | Annotation[] getDeclaredAnnotations() | 返回此元素上直接存在的所有注解。 |
| 4 | boolean isAccessible() | 获取此对象的可访问标志的值。 |
| 5 | boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) | 如果此元素上存在指定类型的注解,则返回true,否则返回false。 |
| 6 | static void setAccessible(AccessibleObject[] array, boolean flag) | 使用单一安全检查来设置对象数组的可访问标志的一个方便的方法(为了效率)。 |
| 7 | void setAccessible(boolean flag) | 将此对象的可访问标志设置为指示的布尔值。 |
三、java.lang.reflect.Array类
java.lang.reflect.Array类提供静态方法来动态创建和访问Java数组。 Array允许在get或set操作期间扩展转换,但如果发生缩小转换,则会抛出IllegalArgumentException异常
类声明
以下是java.lang.reflect.Array类的声明 -
public final class Array
extends Object
类方法
方法继承
此类继承以下类的方法 -
java.lang.Object
四、java.lang.reflect Constructor<T>类
java.lang.reflect.Constructor类提供了一个类的单个构造函数的信息和访问权限。 构造函数允许在将实际参数传到newInstance()与底层构造函数的形式参数进行匹配时进行扩展转换,但如果发生缩小转换,则会抛出IllegalArgumentException异常。
类声明
以下是java.lang.reflect.Constructor类的声明 -
public final class Constructor
extends AccessibleObject
implements GenericDeclaration, Member
类方法
| 序号 | 方法 | 描述 |
|---|---|---|
| 1 | boolean equals(Object obj) | 将此构造函数与指定对象进行比较。 |
| 2 | T getAnnotation(ClassannotationClass) | 如果存在这样的注释,则返回该元素的指定类型的注释,否则返回null。 |
| 3 | Annotation[] getDeclaredAnnotations() | 返回此元素上直接存在的所有注释。 |
| 4 | Class getDeclaringClass() | 返回表示由此构造函数对象表示的构造函数的类的Class对象。 |
| 5 | Class<?>[] getExceptionTypes() | 返回一个Class对象数组,该数组表示由此构造方对象表示的底层构造函数声明的异常类型。 |
| 6 | Type[] getGenericExceptionTypes() | 返回一个Type对象数组,它以声明顺序表示由此构造方法对象表示的方法的形式参数类型。 |
| 7 | Type[] getGenericParameterTypes() | 返回一个Type对象数组,它以声明顺序表示由此构造方法对象表示的方法的形式参数类型。 |
| 8 | int getModifiers() | 返回由此Constructor对象表示的构造函数的Java语言修饰符,以整数形式返回。 |
| 9 | String getName() | 以字符串形式返回此构造函数的名称。 |
| 10 | Annotation[][] getParameterAnnotations() | 返回一个数组数组,表示由Constructor对象表示的方法的形式参数(以声明顺序)的注释。 |
| 11 | Class<?>[] getParameterTypes() | 返回一个Class对象数组,它们以声明顺序表示由此构造函数对象表示的构造函数的形式参数类型。 |
| 12 | int hashCode() | 返回此构造函数的哈希码。 |
| 13 | boolean isSynthetic() | 如果此构造函数是合成构造函数,则返回true; 否则返回false。 |
| 14 | boolean isVarArgs() | 如果该构造函数被声明为采用可变数量的参数,则返回true; 否则返回false。 |
| 15 | T newInstance(Object… initargs) | 使用此Constructor对象表示的构造函数,使用指定的初始化参数来创建和初始化构造函数的声明类的新实例。 |
| 16 | String toGenericString() | 返回描述此构造方法的字符串,包括类型参数。 |
| 17 | String toString() | 返回描述此构造函数的字符串。 |
五、java.lang.reflect.Field类
java.lang.reflect.Field类提供有关类或接口的单个字段的信息和动态访问。反射的字段可以是类(静态)字段或实例字段。字段允许在获取或设置访问操作期间扩展转换,但如果发生缩小转换,则会引发IllegalArgumentException。
类声明
以下是java.lang.reflect.Field类的声明 -
public final class Field
extends AccessibleObject
implements Member
类方法
| 序号 | 方法 | 描述 |
|---|---|---|
| 1 | boolean equals(Object obj) | 将此字段与指定对象进行比较。 |
| 2 | Object get(Object obj) | 返回指定对象上由Field表示的字段的值。 |
| 3 | T getAnnotation(ClassannotationClass) | 如果存在这样的注释,则返回该元素的指定类型的注释,否则返回null。 |
| 4 | boolean getBoolean(Object obj) | 获取静态或实例布尔字段的值。 |
| 5 | byte getByte(Object obj) | 获取静态或实例字节字段的值。 |
| 6 | char getChar(Object obj) | 获取char类型的静态或实例字段的值,或者通过加宽转换可转换为char类型的另一个基本类型的值。 |
| 7 | Annotation[] getDeclaredAnnotations() | 返回此元素上直接存在的所有注释。 |
| 8 | Class<?> getDeclaringClass() | 返回表示声明由Field对象表示的字段的类或接口的Class对象。 |
| 9 | double getDouble(Object obj) | 获取double类型的静态或实例字段的值,或者通过加宽转换可转换为double类型的另一个基本类型的值。 |
| 10 | float getFloat(Object obj) | 获取类型为float的静态或实例字段的值,或者通过加宽转换可转换为float类型的另一个原始类型的值。 |
| 11 | Type getGenericType() | 返回一个Type对象,该对象表示由Field对象表示的字段的声明类型。 |
| 12 | int getInt(Object obj) | 获取类型为int的静态或实例字段的值,或者通过加宽转换可转换为类型int的另一个原始类型的值。 |
| 13 | long getLong(Object obj) | 获取long类型的静态或实例字段的值,或者通过扩展转换可转换为long类型的另一个原始类型的值。 |
| 14 | int getModifiers() | 返回由Field对象表示的字段的Java语言修饰符,以整数形式返回。 |
| 15 | String getName() | 返回Field对象表示的字段的名称。 |
| 16 | short getShort(Object obj) | 获取类型为short的另一个原始类型的静态或实例字段的值,通过加宽转换可转换为short类型。 |
| 17 | Class<?> getType() | 返回一个Class对象,用于标识Field对象所表示的字段的声明类型。 |
| 18 | int hashCode() | 返回Field的哈希码。 |
| 19 | boolean isEnumConstant() | 如果字段表示枚举类型的元素,则返回true; 否则返回false。 |
| 20 | boolean isSynthetic() | 将指定对象参数上的Field对象表示的字段设置为指定的新值。 |
| 21 | void setBoolean(Object obj, boolean z) | 为指定对象上字段的值设置为布尔值。 |
| 22 | void setByte(Object obj, byte b) | 为指定对象上字段的值设置为字节值。 |
| 23 | void setChar(Object obj, char c) | 为指定对象上字段的值设置为字符值。 |
| 24 | void setDouble(Object obj, double d) | 为指定对象上字段的值设置为double值。 |
| 25 | void setFloat(Object obj, float f) | 为指定对象上字段的值设置为浮点数。 |
| 26 | void setInt(Object obj, int i) | 为指定对象上字段的值设置为int值。 |
| 27 | void setLong(Object obj, long l) | 为指定对象上字段的值设置为long值。 |
| 28 | void setShort(Object obj, short s) | 为指定对象上字段的值设置为short值。 |
| 29 | String toGenericString() | 返回描述此Field对象的字符串,包括其通用类型。 |
| 30 | String toString() | 返回描述此Field对象的字符串。 |
方法继承
- java.lang.reflect.AccessibleObject
- java.lang.Object
六、java.lang.reflect.Method类
java.lang.reflect.Method类提供有关类或接口上单个方法的信息和访问权限。反映的方法可以是类方法或实例方法(包括抽象方法)。 当匹配实际参数以使用底层方法的形式参数调用时,方法允许扩展转换,但如果发生缩小转换,则会引发IllegalArgumentException异常。
类声明
以下是java.lang.reflect.Method类的声明 -
public final class Method<T>
extends AccessibleObject
implements GenericDeclaration, Member
类方法
| 序号 | 方法 | 描述 |
|---|---|---|
| 1 | boolean equals(Object obj) | 将此方法与指定的对象进行比较。 |
| 2 | T getAnnotation(ClassannotationClass) | 如果存在这样的注释,则返回该元素的指定类型的注释,否则返回null。 |
| 3 | Annotation[] getDeclaredAnnotations() | 返回此元素上直接存在的所有注释。 |
| 4 | Class getDeclaringClass() | 返回表示声明由此Method对象表示方法类的Class对象。 |
| 5 | Object getDefaultValue() | 返回此Method实例表示的注释成员的默认值。 |
| 6 | Class<?>[] getExceptionTypes() | 返回一个Class对象数组,该数组表示由此构造方对象表示的底层构造函数声明的异常类型。 |
| 7 | Type[] getGenericExceptionTypes() | 返回一个Type对象的数组,表示声明为此Constructor对象抛出的异常。 |
| 8 | Type[] getGenericParameterTypes() | 返回一个Type对象数组,它以声明顺序表示由此构造方法对象表示的方法的形式参数类型。 |
| 9 | Type getGenericReturnType() | 返回一个Type对象,该对象表示此Method对象表示的方法的正式返回类型。 |
| 10 | int getModifiers() | 返回由此Method对象表示的方法的Java语言修饰符,以整数形式返回。 |
| 11 | String getName() | 以字符串形式返回此方法的名称。 |
| 12 | Annotation[][] getParameterAnnotations() | 返回一个数组数组,它们以声明顺序表示由此Method对象表示的方法的形式参数的注释。 |
| 13 | Class<?>[] getParameterTypes() | 返回一个Class对象数组,它们以声明顺序表示由此Method对象表示的构造函数的形式参数类型。 |
| 14 | Class<?> getReturnType() | 返回一个Class对象,该对象表示此Method对象表示的方法的正式返回类型。 |
| 15 | int hashCode() | 返回此构造函数的哈希码。 |
| 16 | Object invoke(Object obj, Object…args) | 在具有指定参数的指定对象上调用此Method对象表示的底层方法。 |
| 17 | boolean isBridge() | 如果此方法是桥接方法,则返回true; 否则返回false。 |
| 18 | boolean isSynthetic() | 如果此方法是合成方法,则返回true; 否则返回false。 |
| 19 | boolean isVarArgs() | 如果此方法被声明为使用可变数量的参数,则返回true; 否则返回false。 |
| 20 | String toGenericString() | 返回描述此方法的字符串,包括类型参数。 |
| 21 | String toString() | 返回描述此方法的字符串。 |
方法继承
此类继承以下类的方法 -
- java.lang.reflect.AccessibleObject
- java.lang.Object
七、java.lang.reflect.Modifier类
java.lang.reflect.Modifier类提供了用于解码类和成员访问修饰符的静态方法和常量。修饰符集合被表示为具有表示不同修饰符的不同位位置的整数。
类声明
以下是java.lang.reflect.Modifier类的声明 -
public class Modifier
extends Object
字段
以下是java.lang.reflect.Modifier类的字段 -
- static int ABSTRACT - 表示
abstract修饰符的int值。 - static int FINAL - 表示
final修饰符的int值。 - static int INTERFACE - 表示
interface修饰符的int值。 - static int NATIVE - 表示
abstract修饰符的int值。 - static int PRIVATE - 表示
private修饰符的int值。 - static int PROTECTED - 表示
protected修饰符的int值。 - static int PUBLIC - 表示
public修饰符的int值。 - static int STATIC - 表示
static修饰符的int值。 - static int STRICT - 表示
strictfp修饰符的int值。 - static int SYNCHRONIZED - 表示
synchronized修饰符的int值。 - static int TRANSIENT - 表示
transient修饰符的int值。 - static int VOLATILE - 表示
volatile修饰符的int值。
构造函数
| 序号 | 方法 | 描述 |
|---|---|---|
| 1 | Modifier() | 默认构造函数 |
类方法
| 序号 | 方法 | 描述 |
|---|---|---|
| 1 | static int classModifiers() | 返回一个int值将可以应用于一个类的源语言修饰符组合在一起。 |
| 2 | static int constructorModifiers() | 返回一个int值将可以应用于构造函数的源语言修饰符组合在一起。 |
| 3 | static int fieldModifiers() | 返回一个int值将可以应用于字段的源语言修饰符组合在一起。 |
| 4 | static int interfaceModifiers() | 返回一个int值将可以应用于interface的源语言修饰符组合在一起。 |
| 5 | static boolean isAbstract(int mod) | 如果整数参数包含abstract修饰符,返回true,否则返回false。 |
| 6 | static boolean isFinal(int mod) | 如果整数参数包含final修饰符,则返回true,否则返回false。 |
| 7 | static boolean isInterface(int mod) | 如果整数参数包含interface修饰符,返回true,否则返回false。 |
| 8 | static boolean isNative(int mod) | 如果整数参数包含native修饰符,则返回true,否则返回false。 |
| 9 | static boolean isPrivate(int mod) | 如果整数参数包含private修饰符,返回true,否则返回false。 |
| 10 | static boolean isProtected(int mod) | 如果整数参数包含protected修饰符,则返回true,否则返回false。 |
| 11 | static boolean isPublic(int mod) | 如果整数参数包含public修饰符,则返回true,否则返回false。 |
| 12 | static boolean isStatic(int mod) | 如果整数参数包含static修饰符,则返回true,否则返回false。 |
| 13 | static boolean isStrict(int mod) | 如果整数参数包含strictfp修饰符,则返回true,否则返回false。 |
| 14 | static boolean isSynchronized(int mod) | 如果整数参数包含synchronized修饰符,返回true,否则返回false。 |
| 15 | static boolean isTransient(int mod) | 如果整数参数包含transient 修饰符,则返回true,否则返回false。 |
| 16 | static boolean isVolatile(int mod) | 如果整数参数包含volatile修饰符,则返回true,否则返回false。 |
| 17 | static int methodModifiers() | 返回一个将可以应用于方法的源语言修饰符组合在一起的int值。 |
| 18 | static String toString(int mod) | 返回描述指定修饰符中的访问修饰符标志的字符串。 |
方法继承
此类继承以下类的方法 -
- java.lang.Object
八、java.lang.reflect.Proxy类
java.lang.reflect.Proxy类提供用于创建动态代理类和实例的静态方法,它也是由这些方法创建的所有动态代理类的超类。
类声明
以下是java.lang.reflect.Proxy类的声明 -
public class Proxy
extends Object
implements Serializable
字段
以下是java.lang.reflect.Proxy类的字段 -
- protected InvocationHandler h - 该代理实例调用的处理程序。
构造函数
| 序号 | 方法 | 描述 |
|---|---|---|
| 1 | protected Proxy(InvocationHandler h) | 从一个子类(通常是一个动态代理类)构造一个新的Proxy实例,并为其调用处理程序指定一个值。 |
类方法
| 序号 | 方法 | 描述 |
|---|---|---|
| 1 | static InvocationHandler getInvocationHandler(Object proxy) | 返回指定代理实例的调用处理程序。 |
| 2 | static Class<?> getProxyClass(ClassLoader loader, Class<?>… interfaces) | 给定类加载器和接口数组的代理类的java.lang.Class对象。 |
| 3 | static boolean isProxyClass(Class<?> cl) | 当且仅当使用getProxyClass方法或newProxyInstance方法将指定的类动态生成为代理类时,才返回true。 |
| 4 | static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) | 返回指定接口的代理类的实例,该接口将方法调用分派给指定的调用处理程序。 |
方法继承
此类继承以下类的方法 -
- java.lang.Object
总结:截止目前,java反射学习到此告一段落,本文参考JDK文档编写。
JAVA中反射机制五(java.lang.reflect包)的更多相关文章
- JAVA中反射机制五(JavaBean的内省与BeanUtils库)
内省(Introspector) 是Java 语言对JavaBean类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法 ...
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
一.Java的反射机制 每个Java程序执行前都必须经过编译.加载.连接.和初始化这几个阶段,后三个阶段如下图: 其中
- JAVA中反射机制六(java.lang.reflect包)
一.简介 java.lang.reflect包提供了用于获取类和对象的反射信息的类和接口.反射API允许对程序访问有关加载类的字段,方法和构造函数的信息进行编程访问.它允许在安全限制内使用反射的字段, ...
- JAVA中反射机制一
反射一 基本概念 一.反射机制的基本概念 什么是反射?反射是指在运行状态中,对于任意一个类,都可以获取到这个类的所有属性和方法:对于任意一个对象,都能够调用这个对象的任意方法和属性:这种动态获取信息及 ...
- Java中反射机制详解
序言 在学习java基础时,由于学的不扎实,讲的实用性不强,就觉得没用,很多重要的知识就那样一笔带过了,像这个马上要讲的反射机制一样,当时学的时候就忽略了,到后来学习的知识中,很多东西动不动就用反射, ...
- JAVA中反射机制四
声明:如需转载请说明地址来源:http://www.cnblogs.com/pony1223 反射四 利用反射获取类的属性 1.通过反射也可以获取到类中的属性,假设我们继续使用Person这个类,然后 ...
- JAVA中反射机制三
声明:如需转载请说明地址来源:http://www.cnblogs.com/pony1223 反射三 利用反射获取对象的方法,并调用方法 1.利用反射获取对象的方法,我们仍然利用上面的Person类, ...
- JAVA中反射机制二
声明:如需转载请说明地址来源:http://www.cnblogs.com/pony1223 反射二 利用反射创建对象 1.利用反射创建对象,首先我们创建一个类,类里面,我们知道构造函数有默认的构造函 ...
- java中反射机制通过字节码文件对象获取字段和函数的方法
pclass = Class.forName("get_class_method.Person"); //Field ageField = pclass.getField(&quo ...
随机推荐
- iptables规则进阶
iptables规则进阶 1.实验环境搭建: 在进行试验之前,先要进行实验环境的搭建,要求如下: 1.对于三台主机,分别设置IP地址 2.设置10.0.1.22为内网主机 3.设置中间主机有两个网卡, ...
- (转)Memcached 在windows下的java使用
Memcached 在windows下的java使用 研究这个东东主要是为了解决在教务管理中选课系统的大并发情况下数据库频繁读写造成速度慢的问题,但要使用WEB服务器的内存,是不是可靠还需要验证, ...
- HDOJ2001-两点坐标的距离
Problem Description 输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离. Input 输入数据有多组,每组占一行,由4个实数组成,分别表示x1,y1,x2,y2 ...
- angularjs 选项卡tab切换(移动端用户订单状态)
<!--头部导航tabs切换--> <div class="tabs-striped tabs-top tabs-background-positive tabs-colo ...
- 全站 HTTPS 没你想象的那么简单
对自己无知这件事本身的无知真的挺可怕 认知偏差现象一直存在于我们每个人身上,谁也避免不掉,不过是有的人了解这件事儿,有的人不怎么知道而已,这就产生了「无知而不自知」的认知偏差.当然,这时候你自己忽悠自 ...
- Mybatis框架分析
摘要 本篇文章只是个人阅读mybatis源码总结的经验或者个人理解mybatis的基本轮廓,作为抛砖引玉的功能,希望对你有帮助,如果需要深入了解细节还需亲自去阅读源码. mybatis基本架构 myb ...
- Java基础之TCP与UDP
OSI 7层参考模型 物理层 --> 数据链路层 --> 网络层 --> 传输层 --> 会话层 --> 表示层 --> 应用层 按此顺序称为拆包,反之为封包. T ...
- POJ2236 Wireless Network 并查集简单应用
Description An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have ...
- 用于NLP的CNN架构搬运:from keras0.x to keras2.x
本文亮点: 将用于自然语言处理的CNN架构,从keras0.3.3搬运到了keras2.x,强行练习了Sequential+Model的混合使用,具体来说,是Model里嵌套了Sequential. ...
- 1.配置vsftp服务器
1.安装 vsftp yum -y install ftp vsftpd 2.查看配置文件所在路径 rpm -qc vsftpd 3.备份vsftpd文件 cp vsftpd.conf vsftpd. ...