【Java笔记(16)】反射与类操作之获取类属性值的设置与获取,类属性的类型,接触封装

一、主要方法

 * 获取本类所有权限属性(Class):    public Field[] getDeclaredFields() throws SecurityException {}
 * <p>
 * 获取该类所有公有权限属性(Class):    public Field[] getFields() throws SecurityException {}
 * <p>
 * 设置属性值(Field):        public void set(Object obj, Object value)
 *                              throws IllegalArgumentException, IllegalAccessException{}
 * <p>
 * 获取属性值(Field):    public Object get(Object obj)
 *                          throws IllegalArgumentException, IllegalAccessException{}
 * <p>
 * 解除封装(Field):    public void setAccessible(boolean flag) {}
 * <p>
 * 获取属性类型(Field):    public Class<?> getType() {}
 * <p>
 * 获得简单名称(Class):    public String getSimpleName() {}

二、完整代码

package reflect.classhandle;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;

/**
 * 获取类成员属性
 * <p>
 * 获取本类所有权限属性(Class):    public Field[] getDeclaredFields() throws SecurityException {}
 * <p>
 * 获取该类所有公有权限属性(Class):    public Field[] getFields() throws SecurityException {}
 * <p>
 * 设置属性值(Field):        public void set(Object obj, Object value)
 *                              throws IllegalArgumentException, IllegalAccessException{}
 * <p>
 * 获取属性值(Field):    public Object get(Object obj)
 *                          throws IllegalArgumentException, IllegalAccessException{}
 * <p>
 * 解除封装(Field):    public void setAccessible(boolean flag) {}
 * <p>
 * 获取属性类型(Field):    public Class<?> getType() {}
 * <p>
 * 获得简单名称(Class):    public String getSimpleName() {}
 *
 * @ClassName: GetClassField
 * @Author: Xlu
 * @Date: 2020-06-14 13:40
 * @Version 11
 **/
public class GetClassField {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        Class<?> cls = Class.forName("reflect.classhandle.GetClassFieldDome");
        Object obj = cls.getDeclaredConstructor().newInstance();

        /**
         * 获取本类所有权限属性
         * private java.lang.String reflect.classhandle.GetClassFieldDome.name
         * private int reflect.classhandle.GetClassFieldDome.age
         */
        Field[] declaredFields = cls.getDeclaredFields();
        for (Field f : declaredFields) {
            System.out.println(f);
        }

        System.out.println("-----------------");

        /**
         * 获取所有公有权限属性
         * public java.lang.String reflect.classhandle.AbstractField.sex
         */
        Field[] fields = cls.getFields();
        for (Field f : fields) {
            System.out.println(f);
        }

        //得到本类中的属性
        Field field = cls.getDeclaredField("name");

        /**
         * 解除封装
         * 没有接触封装的话会报错
         * java.lang.IllegalAccessException: class reflect.classhandle.GetClassField cannot access a member of class reflect.classhandle.GetClassFieldDome with modifiers "private"
         */
        field.setAccessible(true);

        //设置属性值
        field.set(obj , "张三");

        /**
         * 得到属性值
         * 张三
         */
        System.out.println(field.get(obj));

        /**
         * 得到属性类型
         * class java.lang.String
         * String
         */
        System.out.println(field.getType());
        System.out.println(field.getType().getSimpleName());


    }
}

class GetClassFieldDome extends AbstractField {
    private String name;
    private int age;

    public GetClassFieldDome() {

    }

    public GetClassFieldDome(String name , int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "GetClassFieldDome{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

abstract class AbstractField {
    public String sex;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值