日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 菜鸟入门 | 深入浅出 Java 注解

發布時間:2023/12/8 java 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 菜鸟入门 | 深入浅出 Java 注解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

注解簡介

所謂注解,其實就像一種擁有特定作用的注釋,自 JDK1.5 及之后版本所引入的特性,它是放在 Java 源碼的類、方法、字段、參數前的一種用作標注的“元數據”,與類、接口、枚舉處于同一個層次中。

通過其作用的不同,我們常常將注解分為如下 3 類:

  • 編寫文檔:通過代碼中標識的注解生成對應文檔(即類似于 Java doc 的文檔);
  • 代碼分析:通過代碼中標識的注解對代碼進行分析(使用反射);
  • 編譯檢查:通過代碼中標識的注解讓編譯器能實現基本的編譯檢查(@Override);
  • 常用的預定義注解

    @Override

    一般是用在方法上,表示重寫該父類的方法,比如我們使用最多的 toString() 方法,它是 Object 類的一個方法,而我們的寫的類都是繼承自 Object 類,所以我們自定義的所有類都是有 toString() 方法的。但是如果我們自定義類中的方法在父類中沒有,則不能使用該注解,否則會導致無法編譯通過。

    package com.cunyu;/*** Created with IntelliJ IDEA.** @author : cunyu* @version : 1.0* @email : 747731461@qq.com* @website : https://cunyu1943.github.io* @date : 2021/6/20 10:04* @project : JavaWeb* @package : com.cunyu* @className : OverrideTest* @description :*/public class OverrideTest {private Integer id;private String name;public OverrideTest(Integer id, String name) {this.id = id;this.name = name;}@Overridepublic String toString() {final StringBuffer sb = new StringBuffer("OverrideTest{");sb.append("id=").append(id);sb.append(", name='").append(name).append('\'');sb.append('}');return sb.toString();}public static void main(String[] args) {Integer id = 101;String name = "村雨遙";OverrideTest overrideTest = new OverrideTest(id, name);System.out.println(overrideTest);} }

    @Deprecated

    一般用在方法之前,表示該方法已經過期,不建議再繼續使用(但是仍然有效,只不過可能有更新的版本,推薦使用更新的版本)。

    package com.cunyu;/*** Created with IntelliJ IDEA.** @author : cunyu* @version : 1.0* @email : 747731461@qq.com* @website : https://cunyu1943.github.io* @公眾號 : 村雨遙* @date : 2021/6/20 10:07* @project : JavaWeb* @package : com.cunyu* @className : DeprecateTest* @description :*/public class DeprecateTest {@Deprecatedpublic static void sayHello() {System.out.println("Hello World!");}public static void newSayHello() {System.out.println("Hello,Welcome to Java !");}public static void main(String[] args) {sayHello();newSayHello();} }

    @SuppressWarnings

    表示忽略警告信息,常用的值以及含義如下表:

    值描述
    deprecation使用了不贊成使用的類或方法時的警告
    unchecked使用了未經檢查的轉換時的警告
    fallthrough當 switch 程序塊直接通往下一種情況而沒有 break 時的警告
    path在類路徑、源文件路徑等中有不存在的路徑時的警告
    serial當在可序列化的類上缺少 serialVersionUID 定義時的警告
    finally任何 finally 子句不能正常完成時的警告
    rawtypes泛型類型未指明
    unused引用定義了,但是沒有被使用
    all關閉以上所有情況的警告
    package com.cunyu;import java.util.ArrayList; import java.util.List;/*** Created with IntelliJ IDEA.** @author : cunyu* @version : 1.0* @email : 747731461@qq.com* @website : https://cunyu1943.github.io* @公眾號 : 村雨遙* @date : 2021/6/20 10:07* @project : JavaWeb* @package : com.cunyu* @className : SuppressWarningsTest* @description :*/public class SuppressWarningsTest {@SuppressWarnings("unchecked")public static void main(String[] args) {String item = "村雨遙";@SuppressWarnings("rawtypes")List items = new ArrayList();items.add(item);System.out.println(items);} }

    自定義注解

    格式

    我們可以使用 @interface 來自定義注解,其格式如下:

    public @interface AnnotationName{// 屬性列表…… }

    一個簡單的示例如下,其中 AnnoDemo 代表著我們自定義注解的名稱,而 name()、age()、score() 則分別表示自定義注解的三個屬性,而且我們利用關鍵字 default 對每個屬性都賦予了默認值。

    public @interface AnnoDemo{String name() default "村雨遙";int age() default 20;float score() default 60.0f; }

    原理

    注解本質上相當于一個接口,它默認繼承自 java.lang.annotation.Annotation。

    public interface AnnotationName extends java.lang.annotation.Annotation{}

    參數

    注解的參數類似于無參的方法,通常我們推薦用 default 來設定一個默認值,對于方法的基本要求通常有如下幾點:

  • 方法的返回值類型不可以是 void;
  • 如果定義了方法,那么在使用時需要給方法進行賦值,賦值的規則如下:
  • 若定義方法時,使用了關鍵字 default 對方法賦予了默認初始值,那么在使用注解時,可以不用對方法進行再次賦值;
  • 若只有一個方法需要賦值,且方法名為 value,那么此時 value 可以省略,直接定義值即可;
  • 數組賦值時,值需要用大括號 {} 包裹,若數組中只有一個值,那么此時 {} 可以省略;
  • public @interface AnnoDemo{String name() default "村雨遙";int age() default 20;float score() default 60.0f; }

    如上述例子中,name()、age()、score() 就是我們自定義注解的參數。而當我們要是用該注解時,則通過如下方式來對參數進行賦值。

    @AnnoDemo(name = "村雨遙", age = 26, score = 95.0f) public class Demo{…… }

    元注解

    定義

    所謂元注解(meta annotation),就是可以用來修飾其他注解的注解。

    常用的元注解

  • @Target
  • 描述注解所修飾的對象范圍,其取值主要有如下幾種:

    值說明
    ElementType.TYPE表示可以作用于類或接口
    ElementType.FIELD表示可以作用于成員變量
    ElementType.METHOD表示可以作用于方法
    ElementType.CONSTRUCTOR表示可以作用于構造方法
    ElementType.PARAMETER表示可以作用于方法的參數
    @Target(ElementType.TYPE) public @interface AnnoDemo{String name() default "村雨遙";int age() default 20;float score() default 60.0f; }
  • @Retention
  • 用于約束注解的生命周期,其取值如下:

    值說明
    RetentionPolicy.SOURCE表示在源代碼文件中有效,注解將被編譯器丟棄(注解信息僅保留在源碼中,源碼經編譯后注解信息丟失,不再保留到字節碼文件中)
    RetentionPolicy.CLASS表示在字節碼文件中有效,注解在字節碼文件中可用,但會被 JVM 丟棄
    RetentionPolicy.RUNTIME表示在運行時有效,此時可以通過反射機制來讀取注解的信息
    @Target(ElementType.TYPE) @Retention(RetentionPoicy.RUNTIME) public @interface AnnoDemo{String name() default "村雨遙";int age() default 20;float score() default 60.0f; }
  • @Documented
  • 描述其他類型的注解是否被抽取到 API 文檔中。

    @Target(ElementType.TYPE) @Retention(RetentionPoicy.RUNTIME) @Documented public @interface AnnoDemo{String name() default "村雨遙";int age() default 20;float score() default 60.0f; }
  • @Inherited
  • 這是一個標記注解,描述某個注解能夠被子類繼承,但是該元注解只適合已經配置了 @Target(ElementType.TYPE) 類型的自定義注解,而且僅針對于類的繼承,而對于接口的繼承則無效。

    @Inherited public @interface AnnoDemo{String name() default "村雨遙";int age() default 20;float score() default 60.0f; }
  • @Repeatable
  • 該注解是從 JDK1.8 新引入的元注解,表示在同一位置能夠重復相同的注解。在沒有該注解之前,我們一般是無法在同一類型上使用相同注解的,但引入該注解后,我們就可以在同一類型上使用相同注解。

    @Target(ElementType.TYPE) @Repeatable(AnnoDemos.class) public @interface AnnoDemo{String name() default "村雨遙";int age() default 20;float score() default 60.0f; }public @interface AnnoDemos{AnnoDemo[] value(); }

    利用 @Repeatable 配置自定義注解之后,我們就可以在某個類型聲明處添加多個我們自定義的注解了。

    @AnnoDemo(name = "村雨遙", age = 26, score = 88.0f) @AnnoDemo(name = "曉瑜", age = 27, score = 90.0f) public class Student{…… }

    總結

    總結上述的知識點,我們將自定義注解的過程歸納為如下 3 步。

  • 定義一個注解
  • public @interface AnnoDemo{ }
  • 添加參數并設置默認值
  • public @interface AnnoDemo{String name() default "村雨遙";int age() default 20;float score() default 60.0f; }
  • 利用元注解來配置我們的自定義注解
  • @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface AnnoDemo{String name() default "村雨遙";int age() default 20;float score() default 60.0f; }

    在實際應用過程中,利用元注解配置自定義注解時,必須設置 @Target 和 @Retention 兩個元注解,而且 @Retention 的值通常是設置為 RetentionPolicy.RUNTIME。

    好了,以上就是我們注解的相關概念以及自定義注解所需要的掌握的一些知識點了,如果你覺得對你有所幫助,那就來一波點贊關注吧!

    總結

    以上是生活随笔為你收集整理的Java 菜鸟入门 | 深入浅出 Java 注解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。