圖像和聲音文件(2)
另一個經(jīng)常使用資源的地方是程序的國際化。與語言相關(guān)的字符串,如消息彩用?5.7.4果沒有找到資源,則標(biāo)簽都存放在資源文件中,每種語言對應(yīng)一個文件。國際化API (internationalizafioa! 利用反射分析類的在卷Ⅱ的第7章中討論。這些API支持一種標(biāo)準(zhǔn)方法來組織和訪問本地化文件。 下面簡要介紹反射機(jī)制
程序清單5413的程序展示了資源加載。(先不用擔(dān)心讀取文本和顯示對話框的員 在java.lang.reflect包些內(nèi)容稍后會詳細(xì)介紹。)編譯、構(gòu)建一個JAR文件并執(zhí)行: 法和構(gòu)造器。這三個類都時還不知道的對象字段 第5章 繼 承 209
要做到這一點(diǎn),關(guān)鍵方法是Field類中的get萬)
通過getDeclaredFields得到的對象). obj是某個包合如果主是 個Fleld類型的對象(例
如。個對象,其值為ob的當(dāng)前字段值 字段的類的對象。f.get(obj)將返回
class cl = harry.getClass(); 這樣說起來顯得有點(diǎn)抽象, 下面來看 個程序
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"
當(dāng)然,不僅可以獲得值,也可以設(shè)置值
字段設(shè)置為新值。?調(diào)用f.set(obj,value)將把對象ob的f表示的
實(shí)際上,這段代碼存在一個問題。由于name是一個私有字段,所以get和3et方法會拋出一個IllegalaccessException。只能對可以訪問的字段使用gt和t方法。Java安全機(jī)制允許查看一個對象有哪些字段,但是除非擁有訪問權(quán)限,否則不允許讀寫那些字段的值。
反射機(jī)制的默認(rèn)行為受限于Java的訪問控制。