java中的反射
java中的反射
能够分析信息的能力叫反射
目录
1.获取类的方法
-
Class.forName(路径)
-
类.class
-
对象.getClass()
2.类对象常用功能
一、构造方法
-
获取指定的公共构造器
- 获取构造方法 getConstructor()可以根据构造方法参数类型的不同,传入对应的类对象,即可获得指定的构造方法
- 创建对象 newInstance()
- 如果使用无参构造方法,此操作可以简化:类对象.newInstance() 来创建
-
获取指定的所有构造器(公共+非公共)
- getDeclaredConstructor()
-
获取所有的公共构造方法
-
getConstructors
// 反射获取Class对象 Class c = Class.forName("demo0425.Person"); // 获得所有构造方法 Constructor[] constructors = c.getConstructors(); for (Constructor constructor : constructors) { System.out.println(constructor); }
-
-
获取所有的构造方法(公共+非公共)
- getDeclaredConstructors()
二、成员变量
-
获取指定公共成员变量
- getField()
- field.set(Object obj,Object value)
- field.get(Object obj)
Person o = new Person(); Class c1 = Class.forName("demo0425.Person"); System.out.println("====获取指定字段="); Field field = c1.getField("name"); field.set(o, "Jerry"); System.out.println(field.get(o));
-
获取指定所有成员变量(公共+非公共)
-
getDeclaredField()
System.out.println("====获取私有字段="); Field field2 = c1.getDeclaredField("age");// 获得私有字段 // 设置私有字段可访问 field2.setAccessible(true); field2.set(o, 25); System.out.println(field2.get(o));
-
-
获取所有公共的成员变量
-
getFields()
System.out.println("======获取所有字段,不包括私有字段="); Field[] fields = c1.getFields(); for (Field field1 : fields) { System.out.println(field1); }
-
-
获取所有成员变量(公共+非公共)
-
getDeclaredFields()
-
非公共需要使用setAccessible(true);
System.out.println("======获取所有字段,包括私有字段==========="); Field[] declaredFields = c1.getDeclaredFields(); for (Field declaredField : declaredFields) { System.out.println(declaredField); }
-
三、方法
-
获取指定公共方法
- getMethod()
- 根据方法名获取以及参数类型对应的类对象来指定获得
- 调用方法invoke(Object obj,Object… args)
-
获取所有公共方法
- getMethods()
-
获取指定方法(公共+非公共)
- getDeclaredMethod()
-
获取所有方法(公共+非公共)
- getDeclaredMethods()
注意:非公共使用时需要使用:setAccessible(true)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?