您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页java declared_java反射机制中的getDeclaredField()

java declared_java反射机制中的getDeclaredField()

来源:化拓教育网

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

getDeclaredField()的一个例子

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

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字符串。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务