Java反射机制

Posted 跃动的电子

tags:

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

Java的反射机制

一、什么是反射

反射是Java的特征之一,是一种间接操作目标对象的机制,核心是JVM在运行的时候才动态加载类,并且对于任意一个类,都能够知道这个类的所有属性和方法,调用方法/访问属性,不需要提前在编译期知道运行的对象是谁,他允许运行中的Java程序获取类的信息,并且可以操作类或对象内部属性。程序中对象的类型一般都是在编译期就确定下来的,而当我们的程序在运行时,可能需要动态的加载一些类,这些类因为之前用不到,所以没有加载到jvm,这时,使用Java反射机制可以在运行期动态的创建对象并调用其属性,它是在运行时根据需要才加载。

在我们日常的编程中不知不觉已经习惯“使用”反射机制——在使用IDEA进行开发的时候,在对象名后加一个“.”就能够自动的获得该对象的所有属性和方法,这种功能可以说大大的遍历我们的开发过程。这种功能的实现依靠的就是反射机制。

二、反射机制的作用

  1. 通过反射机制可以在运行时获取类的各种属性和方法,进行反编译
  2. 反射最重要的用途就是开发各种通用框架。比如很多框架(Spring)都是配置化的(比如通过XML文件配置Bean),为了保证框架的通用性,他们可能需要根据配置文件加载不同的类或者对象,调用不同的方法,这个时候就必须使用到反射了,运行时动态加载需要的加载的对象
  3. 获取一个类的访问修饰符、成员和方法、构造方法和超类信息
  4. 获取并设置对象的一个成员,这个成员可以在运行期间才知道

利用java的反射机制可以很灵活的对加载到Java虚拟机中的类信息进行检测

三、反射机制的基本原理

四、使用反射机制

首先介绍和反射相关的类:

  1. Java.lang.Class:java反射机制的起源,当一个类被加载之后,java虚拟机就会自动生成一个Class对象,通过这个Class对象,我们就能够获得加载到java虚拟机中的这个Class对象的所属方法、成员和构造方法等信息。
  2. Java.lang.reflect:reflect包下的 Constructor、 Field 、 Method、 Modifier,通过反射方式获取
获得Class

(1)Object-->getClass

(2)任何数据类型(包括基本的数据类型)都有一个“静态”的class属性

(3)通过class类的静态方法:forName(String className),应用范围较广

判断某个对象是否为某个类的实例
public native boolean isInstance(Object obj);
通过反射创造实例
  1. Class对象的newInstance()方法——动态代理中实现动态生成代理类的关键

    String.class.newInstance()
    
  2. 通过getConstructor()或getDeclareConstructor()方法获得构造器(Constructor)对象并调用其的newInstance()方法

String.class.getConstructor(String.class).newInstance("Test");

参考博文:
https://blog.csdn.net/haluoluo211/article/details/49516689
https://blog.csdn.net/a745233700/article/details/82893076

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

反射机制入门

反射机制入门

java 反射代码片段

深入理解java的反射机制

Java反射机制

Java核心技术梳理-类加载机制与反射