随笔 - 1162  文章 - 0  评论 - 16  阅读 - 59万 

一、获取属性结构

  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 对象。

    

 

三、

 

posted on   格物致知_Tony  阅读(215)  评论(0编辑  收藏  举报
编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
点击右上角即可分享
微信分享提示

目录导航