当前位置:首页 > Java

java 如何反射

2026-03-19 16:31:34Java

反射的基本概念

反射是Java在运行时动态获取类信息、操作类属性和方法的能力。通过反射可以在运行时检查类、接口、字段和方法,而不需要在编译时知道类的具体细节。

获取Class对象

反射的核心是Class对象,以下是获取Class对象的几种方式:

  1. 通过类名获取:
    Class<?> clazz = String.class;  
  2. 通过对象获取:
    String str = "Hello";  
    Class<?> clazz = str.getClass();  
  3. 通过全限定类名动态加载:
    Class<?> clazz = Class.forName("java.lang.String");  

获取类的构造方法

通过Class对象可以获取类的构造方法并创建实例:

java 如何反射

Constructor<?> constructor = clazz.getConstructor(String.class);  
Object instance = constructor.newInstance("Hello");  

获取类的字段

反射可以访问类的字段(包括私有字段):

Field field = clazz.getDeclaredField("value");  
field.setAccessible(true); // 访问私有字段  
Object value = field.get(instance);  

调用类的方法

通过反射可以动态调用类的方法:

java 如何反射

Method method = clazz.getMethod("substring", int.class);  
String result = (String) method.invoke(instance, 2);  

反射的优缺点

优点

  • 动态加载类,提高灵活性。
  • 适用于框架开发(如Spring、Hibernate)。

缺点

  • 性能较差,比直接调用慢。
  • 破坏封装性,可能导致安全问题。

示例代码

以下是一个完整的反射示例:

import java.lang.reflect.*;  

public class ReflectionExample {  
    public static void main(String[] args) throws Exception {  
        Class<?> clazz = Class.forName("java.lang.String");  
        Constructor<?> constructor = clazz.getConstructor(String.class);  
        Object instance = constructor.newInstance("Hello World");  

        Method method = clazz.getMethod("substring", int.class);  
        String result = (String) method.invoke(instance, 6);  
        System.out.println(result); // 输出 "World"  
    }  
}  

标签: 反射java
分享给朋友:

相关文章

如何查看java版本

如何查看java版本

查看 Java 版本的方法 通过命令行工具 打开终端(Windows 为命令提示符或 PowerShell,macOS/Linux 为 Terminal),输入以下命令并回车: java -ve…

java如何运行

java如何运行

运行Java程序的基本方法 Java程序的运行需要经过编写、编译和执行三个主要阶段。以下是具体步骤: 编写Java源代码 创建一个以.java为后缀的文件,例如HelloWorld.java。文件内…

java如何编译

java如何编译

编译Java程序的基本步骤 安装JDK(Java Development Kit)并配置环境变量。确保javac和java命令可在命令行中运行。JDK是编译和运行Java程序的必备工具。 创建Jav…

java如何读取文件

java如何读取文件

读取文件的常用方法 Java提供了多种读取文件的方式,适用于不同场景和需求。以下是几种常见的方法: 使用FileInputStream和BufferedInputStream读取二进制文件…

java如何创建类

java如何创建类

创建类的基本语法 在Java中,类通过class关键字定义,语法如下: [访问修饰符] class 类名 { // 成员变量(属性) // 构造方法 // 成员方法 }…

java如何输入数组

java如何输入数组

输入数组的方法 在Java中,可以通过多种方式输入数组,具体取决于输入源(如控制台、文件等)和数组类型(如基本类型或对象类型)。以下是几种常见的方法: 使用Scanner从控制台输入 对于基本数据类…