国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

反射(筆記整理)

QiuyueZhong / 2611人閱讀

摘要:調(diào)用構(gòu)造函數(shù)對(duì)該對(duì)象進(jìn)行初始化。,并將該字節(jié)碼文件封裝成了對(duì)象。清單,獲取字節(jié)碼文件中的字段。

1、什么是反射技術(shù)?
動(dòng)態(tài)獲取指定類以及類中的內(nèi)容(成員),并運(yùn)行其內(nèi)容。
應(yīng)用程序已經(jīng)運(yùn)行,無法在其中進(jìn)行new對(duì)象的建立,就無法使用對(duì)象。這時(shí)可以根據(jù)配置文件的類全名去找對(duì)應(yīng)的字節(jié)碼文件,并加載進(jìn)內(nèi)存,并創(chuàng)建該類對(duì)象實(shí)例。這就需要使用反射技術(shù)完成

2、獲取class對(duì)象的三種方式
獲取Class對(duì)象的方式一:
通過對(duì)象具備的getClass方法(源于Object類的方法)。有點(diǎn)不方便,需要用到該類,并創(chuàng)建該類的對(duì)象,再調(diào)用getClass方法完成。

Person p = new Person();//創(chuàng)建Peron對(duì)象
Class clazz = p.getClass();//通過object繼承來的方法(getClass)獲取Person對(duì)應(yīng)的字節(jié)碼

文件對(duì)象

獲取Class對(duì)象的方式二:

    每一個(gè)類型都具備一個(gè)class靜態(tài)屬性,通過該屬性即可獲取該類的字節(jié)碼文件對(duì)象。比第一種簡(jiǎn)單了一些,僅用一個(gè)靜態(tài)屬性就搞定了。但是,還是有一點(diǎn)不方便,還必須要使用到該類。
    
    Class clazz = Person.class;

獲取Class對(duì)象方式三:

     * 去找找Class類中是否有提供獲取的方法呢?
     * 找到了,static Class forName(className);
     * 相對(duì)方便的多,不需要直接使用具體的類,只要知道該類的名字即可。
     * 而名字完成可以作為參數(shù)進(jìn)行傳遞 ,這樣就可以提高擴(kuò)展性。
     * 所以為了動(dòng)態(tài)獲取一個(gè)類,第三種方式最為常用。 
Class clazz = Class.forName("com.bean.Person");//必須類全名

創(chuàng)建Person對(duì)象的方式
以前:

  1.先加載com.bean.Person類進(jìn)內(nèi)存。
  2.將該類封裝成Class對(duì)象。 
  3.根據(jù)Class對(duì)象,用new操作符創(chuàng)建com.bean.Person對(duì)象。
  4.調(diào)用構(gòu)造函數(shù)對(duì)該對(duì)象進(jìn)行初始化。 


com.bean.Person p = new com.bean.Person();

通過方式三:(此外還可以使用構(gòu)造,構(gòu)造可以指定參數(shù)---如String.class)

String className = "com.bean.Person";

//1,根據(jù)名稱獲取其對(duì)應(yīng)的字節(jié)碼文件對(duì)象

    1,通過forName()根據(jù)指定的類名稱去查找對(duì)應(yīng)的字節(jié)碼文件,并加載進(jìn)內(nèi)存。
    2,并將該字節(jié)碼文件封裝成了Class對(duì)象。
    3,直接通過newIntstance方法,完成該對(duì)象的創(chuàng)建。
    4,newInstance方法調(diào)用就是該類中的空參數(shù)構(gòu)造函數(shù)完成對(duì)象的初始化。 


Class clazz = Class.forName(className);

//2,通過Class的方法完成該指定類的對(duì)象創(chuàng)建。

Object object = clazz.newInstance();//該方法用的是指定類中默認(rèn)的空參數(shù)構(gòu)造函數(shù)完成的初始化。 

清單1,獲取字節(jié)碼文件中的字段。

Class clazz = Class.forName("cn.itcast.bean.Person"); //獲取該類中的指定字段。比如age
Field field = clazz.getDeclaredField("age");//clazz.getField("age");    //為了對(duì)該字段進(jìn)行操作,必須要先有指定類的對(duì)象。
Object obj = clazz.newInstance();//對(duì)私有訪問,必須取消對(duì)其的訪問控制檢查,使用AccessibleObject父類中的

setAccessible的方法
field.setAccessible(true);//暴力訪問。建議大家盡量不要訪問私有    
field.set(obj, 789);//獲取該字段的值。    
Object o = field.get(obj);
System.out.println(o);

備注:

  getDeclaredField:獲取所有屬性,包括私有。
  getField:獲取公開屬性,包括從父類繼承過來的,不包括非公開方法。

清單2,獲取字節(jié)碼文件中的方法。
//根據(jù)名稱獲取其對(duì)應(yīng)的字節(jié)碼文件對(duì)象

Class clazz = Class.forName("com.bean.Person");

//調(diào)用字節(jié)碼文件對(duì)象的方法getMethod獲取class對(duì)象所表示的類的公共成員方法(指定方法),參數(shù)為方法名和當(dāng)前方法的參數(shù),無需創(chuàng)建對(duì)象,它是靜態(tài)方法

Method method = clazz.getMethod("staticShow", null);

//調(diào)用class對(duì)象所表示的類的公共成員方法,需要指定對(duì)象和方法中的參數(shù)列表

method.invoke(null, null);

………………………………………………………………………………………………………

Class clazz = Class.forName("com.bean.Person");    
//獲取指定方法。
Method method = clazz.getMethod("publicShow", null);
//獲取指定的類對(duì)象。 
Object obj = clazz.newInstance();
method.invoke(obj, null);//對(duì)哪個(gè)對(duì)象調(diào)用方法,是參數(shù)組

好處:大大的提高了程序的擴(kuò)展性。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/68977.html

相關(guān)文章

  • Java筆記-反射機(jī)制(一)

    摘要:反射機(jī)制一結(jié)合官方通過編寫的反射教程,復(fù)習(xí)一下反射的知識(shí)。反射的概念反射是一種在運(yùn)行時(shí)獲取以及修改應(yīng)用行為的一種工具。因?yàn)榉瓷湫枰獎(jiǎng)討B(tài)的解析類的信息,相比于非反射使用的方式要慢。反射需要獲取一定的運(yùn)行時(shí)權(quán)限,在特定的安全環(huán)境下不一定存在。 Java反射機(jī)制(一) 結(jié)合Oracle官方通過JDK8編寫的反射教程,復(fù)習(xí)一下反射的知識(shí)。結(jié)尾篇補(bǔ)一個(gè)小例子。 主要內(nèi)容 這次博客的主要內(nèi)容就是簡(jiǎn)...

    AWang 評(píng)論0 收藏0
  • 對(duì)比JVM GC算法的讀書筆記

    摘要:但是為了豐富引用的種類,以適應(yīng)各種應(yīng)用,中加入了中引用,但是除了強(qiáng)引用,其生命周期會(huì)有所不同,生存能力遞減。加載該類的已被回收。 GC面臨的問題有三個(gè):哪些內(nèi)存需要回收、什么時(shí)候回收和怎么回收 哪些內(nèi)存需要回收,一般有兩種方法 引用計(jì)數(shù) 對(duì)每個(gè)對(duì)象都有個(gè)被引用的次數(shù),單被引用的次數(shù)為0的時(shí)候,就表示對(duì)象需要被回收 引用計(jì)數(shù)的缺點(diǎn)是沒有辦法解決循環(huán)引用導(dǎo)致的內(nèi)存泄露問題 ...

    FrozenMap 評(píng)論0 收藏0
  • Java入門請(qǐng)不要放棄,學(xué)習(xí)路線以及側(cè)重點(diǎn)分析

    摘要:而面向搜索引擎,就是我們要及時(shí)的使用百度谷歌遇到問題無法解決,先別急著放棄,可以去網(wǎng)絡(luò)尋找答案,你的坑大部分別人都已經(jīng)走過了,大部分都可以找到合適的解決方案。 showImg(https://segmentfault.com/img/remote/1460000019236352?w=866&h=456); 前言: ●眾多的語言,到底哪一門才是適合我的?●我們?yōu)槭裁匆獙W(xué)習(xí)Java語言呢...

    mochixuan 評(píng)論0 收藏0
  • 筆記 - 收藏集 - 掘金

    摘要:目錄如何用提高效率后端掘金經(jīng)常有人說我應(yīng)該學(xué)一門語言,比如之類,但是卻不知道如何入門。本文將通過我是如何開發(fā)公司年會(huì)抽獎(jiǎng)系統(tǒng)的后端掘金需求出現(xiàn)年會(huì)將近,而年會(huì)抽獎(jiǎng)環(huán)節(jié)必不可少,但是抽獎(jiǎng)系統(tǒng)卻還沒有。 云盤一個(gè)個(gè)倒下怎么辦?無需編碼,手把手教你搭建至尊私享云盤 - 工具資源 - 掘金微盤掛了,360倒了,百度云盤也立了Flag。能讓我們?cè)谠贫藘?chǔ)存分享文件的服務(wù)越來越少了。 買一堆移動(dòng)硬盤...

    Alex 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<