反射之------获得运行时类的指定属性及其赋值和获取属性值的操作

复制代码
package com.heima.userJSTL;

import java.lang.reflect.Field;

public class GetFiledTheOne {
    public static void main(String[] args) throws Exception {
 /*       //获取运行时类的指定属性并且进行复制和获取属性值的操作
        //方法1(此方法只能获得被public修饰的属性,所以在实际开发中不太常用)
        Class<Person> aClass = Person.class;
        Field name = aClass.getField("name");//获得了当前运行时类的实例属性
        //赋值
        //因为是实例属性,所以我们需要提前穿件一个对象对这个对象进行该属性的赋值
        //创建对象
        Person person = aClass.newInstance();
        //对person对象的name属性进行复制
        name.set(person,"张三");//对person对象的name属性赋值张三
        Object o = name.get(person);//获得person对象的name属性
        System.out.println(o);*/

        //方法2(在开发中我们一般使用方法2)
        Class<Person> aClass = Person.class;
      /*  Field age = aClass.getDeclaredField("age");//age属性是被private修饰的
        //创建当前运行时类的对象
        Person person = aClass.newInstance();
        age.setAccessible(true);//暴力反射,设置当前属性是可以被访问(赋值和修改)的
        //对age进行赋值,但是赋值之前需要进行暴力反射操作
        age.set(person, 23);
        Object o = age.get(person);
        System.out.println(o);*/
        //获取类属性
        Field aaa = aClass.getDeclaredField("aaa");
        aaa.setAccessible(true);//暴力反射
        aaa.set(null,23);
        Object o1 = aaa.get(null);
        System.out.println(o1);


    }
}
复制代码

 

posted @ 2020-10-09 10:47  Joker-0927  阅读(169)  评论(0)    收藏  举报
编辑推荐:
· 通过 Canvas 将后端发来的一帧帧图片渲染成“视频”的实现过程
· 当加密ID需要变成Guid:为什么我选择了AES-CBC而非GCM?
· 基于 epoll 的协程调度器——零基础深入浅出 C++20 协程
· 下划线字段在golang结构体中的应用
· SQL Server也能玩正则表达式?
阅读排行:
· C#实现屏幕墙:同时监控多个电脑桌面(支持Windows、信创Linux、银河麒麟、统信UOS)
· 我的AI自学路线,可能对你有用
· 通过Canvas在网页中将后端发来的一帧帧图片渲染成“视频”的实现过程
· 如何做一个纯净版的ABP vNext 脚手架
· 告别 DOM 的旧时代:从零重塑 Web 渲染的未来
// 侧边栏目录
点击右上角即可分享
微信分享提示