日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java注解Annotation原理及自定義注解代碼實例

瀏覽:36日期:2022-08-22 17:13:32

什么是注解?

對于很多初次接觸的開發者來說應該都有這個疑問?Annontation是Java5開始引入的新特征,中文名稱叫注解。它提供了一種安全的類似注釋的機制,用來將任何的信息或元數據(metadata)與程序元素(類、方法、成員變量等)進行關聯。為程序的元素(類、方法、成員變量)加上更直觀更明了的說明,這些說明信息是與程序的業務邏輯無關,并且供指定的工具或框架使用。

Annontation像一種修飾符一樣,應用于包、類型、構造方法、方法、成員變量、參數及本地變量的聲明語句中。

Java注解是附加在代碼中的一些元信息,用于一些工具在編譯、運行時進行解析和使用,起到說明、配置的功能。注解不會也不能影響代碼的實際邏輯,僅僅起到輔助性的作用。包含在 java.lang.annotation 包中。

注解的用處:

1、生成文檔。這是最常見的,也是java 最早提供的注解。常用的有@param @return 等

2、跟蹤代碼依賴性,實現替代配置文件功能。比如Dagger 2 依賴注入,未來java 開發,將大量注解配置,具有很大用處;

3、在編譯時進行格式檢查。如@override 放在方法前,如果你這個方法并不是覆蓋了超類方法,則編譯時就能檢查出。

注解的原理:

注解本質是一個繼承了Annotation 的特殊接口,其具體實現類是Java 運行時生成的動態代理類。而我們通過反射獲取注解時,返回的是Java 運行時生成的動態代理對象$Proxy1。通過代理對象調用自定義注解(接口)的方法,會最終調用AnnotationInvocationHandler 的invoke 方法。該方法會從memberValues 這個Map 中索引出對應的值。而memberValues 的來源是Java 常量池。

元注解:

java.lang.annotation 提供了四種元注解,專門注解其他的注解(在自定義注解的時候,需要使用到元注解):

@Documented ? 注解是否將包含在JavaDoc中 @Retention ? 什么時候使用該注解 @Target ? 注解用于什么地方 @Inherited ? 是否允許子類繼承該注解

1.)@Retention ? 定義該注解的生命周期

● RetentionPolicy.SOURCE : 在編譯階段丟棄。這些注解在編譯結束之后就不再有任何意義,所以它們不會寫入字節碼。@Override, @SuppressWarnings都屬于這類注解。● RetentionPolicy.CLASS : 在類加載的時候丟棄。在字節碼文件的處理中有用。注解默認使用這種方式● RetentionPolicy.RUNTIME : 始終不會丟棄,運行期也保留該注解,因此可以使用反射機制讀取該注解的信息。我們自定義的注解通常使用這種方式。

2.)Target ? 表示該注解用于什么地方。默認值為任何元素,表示該注解用于什么地方。可用的ElementType 參數包括

● ElementType.CONSTRUCTOR: 用于描述構造器● ElementType.FIELD: 成員變量、對象、屬性(包括enum實例)● ElementType.LOCAL_VARIABLE: 用于描述局部變量● ElementType.METHOD: 用于描述方法● ElementType.PACKAGE: 用于描述包● ElementType.PARAMETER: 用于描述參數● ElementType.TYPE: 用于描述類、接口(包括注解類型) 或enum聲明

3.)@Documented ? 一個簡單的Annotations 標記注解,表示是否將注解信息添加在java 文檔中。

4.)@Inherited ? 定義該注釋和子類的關系

@Inherited 元注解是一個標記注解,@Inherited 闡述了某個被標注的類型是被繼承的。如果一個使用了@Inherited 修飾的annotation 類型被用于一個class,則這個annotation 將被用于該class 的子類。

常見標準的Annotation:

1.)Override

java.lang.Override 是一個標記類型注解,它被用作標注方法。它說明了被標注的方法重寫了父類的方法,起到了斷言的作用。如果我們使用了這種注解在一個沒有覆蓋父類方法的方法時,java 編譯器將以一個編譯錯誤來警示。

2.)Deprecated

Deprecated 也是一種標記類型注解。當一個類型或者類型成員使用@Deprecated 修飾的話,編譯器將不鼓勵使用這個被標注的程序元素。所以使用這種修飾具有一定的“延續性”:如果我們在代碼中通過繼承或者覆蓋的方式使用了這個過時的類型或者成員,雖然繼承或者覆蓋后的類型或者成員并不是被聲明為@Deprecated,但編譯器仍然要報警。

3.)SuppressWarnings

SuppressWarning 不是一個標記類型注解。它有一個類型為String[] 的成員,這個成員的值為被禁止的警告名。對于javac 編譯器來講,被-Xlint 選項有效的警告名也同樣對@SuppressWarings 有效,同時編譯器忽略掉無法識別的警告名。@SuppressWarnings('unchecked')

自定義注解:

自定義注解類編寫的一些規則:

1. Annotation 型定義為@interface, 所有的Annotation 會自動繼承java.lang.Annotation這一接口,并且不能再去繼承別的類或是接口.

2. 參數成員只能用public 或默認(default) 這兩個訪問權修飾

3. 參數成員只能用基本類型byte、short、char、int、long、float、double、boolean八種基本數據類型和String、Enum、Class、annotations等數據類型,以及這一些類型的數組.

4. 要獲取類方法和字段的注解信息,必須通過Java的反射技術來獲取 Annotation 對象,因為你除此之外沒有別的獲取注解對象的方法

5. 注解也可以沒有定義成員,,不過這樣注解就沒啥用了

PS:自定義注解需要使用到元注解

自定義注解實例:

FruitName.java

import java.lang.annotation.Documented;import java.lang.annotation.Retention;import java.lang.annotation.Target;import static java.lang.annotation.ElementType.FIELD;import static java.lang.annotation.RetentionPolicy.RUNTIME;/** * 水果名稱注解 */@Target(FIELD)@Retention(RUNTIME)@Documentedpublic @interface FruitName { String value() default '';}

FruitColor.java

import java.lang.annotation.Documented;import java.lang.annotation.Retention;import java.lang.annotation.Target;import static java.lang.annotation.ElementType.FIELD;import static java.lang.annotation.RetentionPolicy.RUNTIME;/** * 水果顏色注解 */@Target(FIELD)@Retention(RUNTIME)@Documentedpublic @interface FruitColor { /** * 顏色枚舉 */ public enum Color{ BLUE,RED,GREEN}; /** * 顏色屬性 */ Color fruitColor() default Color.GREEN;}

FruitProvider.java

import java.lang.annotation.Documented;import java.lang.annotation.Retention;import java.lang.annotation.Target;import static java.lang.annotation.ElementType.FIELD;import static java.lang.annotation.RetentionPolicy.RUNTIME;/** * 水果供應者注解 */@Target(FIELD)@Retention(RUNTIME)@Documentedpublic @interface FruitProvider { /** * 供應商編號 */ public int id() default -1; /** * 供應商名稱 */ public String name() default ''; /** * 供應商地址 */ public String address() default '';}

FruitInfoUtil.java

import java.lang.reflect.Field;/** * 注解處理器 */public class FruitInfoUtil { public static void getFruitInfo(Class<?> clazz){ String strFruitName=' 水果名稱:'; String strFruitColor=' 水果顏色:'; String strFruitProvicer='供應商信息:'; Field[] fields = clazz.getDeclaredFields(); for(Field field :fields){ if(field.isAnnotationPresent(FruitName.class)){FruitName fruitName = (FruitName) field.getAnnotation(FruitName.class);strFruitName=strFruitName+fruitName.value();System.out.println(strFruitName); } else if(field.isAnnotationPresent(FruitColor.class)){FruitColor fruitColor= (FruitColor) field.getAnnotation(FruitColor.class);strFruitColor=strFruitColor+fruitColor.fruitColor().toString();System.out.println(strFruitColor); } else if(field.isAnnotationPresent(FruitProvider.class)){FruitProvider fruitProvider= (FruitProvider) field.getAnnotation(FruitProvider.class);strFruitProvicer=' 供應商編號:'+fruitProvider.id()+' 供應商名稱:'+fruitProvider.name()+' 供應商地址:'+fruitProvider.address();System.out.println(strFruitProvicer); } } }}

Apple.java

import test.FruitColor.Color;/** * 注解使用 */public class Apple { @FruitName('Apple') private String appleName; @FruitColor(fruitColor=Color.RED) private String appleColor; @FruitProvider(id=1,name='陜西紅富士集團',address='陜西省西安市延安路89號紅富士大廈') private String appleProvider; public void setAppleColor(String appleColor) { this.appleColor = appleColor; } public String getAppleColor() { return appleColor; } public void setAppleName(String appleName) { this.appleName = appleName; } public String getAppleName() { return appleName; } public void setAppleProvider(String appleProvider) { this.appleProvider = appleProvider; } public String getAppleProvider() { return appleProvider; } public void displayName(){ System.out.println('水果的名字是:蘋果'); }}

FruitRun.java

/** * 輸出結果 */public class FruitRun { public static void main(String[] args) { FruitInfoUtil.getFruitInfo(Apple.class); }}

運行結果是:

水果名稱:Apple水果顏色:RED供應商編號:1 供應商名稱:陜西紅富士集團 供應商地址:陜西省西安市延安路89號紅富士大廈

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久影院一区二区三区| 香蕉视频成人在线观看| 亚洲欧洲一区| 欧美日韩国产欧| 婷婷综合社区| 99亚洲视频| 99在线观看免费视频精品观看| 九一成人免费视频| 9色国产精品| 视频一区免费在线观看| 综合色就爱涩涩涩综合婷婷| 亚洲毛片在线| 蜜臀av在线播放一区二区三区| 美女91精品| 日本不卡中文字幕| 国产日产精品_国产精品毛片| 日韩精品免费一区二区夜夜嗨 | 久久精品99国产精品日本| 国产精品一区二区免费福利视频| 国产劲爆久久| 日韩大片在线| 在线视频亚洲| 日本亚洲最大的色成网站www| 日韩欧美四区| 国产欧美一区二区三区精品观看| 青青在线精品| 国产成年精品| 欧美日韩中文一区二区| 亚洲免费在线| 国产欧美日韩影院| 亚洲欧洲美洲av| 亚洲影院天堂中文av色| 国产欧美日韩在线一区二区 | 国产精品一区免费在线| 韩日一区二区| 亚洲一区二区三区四区五区午夜 | 欧美日韩第一| 四虎国产精品免费久久| 国产精品三p一区二区| 国产在线观看91一区二区三区 | 好吊一区二区三区| 久久国产三级| 成人片免费看| 在线综合亚洲| 国产欧美大片| 影视先锋久久| 97se亚洲| 久久视频国产| 日本午夜精品久久久久| 麻豆一区二区三| 亚洲国产专区校园欧美| 日韩高清成人在线| 成人羞羞在线观看网站| 中文字幕免费一区二区| 国产91在线播放精品| 亚洲一区日韩| 精品99在线| 日韩中文字幕一区二区三区| 国产精品久久777777毛茸茸| 久久免费高清| 国产免费播放一区二区| 激情欧美丁香| 免费在线日韩av| 午夜国产欧美理论在线播放| 国产精品流白浆在线观看| 亚洲网站视频| 国产黄色一区| 免费日韩一区二区| 国产精品毛片一区二区在线看| 免费成人在线观看| 成人国产精品一区二区网站| 综合一区二区三区| 999国产精品视频| 欧美日韩视频免费看| 久久精品国产大片免费观看| 欧美激情福利| 亚洲一区欧美| 99久久亚洲精品蜜臀| 蜜桃久久久久| 亚洲v天堂v手机在线| 在线成人动漫av| 国产一区二区视频在线看| 青草综合视频| 日韩精品一级二级| 三级精品视频| 国产成人精选| 国产日韩一区二区三区在线| 久久福利毛片| 四虎4545www国产精品 | 欧美综合精品| 国产精品呻吟| 激情欧美日韩一区| 日本а中文在线天堂| 国产麻豆一区二区三区精品视频| 午夜在线一区二区| 久久蜜桃资源一区二区老牛| 国产一区二区三区免费在线| 欧美私人啪啪vps| 亚洲精品一级| 免费在线观看成人| 99久久精品国产亚洲精品| 国产精品亚洲欧美一级在线| 亚洲毛片网站| 蜜芽一区二区三区| 午夜在线视频观看日韩17c| 国产在线不卡| 日本欧美不卡| 九色porny丨国产首页在线| 狠狠久久伊人中文字幕| 国产精品2023| 欧美日韩1区| 日韩欧美高清一区二区三区| 丝袜美腿亚洲一区二区图片| 黄色日韩在线| 亚洲成人免费| 欧美aa一级| 日本综合字幕| 日韩av一级| 成人免费电影网址| 999久久久91| 欧美福利在线| 亚州av乱码久久精品蜜桃| 午夜久久免费观看| 亚洲少妇自拍| 巨乳诱惑日韩免费av| 亚洲欧美激情诱惑| 丝袜美腿亚洲色图| 亚洲精品乱码久久久久久蜜桃麻豆| 一区二区三区四区在线观看国产日韩| 国产免费成人| 香蕉久久久久久久av网站| 欧美中文日韩| 综合激情五月婷婷| 91九色综合| 国产精品地址| 精品无人区麻豆乱码久久久| 国内自拍视频一区二区三区| а√在线中文在线新版| 精品欧美一区二区三区在线观看| 三级小说欧洲区亚洲区| 欧美成人高清| 麻豆精品网站| 国产一级成人av| 麻豆精品一区二区综合av| 国产一区二区亚洲| 日韩网站中文字幕| 亚洲欧美日本国产专区一区| 日韩一二三区在线观看| 久久av偷拍| 夜鲁夜鲁夜鲁视频在线播放| 欧美精品一线| 日韩和欧美的一区| 精品国产亚洲一区二区三区大结局| av中文资源在线资源免费观看| 久久久久久久久丰满| 久久一二三区| 欧美xxxx性| 亚洲午夜久久久久久尤物| 国产女优一区| 国产精品丝袜在线播放| 成人污污视频| 九九在线精品| 亚欧成人精品| 国产精品99一区二区三| 亚洲福利一区| 日韩在线黄色| 高潮一区二区| 一区二区不卡| 91亚洲自偷观看高清| 中文国产一区| 九九久久国产| 欧美在线影院| 国产精品美女久久久久久不卡| 快播电影网址老女人久久| 久久99伊人| 老鸭窝一区二区久久精品| 国产一区亚洲| 国产精品magnet| 亚洲精品网址| 国产精一区二区| 欧美91视频| 国产精品密蕾丝视频下载| 久久国产成人午夜av影院宅| 午夜久久av| 日韩三区免费| 国产亚洲一卡2卡3卡4卡新区| 亚洲天堂一区二区| 欧美一级一区| 欧美日韩国产综合网| 麻豆久久久久久| 香蕉久久久久久久av网站| 国产一区福利| 亚洲人成网77777色在线播放| 日本黄色精品| 亚洲精品日本| 黄色不卡一区| 日韩a一区二区| 日韩一区二区三区免费视频| 99久久精品费精品国产| 国产精品宾馆|