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 ...
随机推荐
- 安卓平台使用pocketSphinx离线语音识别
版权声明:本文为elecdog原创文章,可以转载,但必须在明确位置注明出处!谢谢合作. 关于语音识别,国内已经有比较好的公司推出相关的服务了,比如百度免费的离在线融合语音识别以及讯飞收费的在线和离线语 ...
- C语言指针2(空指针,野指针)
//最近,有朋友开玩笑问 int *p *是指针还是p是指针还是*p是指针,当然了,知道的都知道p是指针 //野指针----->>>指没有指向一个地址的指针(指针指向地址请参考上一 ...
- 华为软件开发云对比Jenkins-JavaWeb项目持续部署方式
一.前言:Jenkins介绍 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成和持续部署变成可能. 本文 ...
- elk 5.x的部署
前言 elk是由elasticsearch.logstash.kibana三者组成 其中elasticsearch主要负责数据存储与搜索 logstash主要负责收集日志信息以及对日志信息的切片索引等 ...
- 蓝桥杯比赛javaB组练习《牌型种数》
牌型种数 小明被劫持到X赌城,被迫与其他3人玩牌.一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张.这时,小明脑子里突然冒出一个问题:如果不考虑花色,只考虑点数,也不考虑自己得到的牌 ...
- C#设计模式总结(转)
一.引言 经过这段时间对设计模式的学习,自己的感触还是很多的,因为我现在在写代码的时候,经常会想想这里能不能用什么设计模式来进行重构.所以,学完设计模式之后,感觉它会慢慢地影响到你写代码的思维方式.这 ...
- 移动端APP页面Webview模式跳转详解
首先,来看一下关于Android home键和back键区别 back键 Android的程序无需刻意的去退出,当你一按下手机的back键的时候,系统会默认调用程序栈中最上层Activity的Dest ...
- Python网络数据采集3-数据存到CSV以及MySql
Python网络数据采集3-数据存到CSV以及MySql 先热热身,下载某个页面的所有图片. import requests from bs4 import BeautifulSoup headers ...
- annotation-config, annotation-driven, compont-scan 区别
<annotaion-driven/>标签: 这个标签对应的实现类是org.springframework.web.servlet.config.AnnotationDrivenBeanD ...
- Codeforces 556 A Case of the Zeros and Ones
A. Case of the Zeros and Ones time limit per test 1 second memory limit per test 256 megabytes input ...