通过反射机制获取Field

Field : Field翻译为字段,其实就是属性/成员

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

简单运用:直接看代码

1)先建立一个Student类

public class Student {
    //4个Field,分别采用了不同的访问控制权限修饰符
    public int no;
    private String name;
    protected int age;
    boolean sex;
}

2)main函数
在这里插入图片描述
要用到的Field类中的方法:
在这里插入图片描述

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public class ReflectField {
    public static void main(String[] args) throws ClassNotFoundException {
        //获取整个类
        Class studentClass=Class.forName("com.java.note.Student");

        String className = studentClass.getName();
        System.out.println("完整类名:"+ className);//com/java/note/Student.java

        String simpleName = studentClass.getSimpleName();
        System.out.println("简类名:"+simpleName);
        System.out.println("---------------------");
        //获取类中的所有pubic修饰的Field
        Field[] fields= studentClass.getFields();
        System.out.println("getFields数量:"+fields.length);
        //不在同包下又没有继承关系,只能获取public修饰的属性

        Field f=fields[0];
        // 取出这个Field它的名宇
        String fieldName = f.getName();
        System.out.println("getFields数组的第一个值:"+fieldName);

        //获取所有的Field
        Field[] fs = studentClass.getDeclaredFields();
        System.out.println("getDeclaredFields数量:"+fs.length);
        System.out.println("========getDeclaredFields值===========");
        //遍历
        int i=1;
        for(Field field : fs){
            //获取属性的修饰符列表
            int j=field.getModifiers();//返回值是int类型,是一个数字,每个数字是修饰符的代号
            System.out.println("第"+i+"个Field值的修饰符代号:"+j);
            //可以将这个“代号”数完转换成“字符串”吗 ?
            //用上面的toString(int mod)方法
            String modifierString = Modifier.toString(j);
            System.out.println("第"+i+"个Field值的修饰符代号转换成字符串后:"+modifierString);

            //获取属性的类型
            Class fieldType = field.getType();
            String fName1 = fieldType.getName();
            System.out.println("第"+i+"个Field值的数据类型:"+fName1);

            String fName = fieldType.getSimpleName();
            System.out.println("第"+i+"个Field值的简数据类型:"+fName);
            //获取属性的名字
            System.out.println("第"+i+"个Field值名字:"+field.getName());
            System.out.println("-----------------");
            i++;
        }
    }
}

运行结果:

完整类名:com.java.note.Student
简类名:Student
---------------------
getFields数量:1
getFields数组的第一个值:no
getDeclaredFields数量:4
========getDeclaredFields值===========
第1个Field值的修饰符代号:1
第1个Field值的修饰符代号转换成字符串后:public
第1个Field值的数据类型:int
第1个Field值的简数据类型:int
第1个Field值名字:no
-----------------
第2个Field值的修饰符代号:2
第2个Field值的修饰符代号转换成字符串后:private
第2个Field值的数据类型:java.lang.String
第2个Field值的简数据类型:String
第2个Field值名字:name
-----------------
第3个Field值的修饰符代号:4
第3个Field值的修饰符代号转换成字符串后:protected
第3个Field值的数据类型:int
第3个Field值的简数据类型:int
第3个Field值名字:age
-----------------
第4个Field值的修饰符代号:0
第4个Field值的修饰符代号转换成字符串后:
第4个Field值的数据类型:boolean
第4个Field值的简数据类型:boolean
第4个Field值名字:sex
-----------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值