精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

掌握 Java 注解,一夜陸地神仙

開發 后端
元數據是指用來描述數據的數據,通俗一點,就是描述代碼間關系,或者代碼與其它資源(例如數據庫表)之間內在聯系的數據。

一、注解簡介

Java注解用于為Java代碼提供元數據。

元數據是指用來描述數據的數據,通俗一點,就是描述代碼間關系,或者代碼與其它資源(例如數據庫表)之間內在聯系的數據。在一些技術框架中,如Struts、hibernate就不知不覺用到了元數據。對于Struts來說,元數據指的是struts-config.xml;對hibernate來說就是hbm文件。以上闡述的幾種元數據都是基于xml文件的或者其他形式的單獨配置文件。這樣表示有些不便之處。1、與被描述的文件分離,不利于一致性的維護;2、所有這樣的文件都是ASCII文件,沒有顯式的類型支持。基于元數據的廣泛使用,JDK5.0引入了Annotation的概念來描述元數據。在Java中,元數據以標簽的形式存在于Java代碼中,元數據標簽的存在并不影響程序代碼的編譯和執行。簡而言之,言而總之,注解就是標簽的意思。

二、如何創建注解

JDK5.0出來后,Java語言中就有了四種類型,即類class、枚舉enum、接口interface、注解@interface,它們處于同一級別,Java就是通過注解來表示元數據的。

  1. package com.guor.ClientNew; 
  2.   
  3. public @interface MyAnnotation { 
  4.     // 定義公共的final靜態屬性 
  5.     int age = 25; 
  6.   
  7.     // 定義公共的抽象方法 
  8.     String name(); 

Java注解本質上就是接口,是繼承了Annotation接口的接口。

三、元注解

元注解是可以注解到注解上的注解,或者說元注解是一種基本注解,它能夠應用到其它的注解上面。

元標簽有 @Retention、@Documented、@Target、@Inherited、@Repeatable 5 種。

1、@Retention

Retention,中文釋義保留期的意思

當@Retention應用到注解上的時候,它解釋說明了這個注解的生命周期。

  • RetentionPolicy.SOURCE 注解只在源碼階段保留,在編譯器進行編譯時它將被丟棄忽視。
  • RetentionPolicy.CLASS 注解只被保留到編譯進行的時候,它并不會被加載到JVM中。
  • RetentionPolicy.RUNTIME 注解可以保留到程序運行的時候,它會被加載到JVM中。

2、@Documented

顧名思義,這個元注解肯定和文檔有關。它的作用是能夠將注解中的元素包含到Javadoc中去。

3、@Target

標明注解運用的地方。

  • ElementType.ANNOTATION_TYPE 可以給一個注解進行注解
  • ElementType.CONSTRUCTOR 可以給構造方法進行注解
  • ElementType.FIELD 可以給屬性進行注解
  • ElementType.LOCAL_VARIABLE 可以給局部變量進行注解
  • ElementType.METHOD 可以給方法進行注解
  • ElementType.PACKAGE 可以給一個包進行注解
  • ElementType.PARAMETER 可以給一個方法內的參數進行注解
  • ElementType.TYPE 可以給一個類型進行注解,比如類、接口、枚舉

4、@Inherited

lnherited是繼承的意思。

如果一個超類被@Inherited注解過的注解進行注解的話,那么如果它的子類沒有被任何注解應用的話,那么這個子類就繼承了超類的注解。

代碼實例

5、@Repeatable

Repeatable 自然是可重復的意思。@Repeatable 是 Java 1.8 才加進來的,所以算是一個新的特性。

什么樣的注解會多次應用呢?通常是注解的值可以同時取多個。

在生活中一個人往往是具有多種身份,如果我把每種身份當成一種注解該如何使用???

先聲明一個Persons類用來包含所有的身份

  1. @Target(ElementType.TYPE)   
  2. @Retention(RetentionPolicy.RUNTIME) 
  3. public @interface Persons { 
  4.   Person[] value(); 

這里@Target是聲明Persons注解的作用范圍,參數ElementType.Type代表可以給一個類型進行注解,比如類,接口,枚舉。

@Retention是注解的有效時間,RetentionPolicy.RUNTIME是指程序運行的時候。

Person注解:

  1. @Repeatable(Persons.class) 
  2. public @interface Person{ 
  3.   String role() default ""

@Repeatable括號內的就相當于用來保存該注解內容的容器。

聲明一個Man類,給該類加上一些身份。

  1. @Person(role="CEO"
  2. @Person(role="husband"
  3. @Person(role="father"
  4. @Person(role="son"
  5. public class Man { 
  6.   String name=""

在主方法中訪問該注解:

  1. public static void main(String[] args) { 
  2.     Annotation[] annotations = Man.class.getAnnotations();   
  3.     System.out.println(annotations.length); 
  4.     Persons p1=(Persons) annotations[0]; 
  5.     for(Person t:p1.value()){ 
  6.         System.out.println(t.role()); 
  7.     } 

下面的代碼結果輸出相同,但是可以先判斷是否是相應的注解,比較嚴謹。

  1. if(Man.class.isAnnotationPresent(Persons.class)) { 
  2.     Persons p2=Man.class.getAnnotation(Persons.class); 
  3.     for(Person t:p2.value()){ 
  4.         System.out.println(t.role()); 
  5.     } 
  6.  } 

運行結果:

四、注解的屬性

注解的屬性也叫做成員變量,注解只有成員變量,沒有方法。注解的成員變量在注解的定義中以“無參的方法”形式來聲明,其方法名定義了該成員變量的名字,其返回值定義了該成員變量的類型。

  1. @Target(ElementType.TYPE) 
  2. @Retention(RetentionPolicy.RUNTIME) 
  3. public @interface TestAnnotation { 
  4.     int id(); 
  5.     String msg(); 

上面代碼中定義了TestAnnotation這個注解中擁有id和msg兩個屬性。在使用的時候,我們應該給他們進行賦值。

賦值的方式是在注解的括號內以value=“”形式,多個屬性之前用,隔開。

  1. @TestAnnotation(id=3,msg="hello annotation"
  2. public class Test { 

需要注意的是,在注解中定義屬性時它的類型必須是 8 種基本數據類型外加 類、接口、注解及它們的數組。

注解中屬性可以有默認值,默認值需要用 default 關鍵值指定。比如:

  1. @Target(ElementType.TYPE) 
  2. @Retention(RetentionPolicy.RUNTIME) 
  3. public @interface TestAnnotation { 
  4.     public int id() default -1; 
  5.     public String msg() default "哪吒"

TestAnnotation 中 id 屬性默認值為 -1,msg 屬性默認值為 哪吒。

它可以這樣應用。

  1. @TestAnnotation() 
  2. public class Test {} 

因為有默認值,所以無需要再在 @TestAnnotation 后面的括號里面進行賦值了,這一步可以省略。

另外,還有一種情況。如果一個注解內僅僅只有一個名字為 value 的屬性時,應用這個注解時可以直接將屬性值填寫到括號內。

  1. public @interface Check { 
  2.     String value(); 

上面代碼中,Check 這個注解只有 value 這個屬性。所以可以這樣應用。

  1. @Check("hi"
  2. int a; 

這和下面的效果是一樣的

  1. @Check(value="hi"
  2. int a; 

最后,還需要注意的一種情況是一個注解沒有任何屬性。比如:

  1. public @interface Perform {} 

那么在應用這個注解的時候,括號都可以省略。

  1. @Perform 
  2. public void testMethod(){} 

五、Java自帶的注解

學習了上面相關的知識,我們已經可以自己定義一個注解了。其實 Java 語言本身已經提供了幾個現成的注解。

1、@Override

這個大家應該很熟悉了,提示子類要復寫父類中被 @Override 修飾的方法

2、@Deprecated

加上這個注解之后,表示此方法或類不再建議使用,調用時會出現刪除線,但不代表不能用,只是說,不推薦使用,因為有更好的方法可以調用。

那么直接刪掉不就完了?

因為在一個項目中,工程比較大,代碼比較多,而在后續的開發過程中,可能之前的某個方法實現的并不是很合理,這個時候要重新寫一個方法,而之前的方法還不能隨便刪,因為別的地方可能在調用它,所以加上這個注解,就OK啦!

3、@SuppressWarning

阻止警告的意思。

該批注的作用是給編譯器一條指令,告訴它對被批注的代碼元素內部的某些警告保持靜默。

4、@SafeVarargs

參數安全類型注解。

它的目的是提醒開發者不要用參數做一些不安全的操作,它的存在會阻止編譯器產生unchecked這樣的警告。

在聲明具有模糊類型(比如:泛型)的可變參數的構造函數或方法時,Java編譯器會報unchecked警告。鑒于這種情況,如果程序猿斷定聲明的構造函數和方法的主體no problem,可使用@SafeVarargs進行標記,這樣Java編譯器就不會報unchecked警告了!

5、@FunctionalInterface

Java 8為函數式接口引入了一個新注解@FunctionalInterface,主要用于編譯級錯誤檢查,加上該注解,當你寫的接口不符合函數式接口定義的時候,編譯器會報錯。

它們主要用在Lambda表達式和方法引用(實際上也可認為是Lambda表達式)上。

如定義了一個函數式接口如下:

  1. @FunctionalInterface 
  2. interface GreetingService  
  3.     void sayMessage(String message); 

那么就可以使用Lambda表達式來表示該接口的一個實現(注:JAVA 8 之前一般是用匿名類實現的):

  1. GreetingService greetService1  
  2. = message -> System.out.println("Hello " + message); 

六、注解的使用場景

1、注解的官方釋義

注解是一系列元數據,它提供數據用來解釋程序代碼,但是注解并非是所解釋的代碼本身的一部分。注解對于代碼的運行效果沒有直接影響。

2、注解的用處

① 提供信息給編譯器:編譯器可以利用注解來探測錯誤或警告信息

② 編譯階段時的處理:軟件工具可以利用注解信息來生成代碼、HTML文檔或其它響應處理。

③ 運行時的處理:某些注解可以在程序運行時接受代碼的提取。

值得注意的是,注解不是代碼本身的一部分。

3、注解的用法舉例

  1. public class ExampleUnitTest { 
  2.     @Test 
  3.     public void addition_isCorrect() throws Exception { 
  4.         assertEquals(4, 2 + 2); 
  5.     } 

@Test 標記了要進行測試的方法 addition_isCorrect().

還有例如ssm框架等運用了大量的注解。

七、注解的本質

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

八、總結

1、注解就是標簽,注解為了解釋代碼

2、注解的基本語法@interface

3、注解的元注解

4、注解的屬性

5、注解主要給編譯器及工具類型的軟件用的

6、注解的提取要借助于Java的反射技術,反射比較慢,所以注解使用時也需要謹慎計較時間成本

 本文轉載自微信公眾號「哪吒學Java」,可以通過以下二維碼關注。轉載本文請聯系哪吒學Java公眾號。

 

 

責任編輯:武曉燕 來源: 哪吒學Java
相關推薦

2021-10-11 10:12:02

機器人人工智能系統

2018-05-23 11:43:59

數據庫

2015-07-14 11:39:08

Docker容器DevOps虛擬機

2016-01-26 17:47:58

SaaSSaaS平臺SaaS服務

2011-09-23 09:41:02

2019-03-05 10:03:17

阿里云云廠商硬盤

2025-10-23 12:44:10

2019-01-21 10:12:58

拼多多漏洞黑灰產

2015-11-16 11:50:37

流量提速降費運營商

2010-04-27 10:13:27

IPv4IPv6

2015-03-10 10:32:21

蘋果2015MacBook Air

2024-08-30 17:25:23

開發AI

2021-03-16 14:43:23

比特幣加密貨幣貨幣

2019-11-01 18:57:44

戴爾

2015-11-16 11:03:59

流量提速降費運營商

2009-07-15 13:01:47

2009-04-21 15:07:02

2012-04-01 09:14:16

App刷排名刷榜

2014-08-22 17:19:12

經營信息化

2024-11-01 13:34:58

點贊
收藏

51CTO技術棧公眾號

亚洲成人tv| 秋霞国产精品| 99久久免费精品| 国产精品久久久av久久久| 蜜桃视频最新网址| 日韩a级大片| 5566中文字幕一区二区电影 | 久久久九九九热| bl在线肉h视频大尺度| 国产欧美日韩激情| 国产偷国产偷亚洲高清97cao| 波多野结衣毛片| 国产精品分类| 日韩亚洲精品视频| 加勒比一区二区| 久久三级中文| 欧美日韩国产首页在线观看| 男女啪啪免费视频网站| 激情影院在线观看| 国产精品视频你懂的| 激情久久av| 999久久久久久| 蜜臀va亚洲va欧美va天堂 | 日韩三级视频在线| 亚洲成人精品| 俺去啦;欧美日韩| 国产高潮呻吟久久| 任我爽精品视频在线播放| 91精品国产综合久久婷婷香蕉 | 丰满少妇乱子伦精品看片| 91亚洲一区| 在线精品国产欧美| 高潮毛片无遮挡| 日韩精品丝袜美腿| 亚洲精品美女免费| 丰满人妻一区二区三区免费视频棣| crdy在线观看欧美| 欧美丝袜丝nylons| 北条麻妃视频在线| 欧亚av在线| 五月激情丁香一区二区三区| 欧美精品卡一卡二| 污污的视频在线观看| 亚洲精品一二三区| 精品一区二区三区毛片| av电影高清在线观看| 亚洲婷婷在线视频| 久久免费视频2| 顶级网黄在线播放| 一区二区三区中文在线观看| 中文字幕在线乱| 午夜在线视频| 亚洲同性gay激情无套| 麻豆md0077饥渴少妇| www红色一片_亚洲成a人片在线观看_| 亚洲桃色在线一区| 黄色小视频大全| gogo久久| 欧美性猛交xxxxx免费看| 日本黄色三级大片| 国产91欧美| 欧美一区二区三区免费观看视频| japan高清日本乱xxxxx| 超碰成人在线观看| 日韩精品欧美国产精品忘忧草| 亚洲专区区免费| 精品一区二区三区在线| www.亚洲人.com| 亚洲色婷婷一区二区三区| 欧美日本一区二区视频在线观看 | 久久gogo国模啪啪裸体| 精品久久久久一区二区国产| 中文字幕一区三区久久女搜查官| 美女网站一区| 久久久91精品国产| 国产在线综合网| 久久永久免费| 91久久嫩草影院一区二区| 亚洲av无码乱码国产精品| 97久久超碰精品国产| 日韩高清在线播放| 婷婷免费在线视频| 亚洲一区二区三区四区中文字幕| 99爱视频在线| 91久久青草| 亚洲精品videossex少妇| 精品欧美一区二区久久久| 亚洲成人av| 日韩女在线观看| 国产视频在线观看免费| 久久一区二区三区四区| 在线无限看免费粉色视频| segui88久久综合9999| 欧美日韩久久久久久| 中文在线字幕观看| 国内精品久久久久久99蜜桃| 欧美成人一二三| 日本免费精品视频| 丰满亚洲少妇av| 亚洲国产欧美日韩| 8x8ⅹ拨牐拨牐拨牐在线观看| 欧美色国产精品| 无码人妻aⅴ一区二区三区| 99欧美视频| 日本欧美在线视频| 亚洲美女福利视频| 中文字幕亚洲一区二区va在线| 男人日女人逼逼| 国产亚洲观看| 中文字幕久热精品视频在线| 国产精品视频久久久久久久| 国产一区二区不卡在线| 视频在线精品一区| 国产中文在线播放| 精品精品国产高清一毛片一天堂| 中文字幕欧美激情极品| 国产精品一级| 国产精品久久久对白| 免费超碰在线| 欧美亚洲综合久久| 91视频在线网站| 一本色道精品久久一区二区三区| 亚洲qvod图片区电影| av网站无病毒在线| 在线观看视频一区| 男生草女生视频| 国产欧美一区二区色老头| 99re在线视频上| 国产在线观看91| 在线成人高清不卡| 亚洲女人毛茸茸高潮| 男女激情视频一区| 亚洲成色最大综合在线| 免费电影日韩网站| 亚洲欧美国产一区二区三区| 丰满少妇乱子伦精品看片| 成人的网站免费观看| 日韩人妻一区二区三区蜜桃视频| 精品久久毛片| 中文字幕亚洲欧美一区二区三区| av手机天堂网| 欧美国产1区2区| 91国产精品视频在线观看| 国产欧美日韩一区二区三区四区| 国产97色在线| 国产69精品久久app免费版| 在线看不卡av| 手机看片国产日韩| 久久国产精品一区二区| 亚洲一区二区高清视频| 伊人久久精品| 欧美另类69精品久久久久9999| 亚洲综合免费视频| 亚洲视频一二三| 亚洲AV成人精品| 亚洲伦伦在线| 欧美日本韩国在线| 欧美大陆国产| 久久99精品视频一区97| 免费av一级片| 色综合天天综合| 日韩精品电影一区二区三区| 精品一区二区三区久久久| 亚洲色图都市激情| 女一区二区三区| 国产精品户外野外| 高h视频在线观看| 亚洲国产三级网| а中文在线天堂| 亚洲图片激情小说| 国产毛片毛片毛片毛片毛片毛片| 老色鬼久久亚洲一区二区| 亚洲欧美丝袜| 欧美三级一区| 欧美亚洲第一页| 欧美13一16娇小xxxx| 欧美成人一区二区| 久久久久久在线观看| 中文字幕一区二区三中文字幕| 日韩精品――色哟哟| 噜噜爱69成人精品| 国产奶头好大揉着好爽视频| 欧美挤奶吃奶水xxxxx| 国产精品爽爽爽| 福利在线导航136| 亚洲色图激情小说| 亚洲AV午夜精品| 欧美综合一区二区| 国产无精乱码一区二区三区| 欧美激情一区二区三区在线| av不卡中文字幕| 奇米综合一区二区三区精品视频| 污污污污污污www网站免费| 久久97视频| 国产精品久久久久久久天堂第1集| 日日夜夜天天综合| 久久久欧美精品| 日本综合在线| 亚洲色图五月天| 欧性猛交ⅹxxx乱大交| 欧美色精品天天在线观看视频| 欧美激情亚洲综合| 一区二区三区加勒比av| 欧美xxxx精品| 久久久综合网站| av漫画在线观看| 国产在线观看免费一区| 波多野结衣作品集| 国产一区二区三区久久| 欧美少妇在线观看| 99精品在线免费在线观看| 欧美日韩亚洲在线| 神马香蕉久久| 国产精品中出一区二区三区| 99re8精品视频在线观看| 日韩暖暖在线视频| www.成人爱| 97精品国产97久久久久久| 成人黄色网址| 久久激情视频免费观看| 黄色影院在线播放| 精品一区二区三区电影| 免费国产精品视频| 精品女同一区二区| h片在线免费看| 91麻豆精品国产91久久久久| 一区二区视频在线免费观看| 在线免费不卡视频| 波多野结衣家庭主妇| 91福利国产精品| 日本黄色一级视频| 一本一道波多野结衣一区二区| 日韩精品一区二区在线播放| 亚洲成人福利片| 日本少妇激情视频| 欧美日韩国产中文字幕| 日韩精品一区二区三区国语自制| 图片区小说区国产精品视频| 日本三级理论片| 精品magnet| 成人在线免费看视频| 高跟丝袜欧美一区| 69视频免费看| 欧美日韩精品免费| 国产剧情精品在线| 日韩精品最新网址| 亚洲大尺度视频| 亚洲精品成人久久久| 日韩欧美电影在线观看| 亚洲色在线视频| 在线观看免费高清完整| 久久久精品免费视频| 91在线中字| 97国产精品久久| 日韩伦理三区| 国产主播欧美精品| 亚洲伊人影院| 久久精品人人做人人爽电影| 中国av一区| 亚洲日本精品| 欧美成人一区二免费视频软件| 国产精品www在线观看| 午夜在线视频一区二区区别 | 国产一区二区三区在线观看免费视频 | 粉嫩aⅴ一区二区三区四区五区| 国产精品无码自拍| 2024国产精品| 五月婷婷综合激情网| 亚洲综合免费观看高清完整版在线| 日韩经典在线观看| 在线观看www91| 99在线无码精品入口| 亚洲精品999| 天堂地址在线www| 欧美高跟鞋交xxxxhd| xx欧美视频| 亚洲最大的av网站| 亚洲区小说区| 在线天堂一区av电影| 亚洲国内欧美| 伊人国产在线视频| 成人av电影在线播放| аⅴ天堂中文在线网| 亚洲免费视频成人| 中文字幕在线播| 日韩欧美国产麻豆| 国产午夜精品一区理论片| 美女福利精品视频| www成人在线视频| 国产v亚洲v天堂无码| 成人免费a**址| 日本a在线免费观看| 久久精品99久久久| 爱爱的免费视频| 一区二区日韩电影| 在线播放国产一区| 亚洲免费人成在线视频观看| 日本性爱视频在线观看| 国产精品wwwwww| 欧美做受69| 国产一区二区三区在线免费| 美女尤物国产一区| 女同毛片一区二区三区| 亚洲国产精品久久人人爱| 亚洲一卡二卡在线| 国产亚洲视频在线观看| 国产伦理精品| 成人免费看片网址| 99久久99久久精品国产片桃花| 999香蕉视频| 99精品在线观看视频| 九九视频免费观看| 欧美一区二区三区婷婷月色 | 欧美精品国产精品日韩精品| 先锋影音网一区二区| 日本视频一区二区不卡| 一本色道久久| 老司机午夜免费福利| 亚洲一级电影视频| 国产视频第一页| 美日韩精品免费观看视频| 欧洲精品久久久久毛片完整版| 日韩国产精品一区二区三区| 亚洲欧美日韩专区| 给我免费观看片在线电影的| 亚洲一区影音先锋| 亚洲成人久久精品| 欧美高清视频免费观看| 亚洲综合网狠久久| 成年女人18级毛片毛片免费| 粉嫩嫩av羞羞动漫久久久| 国产这里有精品| 日韩欧美中文字幕精品| 在线午夜影院| 电影午夜精品一区二区三区| 欧美在线不卡| 亚洲av综合色区无码另类小说| 亚洲激情图片一区| 成人高潮片免费视频| 欧美激情欧美狂野欧美精品| 9l亚洲国产成人精品一区二三| 国产玉足脚交久久欧美| 99视频在线精品| 国产一区二区99| 亚洲香蕉成人av网站在线观看| 亚洲成av在线| 永久久久久久| 国产一区二区三区在线观看精品| 久久久久久久久毛片| 精品国产乱码久久久久久免费| а√天堂中文资源在线bt| 久久福利电影| 日本女人一区二区三区| 乱老熟女一区二区三区| 欧美一区2区视频在线观看| 午夜在线激情影院| 久久久久久国产精品一区| 性欧美长视频| 色偷偷男人天堂| 日韩视频免费观看高清完整版 | 国产91免费视频| 亚洲伊人观看| 精品熟妇无码av免费久久| 欧美一区二区在线观看| 丁香花视频在线观看| 欧美二区在线| 激情久久久久久久久久久久久久久久| 日韩黄色免费观看| 亚洲男人的天堂在线| 欧美jizz18| 成熟丰满熟妇高潮xxxxx视频| 国产日韩精品一区二区浪潮av| 国产精品九九九九| 久久青草福利网站| 欧美少妇性xxxx| 国产精品无码自拍| 在线国产亚洲欧美| 天天色天天射天天综合网| 农村寡妇一区二区三区| 国产在线播放一区| 中文字幕精品无码一区二区| xxx一区二区| 午夜精品影视国产一区在线麻豆| 免费看国产黄色片| 亚洲r级在线视频| 91在线导航| 久久久综合亚洲91久久98| 卡一卡二国产精品 | 变态调教一区二区三区| 色一情一区二区三区四区 | 日韩一区二区在线观看视频| 黑人巨大精品| a级黄色片免费| 欧美激情综合网| 天天干天天爽天天操| 成人激情av在线| 天堂蜜桃一区二区三区| 久久精品国产亚洲AV无码麻豆| 日韩亚洲一区二区| 国产日韩欧美一区二区三区|