首頁  >  文章  >  Java  >  如何更好地使用java註解

如何更好地使用java註解

王林
王林轉載
2020-06-05 17:21:231906瀏覽

如何更好地使用java註解

什麼是註解?

註解(Annotation),也叫元資料。一種代碼層級的說明。它是JDK1.5及以後版本引入的特性,與類別、介面、枚舉是在同一層。它可以聲明在套件、類別、欄位、方法、局部變數、方法參數等的前面,用來對這些元素進行說明,註解。

我們可以把註解理解為程式碼裡的特殊標記,這些標記可以在編譯,類別加載,運行時被讀取,並執行相應的處理。透過註解,開發人員可以在不改變原有程式碼和邏輯的情況下,在原始程式碼中嵌入補充資訊。

1、註解的作用

寫文件:透過程式碼裡標識的註解產生文件【產生文件doc文件】

程式碼分析:透過程式碼裡標識的註解對程式碼進行分析【使用反射】

編譯檢查:透過程式碼裡標識的註解讓編譯器能夠實現基本的編譯檢查【@Override】

## 2.JDK中預先定義的註解

@Override

偵測被該註解標註的方法是否是繼承自父類別(介面)的。

@Deprecated

該註解標識的內容,表示已過時,使用的時候,會有一條橫線。

SuppressWarnings

壓制警告,一般傳遞參數all @SuppressWarnings(“all”)。 (影片教學推薦:

java影片

3、自訂註解

格式

public @interface 注解名称 {
	属性列表;
}

本質:註解本質上就是一個接口,該接口預設繼承Annotation接口,可以透過javap 類別名稱.class指令反編譯class檔

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

屬性:

註解中的屬性,就是介面中的抽象方法。

要求:

屬性的傳回值類型只能是以下類型

基本資料型別

String

列舉

註解

以上類型的陣列

public @interface MyAnno {
    int age();
    String name();
    //枚举类型
    Person per();
    //注解类型
    MyAnno2 anno2();
    //数组类型
    String[] strs();
}

//枚举类Person
public enum Person {
    P1,P2;
}

注意:

#定義了屬性,使用時必須給屬性賦值,多個屬性之間用逗號隔開,所以,一般註解中方法名稱一般取成屬性名;

如果定義屬性時,使用default關鍵字給屬性預設初始化值,則使用時,可以不用給屬性賦值;

如果只有一個屬性需要賦值,且屬性的名稱是value,value可以省略,直接定義屬性值;

陣列賦值時,值使用{}包覆。如果數組中只有一個值,則{}可以省略。

@MyAnno(age=20, name="zhangsan", per=Person.P1, anno2=@MyAnno2, strs={"zhangsan","lisi"})
public class Test {
}

元註解:用來描述註解的註解

@Target

#目前被描述的註解能夠作用的位置,該註解只有一個屬性是value,傳回值是ElementType枚舉類型的陣列。

ElementType 的常用值:

TYPE:可以作用於類別上

METHOD:可以作用於方法上

FIELD:可以作用於成員變量上

@Rentention

描述註解被保留的階段,註解只有一個屬性value,傳回值是RetentionPolicy枚舉型別

RetentionPolicy 的值

#SOURCE:目前被描述的註解,不會保留到class檔案中

CLASS:目前被描述的註解,會保留到class字節碼檔案中,但不會被JVM讀取到

RUNTIME:目前被描述的註解,會保留到class字節碼檔案中,並被JVM讀取到,自訂的值,一般都會取這個值

@Documented

目前被描述的註解是否被抽取到api文檔中

@Inherited

#目前被描述的描述註解是否被子類別繼承

一般常用到的是前兩個元註解。

4、註解的使用

在程式中使用註解:取得這幾中定義的屬性值

// pro 注解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface pro {
    String className();
    String methodName();
}

//在程序中使用注解
@pro(className="anli.Demo1", methodName = "show1")
public class UseAnno {
    public static void main(String[] args) throws Exception {
        //获取这个类的class对象
        Class<UseAnno> useAnnoClass = UseAnno.class;
        //获取指定的注解类子类对象
        pro proAnno = useAnnoClass.getAnnotation(pro.class);
        //执行注解中的方法,获取注解中属性的值
        String className = proAnno.className();
        String methodName = proAnno.methodName();
    }

透過Class類別中的getAnnotation ()方法,獲得的是註解類別的實作類別的對象,有了對象,就可以執行註解中的方法,返回值就是使用註解時設定的屬性值。其實就是在記憶體中產生了一個該註解介面的子類別實作物件

	 public class ProImpl implements Pro{
          public String className(){
               return "cn.itcast.annotation.Demo1";
           }
           public String methodName(){
               return "show";
           }
       }
推薦教學:
java開發入門

######

以上是如何更好地使用java註解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除