java中的註解,真的很重要,你理解了嘛?

2020-12-11 愚公要移山1

這篇文章開始講解java中的註解,在平時的開發當中我相信你或多或少的接觸過註解。比如你可能都見過@override,它代表的就是一個註解。但是,為了更加清晰的去介紹註解,我還是先給出一個例子,讓你能夠方便的理解。

一、認識註解

在平時不知道我們是否都用過便利貼,在一張紙上寫好幾句話,貼在我們需要的地方。就是下面這個;

還有一個情況,大多數人都叫我們程序猿(錢多話少死得快),這也是給我們貼了一個標籤。像這兩種情況基本上就是註解。你可以把這兩種情況聯想到代碼的註解上。比如我們定義了一個方法,這個方法要實現加法的運算,那麼我們就可以定義一個@ADD標籤。表示這個方法就是實現加法的。我們程式設計師一看到這個@ADD,就能很容易理解這個方法是幹嘛的。簡單而言。註解就是對於代碼中某些鮮活個體的貼上去的一張標籤。簡化來講,註解如同一張標籤。

因為,如果你之前還未正式的學習過註解,你就可以把他當成便利貼標籤就好了,這能幫你理解註解的大部分內容。

不過正是開始之前,還是談一下學習註解的主要意義吧。

1、首先我們能夠讀懂別人寫的代碼,特別是框架相關的代碼。

2、本來可能需要很多配置文件,需要很多邏輯才能實現的內容,就可以使用一個或者多個註解來替代,這樣就使得編程更加簡潔,代碼更加清晰。

3、zhuangbility,也就是讓你在面試的時候拿來這個的。

OK,理解了註解的思想,我們就可以正式的學習一下注解了。

二、註解

我們介紹完註解之後在介紹元註解,在上面已經介紹過了,其實註解就是一張便利貼,我們可以隨便寫點東西,貼在我們想貼的地方。下面我們來正式的去介紹一下什麼是註解以及如何定義註解。用法超級簡單。

聲明一個註解,其實和創建一個類差不多,只不過聲明一個類是用class,聲明一個接口是interface。聲明一個註解很簡單,使用@interface。下面我們舉個例子:

簡單吧,但是裡面有一點需要和類、接口的聲明有點不同。註解是沒有方法的,只有成員變量。而且我們可以自己定義默認值。但是形式上和方法一樣.我們使用的時候,就像我們在開發Spring的時候一樣就好了。

三、元註解

元註解是指什麼呢?從名字就可以看出來,元註解就是註解的根,也就是註解的註解。就好對比我們有一堆便利貼,這些便利貼幹什麼的都有,但是我們在定義一個特殊的便利貼,這個特殊的便利貼指的是這些普通的便利貼是幹嘛的。是不是有點亂,沒關係我給你來一張小圖你就明白了

元註解就是註解的註解。明白了吧。對元註解的基本概念了解清楚之後,我們就可以正式的介紹元註解的語法了。

元註解有五種分別是: @Retention、@Documented、@Target、@Inherited、@Repeatable 。

下面我們一一的去介紹一下:

1、@Retention

當 @Retention 應用到一個註解上的時候,它解釋說明了這個註解的存活時間。 它的取值如下:

RetentionPolicy.SOURCE 註解只在源碼階段保留,在編譯器進行編譯時它將被丟棄忽視RetentionPolicy.CLASS 註解只被保留到編譯進行的時候,它並不會被加載到 JVM 中。RetentionPolicy.RUNTIME 註解可以保留到程序運行的時候,它會被加載進入到 JVM 中,所以在程序運行時可以獲取到它們。在代碼中我們如何去使用呢?

2、@Documented

它的作用是能夠將註解中的元素包含到 Javadoc 中去。

3、@Target

,@Target 指定了註解運用的地方。 你可以這樣理解,當一個註解被 @Target 註解時,這個註解就被限定了運用的場景。 類比到標籤,原本標籤是你想張貼到哪個地方就到哪個地方,但是因為 @Target 的存在,它張貼的地方就非常具體了,比如只能張貼到方法上、類上、方法參數上等等。@Target 有下面的取值

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

Inherited 是繼承的意思,子類繼承了超類的註解。意思很容易理解。

下面代碼來演示一下他的作用

註解 Test 被 @Inherited 修飾,類 B 繼承 A,類 B 也擁有 Test 這個註解。

5、@Repeatable

@Repeatable是java1.8加進來的,表示的是可重複,就好比一個人有好幾個身份。

下面舉個例子來驗證

四、預置註解

java預置的註解其實還是比較多的,但是我們只要調出幾個比較重要的就好了。

@Deprecated

這個註解是用來標記過時的元素,編譯器在編譯階段遇到這個註解時會發出提醒警告,告訴開發者正在調用一個過時的元素比如過時的方法、過時的類、過時的成員變量。

比如:

這時sayHello()方法上面被一條直線劃了一條,這其實就是編譯器識別後的提醒效果:

@Override

這個註解再熟悉不過了,提示該方法是接口方法的實現或者是子類重寫的父類的方法。

@SuppressWarnings

阻止警告的意思,上面說過調用被@Deprecated註解的方法後,編譯器會警告提醒,而有時候開發者會忽略這種警告,他們可以在調用的地方通過@SuppressWarnings達到目的。

如:

這個時候sayHello()就不會被編譯器處以下劃線的警告了。

@SafeVarargs

參數安全類型註解。它的目的是提醒開發者不要用參數做一些不安全的操作,它的存在會阻止編譯器產生unchecked這樣的警告,它是在Java 1.7的版本中加入的。

如:

上面的代碼中,編譯階段不會報錯,但是運行時會拋出ClassCastException這個異常,所以它雖然告訴開發者要妥善處理,但是開發者自己還是搞砸了。

當然還有很多框架註解,這些註解在我的框架系列的文章會有專門的講解,還請大家支持關注我的微眾,由於系統原因,這裡寫兩句話再給出名字,java的架構師技術棧。謝謝支持

五、獲取註解

也就是我們通過反射獲取類 、函數或成員上的運行時註解信息,從而實現動態控制程序運行的邏輯。舉個例子,看看我們如何通過反射來控制程序運行的邏輯。

不過為了防止你沒有反射的基礎,我們還是先簡單的介紹一下反射的原理。

反射可以讓我們在運行時獲取類的屬性,方法,構造方法、父類、接口等信息,通過反射還可以讓我們在運行期實例化對象、調用方法、即使方法或屬性是私有的的也可以通過反射的形式調用。

下面我們使用代碼來演示:

第一步:定義註解

第一個是類的註解

第二個事類中成員變量的註解

第二步:聲明一個用戶類

第三步:使用反射獲取註解

六、註解的使用

我在網上很多篇博客上看到過很多例子,覺得作者給出的例子很容易把一個初學者帶跑偏了,從思想上限制了註解的使用場景。所以為了不帶跑大家,我先給出一個他的好處,你記住這些註解的優點,有需要的時候使用就好了

提供信息給編譯器: 編譯器可以利用註解來探測錯誤和警告信息編譯階段時的處理: 軟體工具可以用來利用註解信息來生成代碼、Html文檔或者做其它相應處理。運行時的處理: 某些註解可以在程序運行的時候接受代碼的提取總結一下,註解就是一個標籤,你也可以當成一個便利貼,在哪使用就看你是否需要這個便利貼了。

謝謝關注支持,如有不對的地方,還請批評指正。

相關焦點

  • 深入理解Java:註解(Annotation)基本概念
    另外,儘管一些annotation通過java的反射api方法在運行時被訪問,而java語言解釋器在工作時忽略了這些annotation。正是由於java虛擬機忽略了Annotation,導致了annotation類型在代碼中是「不起作用」的; 只有通過某種配套的工具才會對annotation類型中的信息進行訪問和處理。
  • JAVA中的註解是如何工作的
    從J2SE 5.0時代開始,註解一直是Java的重要組成部分。 在我們的應用程式代碼中的某些地方,我們經常看到過類似@Override 和的注釋 @Deprecated。註解有什麼含義,為什麼引入的註解,它們是如何工作的工作方式,如何編寫自定義注釋,這些就是我們今天要討論的。什麼是註解?
  • java注釋快捷鍵,Java中的常用註解
    一、常見的Java註解 1、JDK中自帶的註解:@Override表示覆蓋父類的方法,@Deprecated表示這個方法已經過時,在調用的時候編譯器會警告,方法上有條橫線,這個時候就可以使用 @Suppvisewarnings
  • 學生會私房菜【20201125】《Java註解》
    沒關係,這是正常操作,不過我們從翻譯中還是可以了解到註解可以提供數據,並且數據是獨立於程序的,那麼我們大致可以推斷出,註解其實是介於程序和數據之間的一種媒介,程序和數據通過註解達成了某種聯繫,即註解類似一根紅線,把數據和程序關聯在一起。通過對Java官方提供的註解解釋的翻譯,我們篩選推斷出了一個關鍵信息——關聯。那到底如何理解這個詞呢?
  • 阿里P8教你Java註解與反射
    Ⅰ 什麼是註解Java 註解(Annotation)又稱 Java 標註,是 JDK5.0 引入的一種注釋機制。Java 語言中的類、方法、變量、參數和包等都可以被標註。和 Javadoc 不同,Java 標註可以通過反射獲取標註內容。在編譯器生成類文件時,標註可以被嵌入到字節碼中。Java 虛擬機可以保留標註內容,在運行時可以獲取到標註內容 。
  • Java元註解作用及使用
    Java 5 定義了 4 個註解,分別是 @Documented、@Target、@Retention 和 @Inherited。Java 8 又增加了 @Repeatable 和 @Native 兩個註解。這些註解都可以在 java.lang.annotation 包中找到。下面主要介紹每個元註解的作用及使用。
  • 夯實Java基礎系列15:Java註解簡介和最佳實踐
    Annotation 中文譯過來就是註解、標釋的意思,在 Java 中註解是一個很重要的知識點,但經常還是有點讓新手不容易理解。到這裡,終於可以引出本文的主角註解了。初學者可以這樣理解註解:想像代碼具有生命,註解就是對於代碼中某些鮮活個體的貼上去的一張標籤。簡化來講,註解如同一張標籤。在未開始學習任何註解具體語法而言,你可以把註解看成一張標籤。
  • java中的自定義註解
    今天準備把Java中的自定義註解分享一下子,因為好多小夥伴,貌似都不知道註解這個東西到底是什麼,只知道怎麼用,卻不知道註解的底層原理。這一篇就和大家分享一下,文章結構:Java中的註解概述四種元註解自定義註解1.
  • 不會 Java 註解 ? 看這一篇文章!
    對於Java註解,我諮詢過一些身邊的人,很多人表示:知道怎麼用,不熟悉不知道你是不是這樣?在我沒有系統性的學習一邊註解的時候,我也是如此,在我花時間學習過註解之後,我覺得,對於註解,最重要的在於理解,很多人也看過不少關於註解的文章,可是過不了多久就會忘記,關於遺忘,這不是個問題,只能說是正常現象。
  • java語言:註解與注釋有什麼區別
    java註解與注釋註解區別,注釋註解對於新手來說很容易混淆。註解與注釋有什麼不同點 ?定義不同:註解:英名為Annotation,它是JDK5.0及以後版本引入的一個特性。 與類、接口、枚舉是在同一個層次,可以成為java 的一個類型。用一個詞描述註解------元數據,它是一種描述數據的數據。
  • Java註解詳解
    註解不會也不能影響代碼的實際邏輯,僅僅起到輔助性的作用,包含在 java.lang.annotation 包中註解的語法十分簡單,只要在現有語法中添加 @ 符號即可,java.lang 包提供了如下五種註解:@Override表示當前的方法定義將覆蓋基類的方法,如果你不小心把方法籤名拼錯了,編譯器就會發出錯誤提示@Deprecated
  • 面試官:說說你對「註解」的理解
    註解已經是作為一個開發中必備的技能了。  如果在面試中被問到註解,說不出個123,就只能回去等通知了。  什麼是註解?  註解annotation是JavaSE5.0中新增功能。可以理解為註解是一種標記,這種標記可以在編譯、類加載、運行時被讀取,並執行相應的處理。
  • 深入理解spring核心註解
    Spring中的註解大概可以分為兩大類: spring的bean容器相關的註解,或者說bean工廠相關的註解; springmvc相關的註解。
  • 你真的了解java的lambda嗎?- java lambda用法與源碼分析
    它是lambda表達式的協議註解,這個註解非常重要,後面做源碼分析會專門分析它的官方注釋,到時候一目了然。/* @jls 4.3.2.如果聲明的方法和java.lang.Object中的某個方法一樣,它可以不當做未實現的方法,不違背這個原則:一個被它註解的接口只能有一個抽象方法例如同樣是Compartor接口中,它重新聲明了equals方法:
  • 每個Java 開發者都應該知道的 5 個註解
    自 JDK5 推出以來,註解已成為Java生態系統不可缺少的一部分。雖然開發者為Java框架(例如Spring的@Autowired)開發了無數的自定義註解,但編譯器認可的一些註解非常重要。在本文中,我們將看到5個Java編譯器支持的註解,並了解其期望用途。
  • 不了解Java註解機制可不行
    無論是在JDK還是框架中,註解都是很重要的一部分,我們使用過很多註解,但是你有真正去了解過他的實現原理麼?你有去自己寫過註解麼?概念註解(Annotation),也叫元數據。一種代碼級別的說明。它是JDK1.5及以後版本引入的一個特性,與類、接口、枚舉是在同一個層次。
  • 高級工程師帶你徹底吃透Java註解
    如為什麼人們常說註解是無法繼承的,為什麼需要元註解等等。註解的目錄結構其實可以看到,JDK中有關註解的內容很少,非常適合作為三大特性的入門啊。因為註解的實現基礎是存在於JVM中的,JDK只是提供了對應的工具。
  • smart-doc 1.8.1 發布,Java 零註解文檔生成工具
    smart-doc是一個java restful api文檔生成工具, smart-doc完全基於接口源碼分析來生成接口文檔,完全做到零註解侵入
  • Mybatis 中xml和註解映射,原來如此簡單
    ,可以被用來引用這條語句 ,這個id必須與只對應的是XxxMapper.java中的方法,必須是一一對應。id:可以理解為別名。id:唯一標識,此id值用於select元素屬性的引用。column:對應我們資料庫表中的欄位名稱。
  • smart-doc 1.9.4 發布,Java 零註解 API 文檔生成工具
    ,smart-doc顛覆了傳統類似swagger這種大量採用註解侵入來生成文檔的實現方法。smart-doc完全基於接口源碼分析來生成接口文檔,完全做到零註解侵入,你只需要按照java標準注釋編寫,smart-doc就能幫你生成一個簡易明了的markdown 或是一個像GitBook樣式的靜態html文檔。如果你已經厭倦了swagger等文檔工具的無數註解和強侵入汙染,那請擁抱smart-doc吧!