
java反射介绍
Class:标识某个具体的类或接口。 Constructor:封装了类的构造方法。 Method:提供关于类或接口的方法的信息。 Field:提供有关类或接口的属性信息,以及对其动态访问的权限。
发布日期:2025-04-02 02:16:20
浏览次数:8
分类:精选文章
本文共 3805 字,大约阅读时间需要 12 分钟。
.reverseTranslate {font-family: Arial, sans-serif;line-height: 1.6;margin: 20px 0;}
反射(Reflection)是Java中非常重要的一项机制,也称为 reflection。它使Java在运行时对自身进行检查,并能够直接操作程序的内部属性或方法。
Java反射机制中的常用类
反射API中包含大量关于Java元数据的信息,包括:package、type parameters、superclass、implemented interfaces、inner classes、outer classes、fields、constructors、methods、modifiers等。常用的类包括:
Class类
Class类是反射机制的起始点,获取Class对象的方式有多种:
- getClass():通过指定类的对象调用,例如
Class cl = str.getClass();
。 - getSuperclass():通过Class类调用,返回类的父类,例如
Class clsup = cl.getSuperClass();
。 - Class.forName():动态加载类,即
Class cl2 = Class.forName("java.lang.String");
。 - .Class:通过类名访问类,即
Class cl3 = String.Class;
。 - TYPE语法:用于基本类型类的访问,如
Class cl4 = Integer.TYPE;
。
Class类的重要方法包括:
public static Class forName(String className)
:动态加载类。public T newInstance()
:根据类创建新实例。public ClassLoader getClassLoader()
:获取类的类加载器。public String getName()
:获取类的名称。public native Class getSuperclass()
:获取类的父类。public java.net.URL getResource(String name)
:获取资源路径。Constructor类
Constructor类用于反射类的构造器信息,常用的方法包括:
Constructor getConstructor(Class[] params)
:根据参数类型获取构造器。Constructor[] getConstructors()
:获取所有公共和非公constructors。Constructor getDeclaredConstructor(Class[] params)
:获取指定参数的声明构造器。Constructor[] getDeclaredConstructors()
:获取所有声明的构造器。
Constructor类的重要方法包括:
public String getName()
:获取构造器名称。public native int getModifiers()
:获取修饰符。public Class[] getParameterTypes()
:获取参数类型。public Object newInstance(Object... initargs)
:创建新实例。
Method类
Method类用于反射类和接口的方法信息,常用的方法包括:
Method getMethod(String name, Class[] params)
:获取指定名称和参数的方法。Method[] getMethods()
:获取所有公方法,包括继承的和接口的。Method getDeclaredMethod(String name, Class[] params)
:获取指定名称和参数的声明方法。Method[] getDeclaredMethods()
:获取该类所有声明方法。
Method类的重要方法包括:
public String getName()
:获取方法名称。public native int getModifiers()
:获取修饰符。public Class[] getParameterTypes()
:获取参数类型。public Object invoke(Object obj, Object... args)
:调用目标对象的方法。
Field类
Field类用于反射类和接口的属性信息,常用的方法包括:
Field getField(String name)
:获取指定名称的属性字段。Field[] getFields()
:获取所有公属性字段。Field getDeclaredField(String name)
:获取指定名称的声明属性字段。Field[] getDeclaredFields()
:获取该类所有声明属性字段。
Field类的重要方法包括:
public String getName()
:获取字段名称。public native int getModifiers()
:获取字段修饰符。public Class getType()
:获取字段类型。public Object get(Object obj)
:获取指定对象的字段值。
反射应用示例
以下是一个通过反射反射阿里巴巴样例代码的示例:
package net.peace.ref;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.Stack;public class TestRef { public static void main(String[] args) { try { Class c = Class.forName("java.util.Stack"); Method[] ms = c.getDeclaredMethods(); for (Method m : ms) { System.out.println(m.getModifiers() + " " + m.getReturnType() + " " + m.getName()); Class[] cc = m.getParameterTypes(); for (Class p : cc) { System.out.println(p.getName()); } Class[] ce = m.getExceptionTypes(); for (Class p : ce) { System.out.println(p.getName()); } } System.out.println("******************************"); Constructor[] con = c.getDeclaredConstructors(); for (Constructor p : con) { System.out.println(p); } System.out.println("******************************"); Field[] field = c.getDeclaredFields(); for (Field f : field) { System.out.println(f); } } catch (ClassNotFoundException e) { e.printStackTrace(); } }}
上述代码展示了如何通过反射获取Stack类的方法、构造器和字段,并动态创建Stack对象、调用Stack方法、设置Stack字段值等操作。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年05月05日 15时28分25秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
a推b等价于非a或b_AB胶/蜜月胶常见问题的原因分析及解决方法
2023-01-24
c++ string取子串_Integer与String的设计哲学
2023-01-24
c++ 数组批量赋值_数组之间不能赋值?穿个马甲吧!
2023-01-24
cad模糊查询符号_mysql 正则模式和like模糊查询
2023-01-24
ctrl c 和 ctrl v 不能用了_神奇操作,原来CTRL键还能这么用
2023-01-24
cytoscape安装java_Cytoscape史上最全攻略
2023-01-24
c语言程序设计年历显示,C语言程序设计报告《万年历》.doc
2023-01-24
C语言程序设计梁海英答案,1.5 习题
2023-01-24
c语言编写单片机中断,C语言AVR单片机中断程序写法
2023-01-24
ddr2的上电顺序_S5PV210 DDR2初始化 28个步骤总结
2023-01-24
excel中最常用的30个函数_Excel玩转数据分析常用的43个函数!
2023-01-24
flink sql设置并行度_Flink 参数配置和常见参数调优
2023-01-24
go 字符串替换_Go 每日一库之 quicktemplate
2023-01-24
html上传图片直接保存到数据库中,Editor上传图片路径存入数据库中怎么弄?
2023-01-24
jaccard相似度_自然语言处理之文本相似度计算
2023-01-24
java书籍_还搞不定Java多线程和并发编程面试题?你可能需要这一份书单!
2023-01-24