Java反射常用api
2023-12-24 15:48:12
反射API方法的说明:
Class.forName("className")
:- 作用:通过类的全名获取对应的Class对象。
- 示例:
Class<?> stringClass = Class.forName("java.lang.String");
clazz.getConstructor(Class<?>... parameterTypes)
:- 作用:获取类的指定构造器。
- 示例:
Constructor<?> stringConstructor = stringClass.getConstructor(String.class);
constructor.newInstance(Object... initargs)
:- 作用:使用构造器创建类的实例。
- 示例:
String greeting = (String) stringConstructor.newInstance("Hello, World!");
clazz.getDeclaredField(String name)
:- 作用:获取类的指定字段,包括私有字段。
- 示例:
Field stringValueField = stringClass.getDeclaredField("value");
field.setAccessible(true)
:- 作用:设置字段为可访问,以便访问私有字段。
- 示例:
stringValueField.setAccessible(true);
field.get(Object obj)
:- 作用:获取字段的值。
- 示例:
char[] charArray = (char[]) stringValueField.get(greeting);
clazz.getDeclaredMethod(String name, Class<?>... parameterTypes)
:- 作用:获取类的指定方法,包括私有方法。
- 示例:
Method lengthMethod = stringClass.getDeclaredMethod("length");
method.invoke(Object obj, Object... args)
:- 作用:调用类的方法。
- 示例:
int length = (int) lengthMethod.invoke(greeting);
clazz.getSuperclass()
:- 作用:获取类的父类。
- 示例:
Class<?> superClass = stringClass.getSuperclass();
clazz.getInterfaces()
:- 作用:获取类实现的接口。
- 示例:
Class<?>[] interfaces = stringClass.getInterfaces();
clazz.getModifiers()
:- 作用:获取类的修饰符。
- 示例:
int modifiers = stringClass.getModifiers();
Modifier.isPublic(int modifiers)
:- 作用:检查修饰符是否表示类是公共的。
- 示例:
boolean isPublic = Modifier.isPublic(modifiers);
这些API方法允许您在运行时检查和操作类的构造器、字段、方法、父类、接口和修饰符信息,从而实现了反射的核心功能。通过这些方法,您可以在运行时动态处理类的结构和实例。
import java.lang.reflect.*;
public class ReflectionDemo {
public static void main(String[] args) throws Exception {
// 通过类的全名获取Class对象
Class<?> stringClass = Class.forName("java.lang.String");
// 获取String类的有参构造器
Constructor<?> stringConstructor = stringClass.getConstructor(String.class);
// 使用构造器创建一个String对象
String greeting = (String) stringConstructor.newInstance("Hello, World!");
// 获取String类的私有字段
Field stringValueField = stringClass.getDeclaredField("value");
// 设置私有字段为可访问
stringValueField.setAccessible(true);
// 获取字段的值(字符数组)
char[] charArray = (char[]) stringValueField.get(greeting);
// 获取String类的length()方法
Method lengthMethod = stringClass.getDeclaredMethod("length");
// 调用length()方法获取字符串的长度
int length = (int) lengthMethod.invoke(greeting);
// 获取String类的父类
Class<?> superClass = stringClass.getSuperclass();
// 获取String类实现的接口
Class<?>[] interfaces = stringClass.getInterfaces();
// 检查String类的修饰符
int modifiers = stringClass.getModifiers();
boolean isPublic = Modifier.isPublic(modifiers);
// 输出结果
System.out.println("Class Name: " + stringClass.getName());
System.out.println("Superclass Name: " + superClass.getName());
System.out.println("Implemented Interfaces: ");
for (Class<?> iface : interfaces) {
System.out.println(" " + iface.getName());
}
System.out.println("Is Public Class: " + isPublic);
System.out.println("Field Value: " + new String(charArray));
System.out.println("String Length: " + length);
}
}
文章来源:https://blog.csdn.net/weixin_52236586/article/details/135181677
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!