注解的定義

一、理論說明

1. 注解的定義

Java 注解是從 JDK 5.0 開始引入的一種元數據機制,它可以為代碼添加額外的信息,這些信息不影響程序的運行邏輯,但可以在編譯期、類加載期或運行期被讀取和處理。注解本質上是一種特殊的接口,所有注解都自動繼承java.lang.annotation.Annotation接口。注解可以應用于類、方法、字段、參數等程序元素上,用于實現如代碼檢查、配置信息、生成文檔等功能。

2. 內置注解與自定義注解的區別

  • 定義方式
    • 內置注解是 Java 語言自帶的,在java.langjava.lang.annotation等包中已經定義好,例如@Override@Deprecated@SuppressWarnings等,開發者可以直接使用。
    • 自定義注解需要開發者自己使用@interface關鍵字來定義新的注解類型,通過元注解(如@Retention@Target等)來指定注解的保留策略和適用范圍 。
  • 功能特性
    • 內置注解具有特定的、固定的功能。比如@Override用于確保方法正確重寫父類方法,編譯器會進行檢查;@Deprecated用于標記不建議使用的代碼元素,提醒開發者避免使用 。
    • 自定義注解功能更加靈活,開發者可以根據具體需求定義注解的屬性和處理邏輯,用于實現特定的業務邏輯,如自定義的權限控制、數據校驗等。
  • 使用場景
    • 內置注解適用于通用的、常見的代碼標注場景,是 Java 語言為了提高代碼質量和開發效率提供的基礎工具 。
    • 自定義注解適用于項目中特定的、個性化的需求,例如在 Web 開發中定義注解來處理請求日志記錄、在持久化層定義注解來映射數據庫表結構等。

二、常用注解與元注解

1. 內置常用注解

@Override

用于標識一個方法是重寫父類的方法。如果被注解的方法并非真正重寫父類方法,編譯器會報錯。例如:

class Animal {public void speak() {System.out.println("動物發出聲音");}
}class Dog extends Animal {@Overridepublic void speak() {System.out.println("狗汪汪叫");}
}
@Deprecated

用于標記不再建議使用的類、方法或字段。當其他開發者使用被該注解標記的元素時,編譯器會給出警告。例如:

@Deprecated
public void oldMethod() {System.out.println("這是一個不再建議使用的方法");
}
@SuppressWarnings

用于抑制編譯器產生的警告信息。可以通過指定警告類型,如unchecked(抑制未檢查類型轉換警告)、deprecation(抑制使用已過時元素的警告)等。例如:

import java.util.ArrayList;
import java.util.List;public class Main {@SuppressWarnings("unchecked")public static void main(String[] args) {List list = new ArrayList();list.add("元素");}
}

2. 元注解

@Retention

用于指定注解的保留策略,即注解在什么階段還存在。@Retention有三個取值:

四、面試題

題目:

答案:

五、自我總結

通過對 Java 注解的學習,我們掌握了一種強大且靈活的元數據添加方式。內置注解在日常開發中能有效提高代碼質量和規范性,而自定義注解結合元注解,為滿足個性化業務需求提供了有力工具。掌握@Override@Deprecated@SuppressWarnings等內置注解,以及@Retention@Target等元注解的使用,能讓我們在實際編程中根據不同場景合理運用注解。在實際應用場景中,如代碼規范檢查、框架配置、日志記錄等方面,注解都能發揮重要作用。合理使用注解不僅可以使代碼結構更清晰,還能提高代碼的可維護性和擴展性,在大型項目開發和框架設計中具有重要意義 。

  • RetentionPolicy.SOURCE:注解只保留在源文件中,編譯成字節碼文件時就會被丟棄,例如@Override注解。
  • RetentionPolicy.CLASS:注解保留在字節碼文件中,但在運行時無法獲取,這是默認的保留策略。
  • RetentionPolicy.RUNTIME:注解不僅保留在字節碼文件中,在運行時也可以通過反射獲取和處理。例如:
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;@Retention(RetentionPolicy.RUNTIME)
    @interface MyRuntimeAnnotation {}
    @Target

    用于指定注解可以應用的程序元素類型,如類、方法、字段等。@Target的取值包括:

  • ElementType.TYPE:應用于類、接口、枚舉等類型。
  • ElementType.METHOD:應用于方法。
  • ElementType.FIELD:應用于字段。
    例如:
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Target;@Target(ElementType.METHOD)
    @interface MyMethodAnnotation {}

    三、應用實例

    以下代碼展示了自定義注解及其使用和處理:

    import java.lang.annotation.*;
    import java.lang.reflect.Method;// 定義自定義注解
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    @interface Loggable {String value() default "";
    }class Calculator {@Loggable("執行加法運算")public int add(int a, int b) {return a + b;}public int subtract(int a, int b) {return a - b;}
    }public class Main {public static void main(String[] args) throws NoSuchMethodException {Calculator calculator = new Calculator();Method addMethod = calculator.getClass().getMethod("add", int.class, int.class);if (addMethod.isAnnotationPresent(Loggable.class)) {Loggable loggable = addMethod.getAnnotation(Loggable.class);System.out.println("注解信息: " + loggable.value());}int result = calculator.add(3, 5);System.out.println("計算結果: " + result);}
    }
    代碼解釋
  • 定義自定義注解:使用@interface關鍵字定義Loggable注解,通過@Retention(RetentionPolicy.RUNTIME)指定該注解在運行時可用,@Target(ElementType.METHOD)指定該注解只能應用于方法上,同時定義了一個value屬性。
  • 使用注解:在Calculator類的add方法上使用@Loggable注解,并設置value屬性為 “執行加法運算” 。
  • 處理注解:在main方法中,通過反射獲取add方法,使用isAnnotationPresent方法檢查該方法是否存在Loggable注解。如果存在,則使用getAnnotation方法獲取注解實例,并輸出注解的value屬性值,最后調用add方法進行計算并輸出結果。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/78993.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/78993.shtml
英文地址,請注明出處:http://en.pswp.cn/web/78993.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

面試實踐AND面經熱點題目總結

1、對于Rocketmq消息積壓、丟失如何解決? 消息積壓原因以及解決方案 🎯 產生原因: 消費者處理能力弱,消費速度遠低于生產速度; 網絡不穩定,消費者拉取消息失敗; 消費端異常(如處理…

【KWDB 創作者計劃】使用Docker實現KWDB數據庫的快速部署與配置

【KWDB 創作者計劃】使用Docker實現KWDB數據庫的快速部署與配置 前言一、KWDB介紹1.1 KWDB簡介1.2 主要特點1.3 典型應用場景 二、環境介紹2.1 部署環境要求2.2 本地環境規劃2.3 部署模式 三、部署Docker環境3.1 安裝相關工具3.2 配置Docker軟件源3.3 更新軟件源3.4 安裝Docker…

JWT深度解析:現代Web身份驗證的通行證-優雅草卓伊凡

# JWT深度解析:現代Web身份驗證的通行證 ## 一、JWT的本質與構成 ### 1.1 JWT的定義解析 JWT(JSON Web Token)是一種**開放標準(RFC 7519)**,用于在各方之間安全地傳輸信息作為JSON對象。這種信息可以被…

前端緩存踩坑指南:如何優雅地解決瀏覽器緩存問題?

瀏覽器緩存,配置得當,它能讓頁面飛起來;配置錯了,一次小小的上線,就能把你扔進線上 bug 的坑里。你可能遇到過這些情況: 部署上線了,結果用戶還在加載舊的 JS;接口數據改了&#xf…

2022年8月,?韓先超對中移信息進行微服務架構原理(Docker+k8s+DevOps+Go等)培訓

2022年8月,?韓先超對中移信息進行微服務架構原理(Dockerk8sDevOpsGo等)培訓 2022年8月,在企業數字化轉型和云原生架構加速演進的背景下, 中移信息技術有限公司特別邀請云原生與DevOps領域專家 韓先超老師&#xff0c…

ComfyUI 學習筆記,案例 6 :FLUX 模型文生圖

背景 剛開始了解 Comfy UI 的時候,隨便找了一個資料,對著這篇 《Flux在ComfyUI里的下載與安裝》 進行操作的,下載了這里面的模型到本機。 玩了幾天,大概對 ComfyUI 有了一點了解,知道了 Flux 這是一個模型&#xff0…

Docker + Watchtower 實現容器自動更新:高效運維的終極方案

文章目錄 前言一、Watchtower 簡介二、Watchtower 安裝與基本使用1. 快速安裝 Watchtower2. 監控特定容器 三、Watchtower 高級配置1. 設置檢查間隔2. 配置更新策略3. 清理舊鏡像4. 通知設置 四、生產環境最佳實踐1. 使用標簽控制更新2. 更新前執行健康檢查3. 結合CI/CD流水線 …

從易發性分析到災后規劃,AI大模型如何顛覆傳統地質災害防治?

地質災害是指全球地殼自然地質演化過程中,由于地球內動力、外動力或者人為地質動力作用下導致的自然地質和人類的自然災害突發事件。在降水、地震等自然誘因的作用下,地質災害在全球范圍內頻繁發生。我國不僅常見滑坡災害,還包括崩塌、泥石流…

第37次CCF第三題--模板展開--stringstream讀取字符串

1 a hello 1 b world 2 c $a $b 1 d good $c 1 a hi 1 e good $c1 a hello 1 b world 2 c $a $b 3 c 1 a hi 3 c將會輸出:10 和 7,對應的變量的值為: helloworld hiworld 需要注意的是,在使用間接賦值語句時,在變量的…

深度學習:智能車牌識別系統(python)

這是一個基于opencv的智能車牌識別系統,有GUI界面。程序能自動識別圖片中的車牌號碼,并支持中文和英文字符識別,支持選擇本地圖片文件,支持多種圖片格式(jpg、jpeg、png、bmp、gif)。 下面,我將按模塊功能對代碼進行分段說明: 1. 導入模塊部分 import tkinter as tk…

Missashe考研日記-day35

Missashe考研日記-day35 1 專業課408 學習時間:3h學習內容: 完結撒花!!今天把OS最后一節的內容學完了,操作系統也算是告一段落了,接下來是計網時間!不過計網我是上學期才學過的,當…

【Bootstrap V4系列】學習入門教程之 組件-下拉菜單(Dropdowns)

Bootstrap V4系列 學習入門教程之 組件-下拉菜單(Dropdowns) 下拉菜單(Dropdowns)一、Overview 概述二、Accessibility 可訪問性三、Examples3.1 Single button 單按鈕3.2 Split button 分割按鈕 四、Sizing 尺寸 下拉菜單&#x…

紅外遙控與NEC編碼協議詳解

在我們日常生活中,電視遙控器、空調遙控器、風扇遙控器,幾乎都離不開“紅外遙控”這項技術。雖然我們每天都在用,但你知道里面是怎么通信的嗎?本篇文章將帶你了解紅外遙控的工作原理,重點解析目前應用最廣泛的紅外編碼…

深入剖析 I/O 復用之 select 機制

深入剖析 I/O 復用之 select 機制 在網絡編程中,I/O 復用是一項關鍵技術,它允許程序同時監控多個文件描述符的狀態變化,從而高效地處理多個 I/O 操作。select 作為 I/O 復用的經典實現方式,在眾多網絡應用中扮演著重要角色。本文…

【Linux系列】目錄大小查看

💝💝💝歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內容和知識,也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

《AI大模型應知應會100篇》第48篇:構建企業級大模型應用的架構設計

第48篇:構建企業級大模型應用的架構設計 摘要:本文將提供企業級大模型應用的端到端架構設計方案,從系統設計原則到技術棧選擇,從高可用保障到安全合規,全面覆蓋構建穩健、可擴展、安全的大模型應用所需的工程實踐。適合…

人協同的自動化需求分析

多人協同的自動化需求分析是指通過技術工具和協作流程,讓多個參與者(如產品經理、開發人員、測試人員等)在需求分析階段高效協作,并借助自動化手段提升需求收集、整理、驗證和管理的效率與質量。以下是其核心要點: 1. …

【戰略合作】開封大學_閥門產業學院+智橙PLM

12月20日,在核電廠閥門系列團體標準啟動會上,開封大學閥門產業學院與橙色云互聯網設計有限公司達成戰略合作。 以平臺賦能行業,讓閥門教育“有的放矢” 會議與會者包括: 開封大學副校長 李治 中國國際科技促進會標準化工作委員…

element-ui日期時間選擇器禁止輸入日期

需求解釋:時間日期選擇器,下方日期有禁止選擇范圍,所以上面的日期輸入框要求禁止輸入,但時間輸入框可以輸入,也就是下圖效果,其中日歷中的禁止選擇可以通過【picker-options】這個屬性實現,此屬…

計算機網絡:深入分析三層交換機硬件轉發表生成過程

三層交換機的MAC地址轉發表生成過程結合了二層交換和三層路由的特性,具體可分為以下步驟: 一、二層MAC地址表學習(基礎轉發層) 初始狀態 交換機啟動時,MAC地址表為空,處于學習階段。 數據幀接收與源MAC學習 當主機A發送數據幀到主機B時,交換機會檢查數據幀的源MAC地址。…