




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
生成幫助文檔跟蹤代碼依賴等內(nèi)置注解補(bǔ)充:@SuppressWarnings的三種方法:@SuppressWarnings(“unchecked”)[^抑制單類型的警告]@SuppressWarnings(“unchecked”,“rawtypes”)[^抑制多類型的警告]@SuppressWarnings(“all”)[^抑制所有類型的警告]元注解定義:作用在其他注解的注解元注解類型:Inherited補(bǔ)充:子類會(huì)繼承父類使用的注解中被@Inherited修飾的注解接口繼承關(guān)系中,子接口不會(huì)繼承父接口中的任何注解,不管父接口中使用的注解有沒(méi)有被@Inherited修飾類實(shí)現(xiàn)接口時(shí)不會(huì)繼承任何接口中定義的注解自定義注解1、自定義注解框架:2、Annotation與RetentionPolicy與ElementType。每1個(gè)Annotation對(duì)象,都會(huì)有唯一的RetentionPolicy屬性;至于ElementType屬性,則有1~n個(gè)。3、ElementType(注解的用途類型)“每1個(gè)Annotation”都與“1~n個(gè)ElementType”關(guān)聯(lián)。當(dāng)Annotation與某個(gè)ElementType關(guān)聯(lián)時(shí),就意味著:Annotation有了某種用途。例如,若一個(gè)Annotation對(duì)象是METHOD類型,則該Annotation只能用來(lái)修飾方法。package
java.lang.annotation;public
enum
ElementType
{TYPE,
/
類、接口(包括注釋類型)或枚舉聲明
/FIELD,
/
字段聲明(包括枚舉常量)
/METHOD,
/
方法聲明
/PARAMETER,
/
參數(shù)聲明
/CONSTRUCTOR,
/
構(gòu)造方法聲明
/
LOCAL_VARIABLE,
/
局部變量聲明
/
ANNOTATION_TYPE,
/
注釋類型聲明
/PACKAGE
/
包聲明
/}4、RetentionPolicy(注解作用域策略)“每1個(gè)Annotation”都與“1個(gè)RetentionPolicy”關(guān)聯(lián)。若Annotation的類型為SOURCE,則意味著:Annotation僅存在于編譯器處理期間,編譯器處理完之后,該Annotation就沒(méi)用了。例如,"@Override"標(biāo)志就是一個(gè)Annotation。當(dāng)它修飾一個(gè)方法的時(shí)候,就意味著該方法覆蓋父類的方法;并且在編譯期間會(huì)進(jìn)行語(yǔ)法檢查,編譯器處理完后,“@Override”就沒(méi)有任何作用了。若Annotation的類型為CLASS,則意味著:編譯器將Annotation存儲(chǔ)于類對(duì)應(yīng)的.class文件中,它是Annotation的默認(rèn)行為。若Annotation的類型為RUNTIME,則意味著:編譯器將Annotation存儲(chǔ)于class文件中,并且可由JVM讀入。package
java.lang.annotation;public
enum
RetentionPolicy
{SOURCE,
/
Annotation信息僅存在于編譯器處理期間,編譯器處理完之后就沒(méi)有該
Annotation信息了
/CLASS,
/
編譯器將Annotation存儲(chǔ)于類對(duì)應(yīng)的.class文件中。默認(rèn)行為
/RUNTIME
/
編譯器將Annotation存儲(chǔ)于class文件中,并且可由JVM讀入
/}定義格式@interface
自定義注解名{}5、注意事項(xiàng)定義的注解,自動(dòng)繼承了java.lang,annotation.Annotation接口注解中的每一個(gè)方法,實(shí)際是聲明的注解配置參數(shù)方法的名稱就是配置參數(shù)的名稱方法的返回值類型,就是配置參數(shù)的類型。只能是:基本類型/Class/String/enum可以通過(guò)default來(lái)聲明參數(shù)的默認(rèn)值如果只有一個(gè)參數(shù)成員,一般參數(shù)名為value注解元素必須要有值,我們定義注解元素時(shí),經(jīng)常使用空字符串、0作為默認(rèn)值。反射–JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,獲取任意一個(gè)類的結(jié)構(gòu),創(chuàng)建對(duì)象,得到方法,執(zhí)行方法,屬性;這種在運(yùn)行狀態(tài)動(dòng)態(tài)獲取信息以及動(dòng)態(tài)調(diào)用對(duì)象方法的功能被稱為java語(yǔ)言的反射機(jī)制。類加載器Java類加載器(JavaClassloader)是Java運(yùn)行時(shí)環(huán)境(JavaRuntimeEnvironment)的一部分,負(fù)責(zé)動(dòng)態(tài)加載Java類到Java虛擬機(jī)的內(nèi)存空間中。java默認(rèn)有三種類加載器,BootstrapClassLoader、ExtensionClassLoader、AppClassLoader。1、BootstrapClassLoader(引導(dǎo)啟動(dòng)類加載器):嵌在JVM內(nèi)核中的加載器,該加載器是用C++語(yǔ)言寫的,主要負(fù)載加載JAVA_HOME/lib下的類庫(kù),引導(dǎo)啟動(dòng)類加載器無(wú)法被應(yīng)用程序直接使用。2、ExtensionClassLoader(擴(kuò)展類加載器):ExtensionClassLoader是用JAVA編寫,且它的父類加載器是Bootstrap。是由sun.misc.Launcher$ExtClassLoader實(shí)現(xiàn)的,主要加載JAVA_HOME/lib/ext目錄中的類庫(kù)。它的父加載器是BootstrapClassLoader3、AppClassLoader(應(yīng)用類加載器):AppClassLoader是應(yīng)用程序類加載器,負(fù)責(zé)加載應(yīng)用程序classpath目錄下的所有jar和class文件。它的父加載器為ExtClassLoader類通常是按需加載,即第一次使用該類時(shí)才加載。由于有了類加載器,Java運(yùn)行時(shí)系統(tǒng)不需要知道文件與文件系統(tǒng)。學(xué)習(xí)類加載器時(shí),掌握J(rèn)ava的委派概念很重要。雙親委派模型:如果一個(gè)類加載器收到了一個(gè)類加載請(qǐng)求,它不會(huì)自己去嘗試加載這個(gè)類,而是把這個(gè)請(qǐng)求轉(zhuǎn)交給父類加載器去完成。每一個(gè)層次的類加載器都是如此。因此所有的類加載請(qǐng)求都應(yīng)該傳遞到最頂層的啟動(dòng)類加載器中,只有到父類加載器反饋?zhàn)约簾o(wú)法完成這個(gè)加載請(qǐng)求(在它的搜索范圍沒(méi)有找到這個(gè)類)時(shí),子類加載器才會(huì)嘗試自己去加載。委派的好處就是避免有些類被重復(fù)加載。加載配置文件給項(xiàng)目添加resourceroot目錄通過(guò)類加載器加載資源文件默認(rèn)加載的是src路徑下的文件,但是當(dāng)項(xiàng)目存在resourceroot目錄時(shí),就變?yōu)榱思虞dresourceroot下的文件了。反射獲取Class要想了解一個(gè)類,必須先要獲取到該類的字節(jié)碼文件對(duì)象.在Java中,每一個(gè)字節(jié)碼文件,被夾在到內(nèi)存后,都存在一個(gè)對(duì)應(yīng)的Class類型的對(duì)象。1、得到Class1)如果在編寫代碼時(shí),知道類的名稱,且類已經(jīng)存在,可以通過(guò)包名.類名.class得到一個(gè)類的類對(duì)象2)如果擁有類的對(duì)象,可以通過(guò)Class對(duì)象.getClass()得到一個(gè)類的類對(duì)象3)如果在編寫代碼時(shí),知道類的名稱,可以通過(guò)Class.forName(包名+類名):得到一個(gè)類的類對(duì)象上述的三種方式,在調(diào)用時(shí)。如果類在內(nèi)存中不存在,則會(huì)加載到內(nèi)存。如果類已經(jīng)在內(nèi)存中存在,不會(huì)重復(fù)加載,而是重復(fù)利用。2、特殊的類對(duì)象基本數(shù)據(jù)類型的類對(duì)象:基本數(shù)據(jù)類型.clss包裝類.type基本數(shù)據(jù)類型包裝類對(duì)象:包裝類.class反射獲取Constructor通過(guò)class對(duì)象獲取一個(gè)類的構(gòu)造方法1、通過(guò)指定的參數(shù)類型,獲取指定的單個(gè)構(gòu)造方法getConstructor(參數(shù)類型的class對(duì)象數(shù)組)例如:構(gòu)造方法如下:Person(String
name,int
age)得到這個(gè)構(gòu)造方法的代碼如下:Constructor
c
=
p.getClass().getConstructor(String.class,int.class);2、獲取構(gòu)造方法數(shù)組getConstructors();3、獲取所有權(quán)限的單個(gè)構(gòu)造方法getDeclaredConstructor(參數(shù)類型的class對(duì)象數(shù)組)4、獲取所有權(quán)限的構(gòu)造方法數(shù)組getDeclaredConstructors();Constructor創(chuàng)建對(duì)象newInstance(Object...para)調(diào)用這個(gè)構(gòu)造方法,把對(duì)應(yīng)的對(duì)象創(chuàng)建出來(lái)。參數(shù):是一個(gè)Object類型可變參數(shù),傳遞的參數(shù)順序必須匹配構(gòu)造方法中形式參數(shù)列表的順序setAccessible(booleanflag)如果flag為true則表示忽略訪問(wèn)權(quán)限檢查!(可以訪問(wèn)任何權(quán)限的方法)反射獲取Method1、通過(guò)class對(duì)象獲取一個(gè)類的方法getMethod(StringmethodName,class..clss)根據(jù)參數(shù)列表的類型和方法名,得到一個(gè)方法(public修飾的)getMethods();得到一個(gè)類的所有方法(public修飾的)getDeclaredMethod(StringmethodName,class..clss)根據(jù)參數(shù)列表的類型和方法名,得到一個(gè)方法(除繼承以外所有的:包含私有,共有,保護(hù),默認(rèn))getDeclaredMethods();得到一個(gè)類的所有方法(除繼承以外所有的:包含私有,共有,保護(hù),默認(rèn))2、Method執(zhí)行方法invoke(Objecto,Object…para):調(diào)用方法,參數(shù)1.要調(diào)用方法的對(duì)象;參數(shù)2.要傳遞的參數(shù)列表getName()獲取方法的方法名稱setAccessible(booleanflag)如果flag為true則表示忽略訪問(wèn)權(quán)限檢查(可以訪問(wèn)任何權(quán)限的方法)反射獲取Field1、通過(guò)class對(duì)象獲取一個(gè)類的屬性getDeclaredField(StringfiledName)根據(jù)屬性的名稱,獲取一個(gè)屬性對(duì)象(所有屬性)getDeclaredFields()獲取所有屬性getField(StringfiledName)根據(jù)屬性的名稱,獲取一個(gè)屬性對(duì)象(public屬性)getFields()獲取所有屬性(public)▌作者技術(shù)履歷?浙江大學(xué)計(jì)算機(jī)本碩|ACM金牌?前華為/字節(jié)跳動(dòng)高級(jí)技術(shù)專家?現(xiàn)任阿里云核心架構(gòu)師(P8)?GitHubTrending項(xiàng)目維護(hù)者(5k+Stars)?開(kāi)源社區(qū)ApacheCommitter▌核心專長(zhǎng)?百萬(wàn)級(jí)QPS系統(tǒng)架構(gòu)設(shè)計(jì)?JVM底層原理與性能調(diào)優(yōu)?分布式事務(wù)一致性解決方案?云原生架構(gòu)演進(jìn)實(shí)踐▌《Java架構(gòu)師成長(zhǎng)圖譜》2025版?包含:-大廠內(nèi)部技術(shù)評(píng)審標(biāo)準(zhǔn)-千萬(wàn)級(jí)并發(fā)架構(gòu)設(shè)計(jì)模板-線上事故復(fù)盤案例集-最新G1GC調(diào)優(yōu)手冊(cè)???獲取方式:十作者薇【vip1024b】備注“Java”送你《K8s生產(chǎn)實(shí)踐指南》PDF2、Field屬性的對(duì)象類型常用方法:get(Objecto);參數(shù):要獲取屬性的對(duì)象獲取指定對(duì)象的此屬性值set(Objecto,Objectvalue);參數(shù)1.要設(shè)置屬性值的對(duì)象;參數(shù)2.要設(shè)置的值設(shè)置指定對(duì)象的屬性的值getName();獲取屬性的名稱setAccessible(booleanflag);如果flag為true則表示忽略訪問(wèn)權(quán)限檢查!(可以訪問(wèn)任何權(quán)限的屬性)通過(guò)反射獲取注解信息獲取類/屬性/方法的全部注解對(duì)象Annotation[]
annotation
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 設(shè)備耗材精準(zhǔn)管理制度
- 設(shè)施廚房設(shè)備管理制度
- 設(shè)計(jì)公司設(shè)計(jì)管理制度
- 評(píng)析證券發(fā)行管理制度
- 診所醫(yī)保費(fèi)用管理制度
- 診所藥品召回管理制度
- 試劑質(zhì)量保障管理制度
- 財(cái)務(wù)資金預(yù)算管理制度
- 財(cái)政扶持項(xiàng)目管理制度
- 貨物快遞專區(qū)管理制度
- 【完美排版】山東科技出版社二年級(jí)下冊(cè)綜合實(shí)踐活動(dòng)教案
- 公共政策學(xué)(第三版)-課件
- 齊魯醫(yī)學(xué)Lisfranc-損傷
- 大型鋼網(wǎng)架整體提升施工工法
- 干熄焦?fàn)t內(nèi)固_氣流動(dòng)與傳熱數(shù)值模擬畢業(yè)論文
- 公司股東變更登記申請(qǐng)書(shū)(一變一)
- 供應(yīng)鏈金融業(yè)務(wù)工作開(kāi)展情況總結(jié)匯報(bào)
- 基于motor的六相電機(jī)繞組分相設(shè)置
- 一年級(jí)數(shù)學(xué)學(xué)困生轉(zhuǎn)化典型案例
- 廣西壯族自治區(qū)醫(yī)院大全
- 電子時(shí)鐘 Multisim仿真
評(píng)論
0/150
提交評(píng)論