图像和声音文件(2)
另一个经常使用资源的地方是程序的国际化。与语言相关的字符串,如消息彩用 5.7.4果没有找到资源,则标签都存放在资源文件中,每种语言对应一个文件。国际化API (internationalizafioa! 利用反射分析类的在卷Ⅱ的第7章中讨论。这些API支持一种标准方法来组织和访问本地化文件。 下面简要介绍反射机制
程序清单5413的程序展示了资源加载。(先不用担心读取文本和显示对话框的员 在java.lang.reflect包些内容稍后会详细介绍。)编译、构建一个JAR文件并执行: 法和构造器。这三个类都时还不知道的对象字段 第5章 继 承 209
要做到这一点,关键方法是Field类中的get万)
通过getDeclaredFields得到的对象). obj是某个包合如果主是 个Fleld类型的对象(例
如。个对象,其值为ob的当前字段值 字段的类的对象。f.get(obj)将返回
class cl = harry.getClass(); 这样说起来显得有点抽象, 下面来看 个程序
new Employee("Harn
yar harry Hacker", 50000, 10、 1,1989);
the class object representing Esployee
sield f = cl.getDeclaredField("hame")
the name field of the Enployee class
abject v=f.get(harry);
ectevalve of the name field of the harry object, 1..
// the String object "Harry Hacker"
当然,不仅可以获得值,也可以设置值
字段设置为新值。 调用f.set(obj,value)将把对象ob的f表示的
实际上,这段代码存在一个问题。由于name是一个私有字段,所以get和3et方法会抛出一个IllegalaccessException。只能对可以访问的字段使用gt和t方法。Java安全机制允许查看一个对象有哪些字段,但是除非拥有访问权限,否则不允许读写那些字段的值。
反射机制的默认行为受限于Java的访问控制。