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

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

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

瀏覽:33日期: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久久,三上悠亚国产精品一区二区三区
国产色综合网| 蜜桃久久av一区| 国产精品一区亚洲| 欧美综合精品| 欧美日本不卡高清| 国产欧美三级| 精品九九久久| 国产成人1区| 日韩精品2区| 亚洲午夜久久久久久尤物| 欧美日韩国产传媒| 日韩不卡免费高清视频| 久久婷婷久久| 欧美91福利在线观看| 国产亚洲精品久久久久婷婷瑜伽| 欧美日韩国产精品一区二区亚洲| 99亚洲视频| 中文字幕中文字幕精品| 日韩高清二区| 欧美激情亚洲| 亚洲综合在线电影| 欧美日韩国产在线一区| 蜜臀久久99精品久久久久宅男| 日韩精品一级中文字幕精品视频免费观看| 香蕉视频成人在线观看| 亚洲精品在线a| 激情91久久| 亚洲精品系列| 精品一区二区三区中文字幕| 精品国模一区二区三区| 欧美日韩黑人| 蜜臀久久99精品久久久久宅男| 日本不卡的三区四区五区| 国产精品视频一区二区三区四蜜臂| 国产日韩视频| 成人美女视频| 免费观看在线综合| 久久精品理论片| 激情偷拍久久| 日本精品国产| 日韩免费小视频| 日韩精品一二三四| 久久99青青| 午夜日本精品| 国产另类在线| 国产中文一区| 国产日韩高清一区二区三区在线 | 亚洲精品福利| 精品视频99| 久久久亚洲一区| 日韩在线观看一区二区三区| 精品无人区麻豆乱码久久久 | 国产h片在线观看| 亚洲欧美日韩国产一区| 国产精品115| 欧美日韩免费观看一区=区三区| 日韩av影院| 久久中文亚洲字幕| 国产剧情在线观看一区| 国产韩日影视精品| 国产精品网站在线看| 韩日一区二区三区| 青草国产精品| 欧美日韩国产一区二区三区不卡| 亚洲不卡视频| 日韩精品一卡| 久久狠狠久久| 欧美在线亚洲| 久久精品人人| 亚洲一级大片| 色综合www| 久久不见久久见免费视频7| 好看的亚洲午夜视频在线| 国产精品国产三级在线观看| 国产精品日韩| 黄毛片在线观看| 欧美一区=区三区| 国产一区日韩欧美| 久久亚洲精精品中文字幕| 在线精品观看| 欧美aa国产视频| 中文字幕在线视频网站| 国产三级一区| 在线看片日韩| 国产精品88久久久久久| 国产一区二区三区网| 日本视频一区二区| 美女久久网站| 欧美~级网站不卡| 色婷婷色综合| 欧美黑人巨大videos精品| 一二三区精品| 99久久亚洲精品| 久久男人av| 国产精品一区二区中文字幕| 亚洲精一区二区三区| 国户精品久久久久久久久久久不卡| 欧美成人精品一级| 欧美精品三级在线| 在线国产精品一区| 欧美在线亚洲综合一区| 欧美日韩尤物久久| 国产一区二区三区四区五区| 国产欧美啪啪| 91精品国产自产在线丝袜啪| 中文字幕一区二区精品区| 99在线观看免费视频精品观看| 成人av三级| 视频在线不卡免费观看| 美腿丝袜在线亚洲一区| 久久国产乱子精品免费女| 日韩精品成人在线观看| 蜜桃久久久久久久| 免费视频一区二区| 日韩精品一二区| 一区二区三区国产在线| 视频在线观看91| 亚洲欧美视频一区二区三区| 中文日韩欧美| 噜噜噜躁狠狠躁狠狠精品视频| 影音国产精品| 每日更新成人在线视频| 在线观看亚洲精品福利片| 精品1区2区3区4区| 伊人影院久久| 久久99伊人| 亚洲精品综合| 日本麻豆一区二区三区视频| 91免费精品国偷自产在线在线| 日韩一区二区三区高清在线观看 | 国产欧美日韩在线一区二区| 欧美精品国产一区| 国产精成人品2018| 久久久久久网| 久久精品av| 国产亚洲一区二区手机在线观看| 一区二区精品伦理...| 日韩电影免费在线观看| 日本韩国欧美超级黄在线观看| 免费污视频在线一区| 亚洲先锋成人| 国产精品日韩| 日韩有吗在线观看| 国产精品调教视频| 国内揄拍国内精品久久| 欧美日韩国产观看视频| 成人免费网站www网站高清| 成人av二区| 亚洲在线久久| 国产精品草草| 91一区二区| 欧美高清一区| 亚洲丝袜啪啪| 国产精品日本一区二区不卡视频| 久久免费精品| 亚洲91久久| 中文一区一区三区免费在线观 | 欧美亚洲在线日韩| 免费观看在线综合| 国产精品亚洲产品| 日韩在线观看一区| 久久国产精品毛片| 国产精品入口久久| 亚洲啊v在线| 亚洲欧美日韩国产一区二区| 日韩av午夜在线观看| 日韩欧美中文字幕在线视频| 欧美国产精品| 91精品福利| 91欧美精品| 人人草在线视频| 亚洲香蕉久久| 国产成人精选| 国产视频亚洲| 国产精品一区三区在线观看| 中国字幕a在线看韩国电影| 欧美二区视频| 国产欧美日韩在线观看视频 | 私拍精品福利视频在线一区| 麻豆精品91| 精品欧美日韩精品| 国产亚洲毛片在线| 老司机精品视频网| 亚洲激情偷拍| 麻豆国产精品| 国产精品日韩欧美一区| 欧美国产专区| 婷婷综合网站| 国产欧美日韩综合一区在线播放| 91一区二区三区四区| 丝袜美腿高跟呻吟高潮一区| 国产精品毛片久久久| 久久三级福利| 日韩精品1区2区3区| www.九色在线| 亚洲精品影院在线观看| 国产高潮在线| 日韩国产欧美三级| 99久久夜色精品国产亚洲1000部| 亚洲三级毛片|