Java类和方法反射

程序你得看得懂 2024-02-24 03:02:11

Java反射(Reflection)是Java语言的一个特性,它允许程序在运行时获取和操作类的内部信息,包括类的属性、方法、构造函数等。反射的核心是java.lang.Class类,通过它可以获取类的所有信息。

类的反射

类的反射主要是获取类的Class对象,然后通过这个对象来获取类的属性、方法、构造函数等。获取Class对象有三种方式:

使用.class语法:Class<?> clazz = String.class;使用Class.forName()方法:Class<?> clazz = Class.forName("java.lang.String");使用对象的getClass()方法:String str = "hello"; Class<?> clazz = str.getClass();方法的反射

方法的反射主要是获取类的方法,并调用它。可以使用Class对象的getMethod()或getDeclaredMethod()方法获取Method对象,然后使用Method对象的invoke()方法来调用该方法。

示例代码

下面是一个简单的示例代码,展示如何使用Java反射来获取类的信息并调用方法:

import java.lang.reflect.Method; public ReflectionExample { public static void main(String[] args) { try { // 获取String类的Class对象 Class<?> clazz = Class.forName("java.lang.String"); // 输出类名 System.out.println("Class Name: " + clazz.getName()); // 获取所有公共方法 Method[] methods = clazz.getMethods(); for (Method method : methods) { System.out.println("Method Name: " + method.getName()); } // 获取特定方法并调用 Method method = clazz.getMethod("length"); String str = "hello"; int length = (Integer) method.invoke(str); System.out.println("Length of 'hello': " + length); } catch (Exception e) { e.printStackTrace(); } } }

注意:

getMethod()方法只能获取公共方法,而getDeclaredMethod()可以获取所有方法,包括私有方法。invoke()方法的第一个参数是要调用该方法的对象,如果是静态方法,则传入null。invoke()方法返回的是一个Object,需要根据实际情况进行类型转换。

这个示例代码展示了如何使用Java反射来获取java.lang.String类的信息,并调用其length方法。这只是反射的基本用法,实际上,反射还可以做很多事情,比如动态创建对象、访问私有属性和方法等。

0 阅读:0

程序你得看得懂

简介:感谢大家的关注