一、获取属性结构
1、getFields()
getFields():获取当前运行时类及其父类中声明为public访问权限的属性
Demo:
1 @Test
2 public void test1() {
3
4 Class clazz = Person.class;
5
6 //获取属性结构
7 //getFields():获取当前运行时类及其父类中声明为public访问权限的属性
8 Field[] fields = clazz.getFields();
9 for (Field f : fields) {
10 System.out.println(f);
11 }
12 }
运行结果:
2、getDeclaredFields()
getDeclaredFields():获取当前运行时类中声明的所有属性。(不包含父类中声明的属性)
Demo:
1 @Test
2 public void test2() {
3
4 Class clazz = Person.class;
5
6 //获取属性结构
7 //getDeclaredFields():获取当前运行时类中声明的所有属性。(不包含父类中声明的属性)
8 Field[] declaredFields = clazz.getDeclaredFields();
9 for(Field f : declaredFields){
10 System.out.println(f);
11 }
12 }
运行结果:
3、getField(String name)
getField(String name):根据字段名来获取运行时类中 public 修饰的成员变量
Demo:
1 @Test
2 public void test3() throws NoSuchFieldException {
3
4 Class clazz = Person.class;
5
6 //获取属性结构
7 //getField():根据字段名来获取当前运行时类中 public 修饰的成员变量
8 Field field = clazz.getField("id");
9 System.out.println(field);
10 }
4、getDeclaredField(String name)
getDeclaredField(String name):根据字段名来获取当前运行时类中的成员变量,忽略修饰符;
Demo:
1 @Test
2 public void test4() throws NoSuchFieldException {
3
4 Class clazz = Person.class;
5
6 //获取属性结构
7 //getField():根据字段名来获取获取当前运行时类中 public 修饰的成员变量
8 Field field = clazz.getDeclaredField("name");
9 System.out.println(field);
10 }
二、获取成员变量的信息
一个类中的成员变量可以有修饰符,数据类型和变量名等信息。这些都可以获取:
常用方法:
1 2 3 4 5 | public int getModifiers() 以整数形式返回此Field的修饰符 public Class<?> getType() 得到Field的属性类型 public String getName() 返回Field的名称。 |
Demo:
1 @Test
2 public void test1(){
3 Class clazz = Person.class;
4 Field[] declaredFields = clazz.getDeclaredFields();
5 for(Field f : declaredFields){
6 //1.权限修饰符
7 int modifier = f.getModifiers();
8 System.out.print(Modifier.toString(modifier) + "\t");
9
10 //2.数据类型
11 Class type = f.getType();
12 System.out.print(type.getName() + "\t");
13
14 //3.变量名
15 String fName = f.getName();
16 System.out.print(fName);
17
18 System.out.println();
19 }
20 }
运行结果:
(1)修饰符
获取的修饰符返回值是一个 int,而不是期望的字符串,这是因为在 Modifier 类中声明了对应的常量值。
调用 Modifier 类的 toString() 方法就可以获取对应值的修饰符。
(2)数据类型
调用属性的 getType() 就可以获取数据类型,而它也是一个 Class 对象。
三、
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器