反射详解

Posted arvin66-lyh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反射详解相关的知识,希望对你有一定的参考价值。

1.什么是反射?

Java中的反射机制是Java语言的一个很重要的特性,是Java “动态性” 的重要体现。
Java反射机制让我们在程序运行状态中,对于任意一个类,都能知道这个类的所有属性和方法;对于任意一个对象,都能调用他的任意一个方法。这种动态获取属性以及动态调用对象方法的功能就是“Java的反射机制”。

2.反射机制的本质

在使用一个类之前必须先加载它,而当虚拟机加载完一个类后,就会在方法区创建一个这个类对应的class对象(一个类只有一个class对象),这个对象包含了类完整的结构信息。这个对象就像一面镜子,通过他可以“看到”整个类的结构,因此很形象的被称为“反射”。“class对象”就是反射机制的核心。

3.java.lang.Class 类

Class类实现反射(Reflection)的基础,任何想实现动态加载、运行的类都必须先获得其相应的Class对象。
java.lang.Calss类十分特殊,它表示java中的所有类型(类、接口、枚举、注解、数组、原始数据类型(基本数据类型)以及void)
Class类没有公共的构造器,Class对象由虚拟机自行创建。

4.Class对象获取方式:

1.运用 Class.froName(包名+类名); (常用)
2.运用 .class 语法
3.运用 getClass()方法

5.反射机制的常见操作

1.动态加载类,动态获取类的信息(属性、方法、构造器等)
2.动态构造对象
3.动态调用类和对象的方法
4.动态调用及处理属性
5.获取泛型信息

6.处理注解

6.常见操作涉及到的类

Class类 代表类的结构信息
Method类 代表方法的结构信息
Field类 代表属性的结构信息
Construction类 代表构造器的结构信息
Annotation类 代表注解的结构信息

7.Class类常用方法

1.getClassLoader() 返回类的类加载器。 
2.getName() 返回class对象表示的实体的名称(包含包名)
3.getSimpleName() 返回class对象表示的实体的简单名称(不含包名)
4.newInstance() 创建此class对象表示的类的新对象。

获取属性(字段):

1.getField(String name) 返回一个 Field对象,反射class对象表示的类或接口的指定公共字段。 
2.getFields() 返回一个Field数组对象,反射class对象表示的类或接口的所有可访问的公共字段 。 
3.getDeclaredField(String name) 返回一个 Field对象,它反射此class对象表示的类或接口中指定的声明字段。
4.getDeclaredFields() 返回一个Field数组对象反射此class对象表示的类或接口中声明的所有字段。

获取方法:

1.getMethod(String name, 类<?>... 参数(列表)类型) 
返回一个 Method对象,它反射此表示的类或接口的指定公共方法。 
2.getMethods() 返回一个Method对象数组 反射class对象表示的类或接口中所有公共方法,包括那些由类或接口和那些从父类和父接口继承的方法。 
3.getDeclaredMethod(String name, 类<?>... 参数(列表)类型) 
返回一个 Method对象,它反射此表示的类或接口中声明的指定方法。
4.getDeclaredMethods() 
返回一个Method对象数组 反射class对象表示的类或接口中声明的所有方法,包括公共,受保护,默认(包)访问和私有方法,但不包括继承的方法。

8.Field类常用方法

1.getName() 返回此 Field对象表示的字段的名称。
2.getType() 返回此 Field对象表示的字段的类型(class) 
3.get(Object obj) 返回此Field对象所表示的字段的值 。
4.set(Object obj, Object value) 
将指定对象参数上的此 Field对象表示的字段设置为指定的新值。
set方法无法直接访问private属性,需要“禁用安全检查”,即setAcceessible(true)。
5.getModifiers() 以整数形式(int)返回由该 Field对象表示的字段的Java语言修饰符

9.Method类常用方法

1.getName() 返回由此Method对象表示的方法的名称
2.getReturnType() 返回一个class对象,表示Method对象表示的方法的返回值类型。
3.getParameterTypes() 
返回一个class对象的数组, 以声明顺序表示Method对象表示的方法的形式参数类型。 
4.getModifiers() 返回Method对象表示的方法的修饰符
5.invoke(Object obj, Object... args) args 参数列表
调用指定对象的Method对象表示的方法 args为实参

以上是关于反射详解的主要内容,如果未能解决你的问题,请参考以下文章

Java反射机制详解

Java反射机制详解

Java 反射详解 转载

java反射机制详解

java反射详解

Java基础13:反射与注解详解