day30-註解

来源:https://www.cnblogs.com/liyuelian/archive/2022/09/01/16647530.html
-Advertisement-
Play Games

Java註解 1.註解的理解 註解(Annotation)也被稱為元數據(Metadata),用於修飾解釋 包、類、方法、屬性、構造器、局部變數等數據信息 和註釋一樣,註解不影響程式邏輯,但註解可以被編譯或者運行,相當於嵌入在代碼中的補充信息 在JavaSE中,註解的使用目的比較簡單,例如標記過時的 ...


Java註解

1.註解的理解

  1. 註解(Annotation)也被稱為元數據(Metadata),用於修飾解釋 包、類、方法、屬性、構造器、局部變數等數據信息
  2. 和註釋一樣,註解不影響程式邏輯,但註解可以被編譯或者運行,相當於嵌入在代碼中的補充信息
  3. 在JavaSE中,註解的使用目的比較簡單,例如標記過時的功能,忽略警告等。在JavaEE中註解占據了更重要的角色,例如用來配置應用程式的任何切麵,代替JavaEE舊版中所遺留的繁冗代碼和XML配置等。

基本的Annotation介紹:

使用Annotation時要在其前面添加@符號,並把該Annotation當成一個修飾符使用。用於修飾它支持的程式元素

  • 三個基本的Annotation:

    • @Override:限定某個方法,是重寫父類方法,該註釋只能用於方法

    • @Deprecated:用於表示某個程式元素(類、方法等)已過時

    • @SuppressWarnings:抑制編譯器警告

2.@Override註解

例子:

package li.annotation;

public class Override_ {
    public static void main(String[] args) {

    }
}
class Father{//父類
    public void fly(){
        System.out.println("Father fly ...");
    }
}

class Son extends Father{//子類

    //@Override 放在fly方法上,表示子類的fly方法重寫了父類的fly方法
    //即使這裡沒有寫@Override,其實還是重寫了父類方法
    //但是如果寫了@Override註解,編譯器就會檢查該方法是否整的重寫了父類的方法。
    //如果的確重寫了就編譯通過,如果沒有構成重寫則編譯錯誤
    //它的意義就在於語法的校驗
    @Override
    public void fly(){
        System.out.println("Son fly ...");
    }
}

@Override使用說明:

  1. @Override表示指定重寫父類的方法(從編譯層面驗證),如果父類沒有fly方法,則會報錯
  2. 如果不寫@Override註解,而父類仍有 public void fly(){},仍然構成重寫
  3. @Override只能修飾方法,不能修飾其他類、包、屬性等等
  4. 查看@Override註解源碼為@Target(ElementType.METHOD),說明只能修飾方法
  5. @Target是修飾註解的註解,稱為元註解

點擊@Override進去可以看到Override的定義:

image-20220901154657712

補充說明:@interface的說明

@interface不是介面,是註解類 ,在JDK1.5之後加入的

3.@Deprecated註解

Deprecated用於表示某個程式元素(類、方法等)已經過時

例子:

package li.annotation;

public class Deprecated_ {
    public static void main(String[] args) {
        AAA a = new AAA();
        a.hi();
        System.out.println(a.n1);

    }
}

// @Deprecated 修飾某個元素,表示該元素已經過時
// 即 不再推薦使用,但是仍然可以使用
@Deprecated
class AAA{

    @Deprecated
    public int n1 = 10;
    
    @Deprecated
    public void hi(){
    }
}

查看@Deprecated註解類的源碼:

image-20220901162251698

@Deprecated使用說明:

  1. 用於表示某個程式元素(類、方法等)已過時
  2. @Deprecated可以修飾CONSTRUCTOR(構造器), FIELD(屬性), LOCAL_VARIABLE(局部變數), METHOD(方法), PACKAGE(包), PARAMETER(參數), TYPE(類型)
  3. @Deprecated的作用可以做到新舊版本的相容和過渡

3.@SuppressWarnings註解

@SuppressWarnings屬性介紹及屬性說明:(部分)

屬性 屬性說明
all 抑制所有警告
boxing 抑制裝箱、拆箱操作時候的警告
cast 抑制映射相關的警告
dep-ann 抑制啟用註釋的警告
deprecation 抑制過期方法警告
fallthrough 抑制確在switch中缺失breaks的警告
finally 抑制finally模塊沒有返回的警告
hiding 抑制與隱藏變數的區域變數相關的警告
incomplete-switch 忽略沒有完整的switch語句
nls 忽略非nls格式的字元
null 忽略對null的操作
rawtypes 忽略沒有指定泛型的警告(傳參時沒有指定泛型的警告錯誤)
restriction 抑制使用不建議或禁止參照相關的警告
serial 抑制與實現序列化的類遺漏serialVersionUID的的警告
static-access 抑制不正確的靜態訪問方式警告
synthetic-access 抑制子類沒有按最優方法訪問內部類的警告
unchecked 抑制沒有進行類型檢查操作的警告
unqualified-field-access 抑制沒有許可權訪問的域的警告
unused 抑制沒被使用過的代碼的警告

例子:

package li.annotation;

import java.util.ArrayList;
import java.util.List;

// 1.當我們不希望看到警告時,可以使用@SuppressWarnings註解來抑制警告信息
// 2.在{""}中,可以寫入你希望抑制(不顯示)的警告信息
// 3.@SuppressWarnings的作用範圍和你放置的位置有關
// 比如 @SuppressWarnings放置在main方法,那麼抑制警告的範圍就是main方法

public class SuppressWarnings_ {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("jack");
        list.add("mary");
        list.add("Bob");
        System.out.println(list);//[jack, mary, Bob]

    }
}

查看@SuppressWarnings源碼:

image-20220901170202904
  1. @SuppressWarnings可以放置的位置有:TYPE(類型), FIELD(屬性), METHOD(方法), PARAMETER(參數), CONSTRUCTOR(構造器), LOCAL_VARIABLE(局部變數)

  2. 該註解類有一個數組String[] value(),通過該數組可以在@SuppressWarnings({""})中設置多個屬性,如@SuppressWarnings({"rawtypes","unchecked","unused"});

4.元註解

元註解的基本介紹:

JDK的元Annotation用於修飾其他Annotation

元註解的種類:

  1. Retention:指定註解的作用範圍,三種:SOURCE,CLASS,RUNTIME

  2. Target:指定註解可以在哪些地方使用

  3. Documented:指定該註解是否會在javadoc中體現

  4. Inherited:子類會繼承父類註解

4.1@Retention註解

說明:

只能用於修飾一個Annotation定義,用於指定該Annotation可以保留多長時間,@Rentention包含一個RetentionPolicy類型的成員變數,使用@Rentention時必須為該value成員變數指定值:

​ @Rentention的三種值:

  1. RetentionPolicy.SOURCE:編譯器使用後,直接丟棄這種策略的註解
  2. RetentionPolicy.CLASS:編譯器把註解記錄在class文件中,當運行Java程式時,JVM不會保留註解。這是預設值
  3. RetentionPolicy.RUNTIME:編譯器把註解記錄在class文件中,當運行Java程式時,JVM會保留註解。程式可以通過反射來獲取該註解
image-20220901182050118

關於Retention

4.2@Target註解

基本說明:

用於修飾Annotation定義,用於指定 被修飾的Annotation可以用於修飾 哪些程式元素

@Target也包含一個名為value的成員變數

@Documented
@Retention(RetentionPolicy.RUNTIME)//它的作用範圍是RUNTIME
@Target(ElementType.ANNOTATION_TYPE)//這裡的ANNOTATION_TYPE 說明@Target只能修飾註解
public @interface Target {//註釋類
    /**
     * Returns an array of the kinds of elements an annotation type
     * can be applied to.
     * @return an array of the kinds of elements an annotation type
     * can be applied to
     */
    ElementType[] value();
}

4.3@Documented註解

基本說明:

@Documented:用於指定被該元Annotation修飾的Annotation類將被 javadoc工具提取生成文檔,即在生成文檔時,可以看到該註解。

PS:定義為@Documented的註解必須設置Retention值為RUNTIME

image-20220901183358662

4.4@Inherited註解

被它修飾的Annotation將具有繼承性,如果某個類使用了被@Inherited修飾的Annotation,則其子類將自動具有該註解

image-20220901184643934
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • iOS開發相關的證書有很多種,iOS開發證書(iOS App Development)、iOS發佈證書(iOS Distribution (App Store and Ad Hoc))、網站推送ID證書(Website Push ID Certificate)、Apple Pay付款處理證書(App ...
  • Serverless 架構將成為未來雲計算領域重要的技術架構,將會被更多的業務所採納。進一步深究,Serverless 架構在什麼場景下有優秀的表現,在什麼場景下可能表現得並不是很理想呢?或者說,有哪些場景更適合 Serverless 架構呢? ...
  • 顧名思義,如何建房子一樣,建造者模式可以將複雜對象的建造過程抽象出來,使用相同的構建過程可以構造出不同表現的對象。 ...
  • 山河遠闊,煙火人間,又一年,千里嬋娟~ 今天給大家帶來的是給玉兔投喂月餅的小游戲。八月十五中秋夜晚,讓我們對著月亮許願:希望我們在意和在意我們的人,諸邪避退、百事無忌、平安喜樂、萬事勝意。提前祝大家中秋節快樂。 中秋節的起源 中秋節起源於上古時代,普及於漢代,定型於唐朝初年,盛行於宋朝以後。中秋節是 ...
  • 目錄 一.OpenGL 圖像飽和度調節 1.原始圖片 2.效果演示 二.OpenGL 圖像飽和度調節源碼下載 三.猜你喜歡 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學 ...
  • JavaGUI-坦克大戰 1.Java繪圖坐標體系 坐標體系介紹:下圖說明瞭一個Java坐標體系。坐標原點位於左上角,以像素為單位。在Java坐標體系中,第一個是x坐標,表示當前位置為水平方向,距離坐標原點x個像素;第二個是y坐標,表示當前位置為垂直方向,距離坐標原點y個像素。 坐標體系-像素: 繪 ...
  • Spring-04 聲明式事務 1、事務的定義 事務就是由一組邏輯上緊密關聯的多個工作單元(資料庫操作)而合併成一個整體,這些操作要麼都執行,要麼都不執行。 2、事務的特性:ACID 1)原子性A :原子即不可再分,表現:一個事務涉及的多個操作在業務邏輯上缺一不可,保證同一個事務中的操作要不都提交, ...
  • Vector底層實現 vector的三個私有成員 :_start 記錄初始位置 , _finish 記錄有效字元 , _endofstoage 記錄容量大小 vector會存儲的類型不同,所以要用模版來定類型 typedef T* iterator; iterator _start; iterato ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...