最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 反射之私有字段和方法詳細(xì)介紹

 更新時(shí)間:2012年11月26日 12:08:19   作者:  
本文將介紹Java 反射之私有字段和方法的應(yīng)用,需呀了解的朋友可以參考下
盡管我們通常認(rèn)為通過(guò)JAVA的反射機(jī)制來(lái)訪問(wèn)其它類(lèi)的私有字段和私有方法是可行的,其實(shí)并沒(méi)有那么困難。
注釋?zhuān)?/STRONG>只有在單獨(dú)的JAVA程序中運(yùn)行該代碼才有效,就像你做一些單元測(cè)試或者常規(guī)的程序。如果你嘗試在JAVA APPLET內(nèi)使用該方法,你需要稍稍修改SecurityManager。但是,因?yàn)槟悴皇墙?jīng)常需要與它打交道,這里也就不再贅述了。
這里是本次內(nèi)容的列表:
1.訪問(wèn)私有字段。
2.訪問(wèn)私有方法。
訪問(wèn)私有字段:
為了訪問(wèn)私有字段,你需要調(diào)用Class.getDeclaredField(String name)或者Class.getDeclaredFields()方法。方法Class.getField(String name)和Class.getFields()僅僅返回共有的字段,所以它們都無(wú)法起到作用。這里有一個(gè)例子,該例子中有一個(gè)包含私有字段的類(lèi),在該類(lèi)下面有通過(guò)反射訪問(wèn)私有字段的代碼。
復(fù)制代碼 代碼如下:

public class PrivateObject {
private String privateString = null; //聲明為私有字段
public PrivateObject(String privateString) {
this.privateString = privateString;
}
}

復(fù)制代碼 代碼如下:

PrivateObject privateObject = new PrivateObject("The Private Value");//實(shí)例化對(duì)象
Field privateStringField = PrivateObject.class.
getDeclaredField("privateString");
privateStringField.setAccessible(true);//允許訪問(wèn)私有字段
String fieldValue = (String) privateStringField.get(privateObject);//獲得私有字段值
System.out.println("fieldValue = " + fieldValue);

這個(gè)代碼會(huì)打印出文本"fieldValue = The Private Value",而該值正好是對(duì)象PrivateObject的私有字段privateString的值。
注意到我們使用了方法PrivateObject.class.getDeclaredfield("privateString")。正是這個(gè)調(diào)用這個(gè)方法返回了私有字段。這個(gè)方法僅僅根據(jù)指定的類(lèi)返回字段,不會(huì)返回父類(lèi)申明的字段。
另外仔細(xì)觀察加粗的語(yǔ)句。通過(guò)調(diào)用 Field.setAccessible(true),你關(guān)掉了對(duì)于這個(gè)指定字段實(shí)例的訪問(wèn)檢查,僅僅對(duì)反射有效?,F(xiàn)在你能訪問(wèn)它了,不管它是私有的,保護(hù)的或是默認(rèn)的(default),即時(shí)調(diào)用者并不在該范圍中。你仍然不能通過(guò)常規(guī)方法訪問(wèn)該字段,因?yàn)榫幾g器不允許。
訪問(wèn)私有方法
為了訪問(wèn)一個(gè)私有方法,你需要調(diào)用Class.getDeclaredMethod(String name,Class[] parameterTypes)或者Class.getDeclaredMethods()方法。方法Class.getMethod(String name,Class[] parameterTypes)和Class.getMethods()僅僅返回公有方法,所以它們不會(huì)起到作用。下面是一個(gè)簡(jiǎn)單的例子,該例子中有一個(gè)擁有私有方法的類(lèi),類(lèi)下面是通過(guò)反射機(jī)制訪問(wèn)私有方法的代碼。
復(fù)制代碼 代碼如下:

public class PrivateObject {
private String privateString = null;
public PrivateObject(String privateString) {
this.privateString = privateString;
}
private String getPrivateString(){//私有方法
return this.privateString;
}
}

復(fù)制代碼 代碼如下:

PrivateObject privateObject = new PrivateObject("The Private Value");
Method privateStringMethod = PrivateObject.class.
getDeclaredMethod("getPrivateString", null);
privateStringMethod.setAccessible(true);
String returnValue = (String)
privateStringMethod.invoke(privateObject, null);
System.out.println("returnValue = " + returnValue);

這個(gè)代碼例子會(huì)打印出文本"returnValue = The private Value",該值正好是私有方法的返回值。

相關(guān)文章

  • Java獲取Jar、War包路徑并生成可編輯修改的本地配置文件

    Java獲取Jar、War包路徑并生成可編輯修改的本地配置文件

    這篇文章主要給大家介紹了關(guān)于Java如何獲取Jar、War包路徑并生成可編輯修改的本地配置文件,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-01-01
  • windows下java -jar 后臺(tái)運(yùn)行以及殺死后臺(tái)進(jìn)程的操作

    windows下java -jar 后臺(tái)運(yùn)行以及殺死后臺(tái)進(jìn)程的操作

    這篇文章主要介紹了windows下java -jar 后臺(tái)運(yùn)行以及殺死后臺(tái)進(jìn)程的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • 如何在Spring Boot中建立連接及測(cè)試

    如何在Spring Boot中建立連接及測(cè)試

    對(duì)于剛接觸MQTT的開(kāi)發(fā)者來(lái)說(shuō),了解如何在Spring Boot項(xiàng)目中集成MQTT客戶端并建立連接是邁向?qū)嶋H應(yīng)用的重要一步,今天,我將分享一個(gè)詳細(xì)的入門(mén)指南,帶你一步步在Spring Boot中建立MQTT連接,并通過(guò)JUnit進(jìn)行簡(jiǎn)單的單元測(cè)試,感興趣的朋友一起看看吧
    2024-12-12
  • java讀取配置文件(properties)的時(shí)候,unicode碼轉(zhuǎn)utf-8方式

    java讀取配置文件(properties)的時(shí)候,unicode碼轉(zhuǎn)utf-8方式

    這篇文章主要介紹了java讀取配置文件(properties)的時(shí)候,unicode碼轉(zhuǎn)utf-8方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • SpringCloud OpenFeign概述與使用

    SpringCloud OpenFeign概述與使用

    OpenFeign源于Netflix的Feign,是http通信的客戶端。屏蔽了網(wǎng)絡(luò)通信的細(xì)節(jié),直接面向接口的方式開(kāi)發(fā),讓開(kāi)發(fā)者感知不到網(wǎng)絡(luò)通信細(xì)節(jié)。所有遠(yuǎn)程調(diào)用,都像調(diào)用本地方法一樣完成
    2023-01-01
  • java實(shí)現(xiàn)在復(fù)制文件時(shí)使用進(jìn)度條(java實(shí)現(xiàn)進(jìn)度條)

    java實(shí)現(xiàn)在復(fù)制文件時(shí)使用進(jìn)度條(java實(shí)現(xiàn)進(jìn)度條)

    在對(duì)大文件操作時(shí),可能會(huì)需要些時(shí)間,此時(shí)為用戶提供進(jìn)度條提示是非常常見(jiàn)的一項(xiàng)功能,這樣用戶就可以了解操作文件需要的時(shí)間信息。本實(shí)例為大家介紹了在復(fù)制大的文件時(shí)使用的進(jìn)度條提示,需要注意的是,只有在讀取文件超過(guò)2秒時(shí),才會(huì)顯示進(jìn)度條
    2014-03-03
  • java-collection中的null,isEmpty用法

    java-collection中的null,isEmpty用法

    這篇文章主要介紹了java-collection中的null,isEmpty用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Spring-Boot 訪問(wèn)外部接口的方案總結(jié)

    Spring-Boot 訪問(wèn)外部接口的方案總結(jié)

    在Spring-Boot項(xiàng)目開(kāi)發(fā)中,存在著本模塊的代碼需要訪問(wèn)外面模塊接口,或外部url鏈接的需求,針對(duì)這一需求目前存在著三種解決方案,下面將對(duì)這三種方案進(jìn)行整理和說(shuō)明,對(duì)Spring-Boot 訪問(wèn)外部接口方案感興趣的朋友跟隨小編一起看看吧
    2022-12-12
  • Spring框架學(xué)習(xí)筆記之方法注解@Bean的使用

    Spring框架學(xué)習(xí)筆記之方法注解@Bean的使用

    這篇文章主要給大家介紹了關(guān)于Spring框架學(xué)習(xí)筆記之方法注解@Bean使用的相關(guān)資料,這是一個(gè)我們很常用的注解,作用是指示一個(gè)方法生成一個(gè)由Spring管理的Bean,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • idea的使用之關(guān)于tomcat熱部署的教程

    idea的使用之關(guān)于tomcat熱部署的教程

    這篇文章主要介紹了idea的使用之關(guān)于tomcat熱部署的教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09

最新評(píng)論

乌鲁木齐县| 开江县| 武定县| 福海县| 岳普湖县| 金平| 满洲里市| 通榆县| 婺源县| 梁山县| 武定县| 灯塔市| 银川市| 平远县| 东光县| 泰来县| 丽江市| 喜德县| 美姑县| 蓝田县| 宁波市| 洪洞县| 乌兰浩特市| 洞口县| 塘沽区| 棋牌| 井陉县| 唐河县| 连城县| 依兰县| 定陶县| 温泉县| 丰原市| 民和| 镇安县| 古浪县| 芒康县| 揭阳市| 资中县| 五华县| 仁怀市|