博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java反射机制中的getDeclaredField()
阅读量:5980 次
发布时间:2019-06-20

本文共 1620 字,大约阅读时间需要 5 分钟。

  hot3.png

反射机制:所谓的反射机制就是java语言在运行时拥有一项自观的能力。通过这种能力可以彻底的了解自身的情况为下一步的动作做准备。

getDeclaredField()的一个例子

http://technet.microsoft.com/zh-cn/library/aa989722 代码来源

import java.lang.reflect.Field;

import java.util.Date;
public class Program {
    public Program() {
    }
    public Program(String str, Date date, int i) {
        this.str = str;
        this.date = date;
        this.i = i;
    }
    private String str = "Hello";
    private Date date = new Date();
    protected int i = 0;
    public int getI() {
        return i;
    }
    public String getStr() {
        return str;
    }
    public static void main(String[] args) throws IllegalArgumentException,
            IllegalAccessException {
        try {
            Program program = new Program();
            Class progClass = program.getClass();
            //通过反射机制,获取到类Program中的str
            Field strField1 = progClass.getDeclaredField("str");
            //输出private java.lang.String Program.str            
            System.out.println("Field found: " + strField1.toString());
            //同上
            Field dateField = progClass.getDeclaredField("date");
            System.out.println("Field found: " + dateField.toString());
            //同上
            Field iField = progClass.getDeclaredField("i");
            System.out.println("Field found: " + iField.toString());
            
            //我想说的是这一点,这里能获取到类Program中的str并对其修改。
            //Program类中没有对str设置的setStr()方法,而且使用了private,
            //这是不允许访问的。
            //但是我们能通过反射机制,从而获取private类型的值,并直接改。
            Field strField = progClass.getDeclaredField("str");
            strField.set(program, "我是Str字符串。");
            //输出:我是Str字符串。
            System.out.println(program.getStr());
            
        } catch (NoSuchFieldException ex) {
            System.out.println(ex.toString());
        }
    }
}

输出是:

Field found: private java.lang.String Program.str

Field found: private java.util.Date Program.date
Field found: protected int Program.i
我是Str字符串。

转载于:https://my.oschina.net/swords/blog/117357

你可能感兴趣的文章
Git:配置
查看>>
神经系统知识普及
查看>>
Spring可扩展Schema标签
查看>>
c++ STL unique , unique_copy函数
查看>>
http://miicaa.yopwork.com/help/overall/
查看>>
浅谈关于特征选择算法与Relief的实现
查看>>
mybatis-spring 项目简介
查看>>
Wireshark抓取RTP包,还原语音
查看>>
Behavioral模式之Memento模式
查看>>
Work Management Service application in SharePoint 2016
查看>>
Dos 改动IP 地址
查看>>
Laravel 源码解读:php artisan make:auth
查看>>
【转】ionic run android 成功launch success,但是genymotion虚拟机没有显示
查看>>
苹果在GitHub上正式开源iOS内核源码
查看>>
测试人员面临的测试挑战和必备技能
查看>>
使用Flutter之后,我们的CPU占用率降了50%
查看>>
同事反馈环:为什么度量和会议还不够充分
查看>>
[转]十问 Linux 虚拟内存管理 (glibc)
查看>>
老司机带你深入浅出 Collection
查看>>
查询系统-vba
查看>>