中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Annotation注解怎么定義

發布時間:2022-10-17 15:45:13 來源:億速云 閱讀:91 作者:iii 欄目:編程語言

今天小編給大家分享一下Annotation注解怎么定義的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

 一、 Annotation 概述;

  Annotatio從jdk1.5開始產生;他是代碼里面的特殊標記,可以在編譯、類加載、運行時被讀取,并執行相應的處理。
  可以修飾包、類、構造器、 成員變量、參數、局部變量的聲明;
  框架 = 注解+反射+設計模式 

二、注解示例

1. 文檔注解: 

  • @auth        標明該模塊的作者,多個作者用,分割

  • @version     表明該類模塊的版本

  • @see            參考轉向,也就是相關主題;

  • @since        從哪個版本開始增加的;

  • @param        對方法中某些參數的說明,如果沒有參數就不能寫

  • @return        對返回值的說明,如果方法的返回值類型就void就不能寫

  • @exception    對方法可能拋出的一場進行說明,如果方法沒有又throws 顯示拋出異常,就不能寫其中

例如:

Annotation注解怎么定義

Annotation注解怎么定義

1 /**
 2  * 
 3  * @author joy
 4  * @Description:
 5  * @date: 2021年3月25日 上午10:06:39
 6  */
 7 public class Day22Annotation10 {
 8     public static void main(String[] args) {
 9         @SuppressWarnings("unused")
10         int a = 0;
11     }
12

View Code

補充:eclipse配置:

1 windows-->preference 
2   Java-->Code Style-->Code Templates 
3
在右側選擇Comments,將其中的Type項,然后選右邊的"Edit",進入編輯模式: 
/**
 * @author ${user}
 * @Description:
 * @date:   ${date} ${time}       
 * ${tags}
 */
最后 apply and close;

Annotation注解怎么定義

2.三個基本注解:

  • @override    限定重寫父類方法 如下Student 中的 work 方法(如下代碼),如果student中寫錯了work(如下圖),則編譯報錯;若沒有加override注解,那么如果work方法不會在編譯的時候被校驗; 若work在寫的時候寫成了wok()則也不會報錯;如果寫了override 則會報錯,顯示沒有重寫方法;

  • @Deprecated    用于表示所修飾的元素(類、方法等)已過時;通常時因為所修飾的結構危險或存在更好的選擇;

  • @SuppressWarnIngs:抑制編譯警告

1 public class Day22Annotation10 {
 2     public static void main(String[] args) {
 3         Student student = new Student("aa",1);
 4         student.work();//學生走了
 5     }
 6 }
 7 class Person{
 8     private String name;
 9     private int age;
10 
11     public String getName() {
12         return name;
13     }
14 
15     public void setName(String name) {
16         this.name = name;
17     }
18 
19     public int getAge() {
20         return age;
21     }
22 
23     public void setAge(int age) {
24         this.age = age;
25     }
26     public Person(String name, int age) {
27         super();
28         this.name = name;
29         this.age = age;
30     }
31     
32     public void work() {
33         System.out.println("人走了");
34     }
35     public void eat() {
36         System.out.println("人吃飯");
37     }
38 }
39 class Student extends Person{
40     
41     public Student(String name, int age) {
42         super(name, age);
43         // TODO Auto-generated constructor stub
44     }
45 
46     @Override
47     public void work() {
48         System.out.println("學生走了");
49     }
50

Annotation注解怎么定義

 三、自定義注解:參照SupressWarnlngs;

  1.注解聲明:@interface
  2.內部成員定義,通常使用 value表示
  3.可使用成員的默認值,使用default定義
  4.如果自定義注解沒有成員,表明是一個標識作用;

  如果注解有成員,在使用注解時,需要指定成員的值,若有默認值,則不需要指定;
  自定義注解必須配上注解的信息處理流程(反射)才有意義;
  通常指明Retention和Target

1 public @interface MyAnnotation {
2 
3     String value() default "hello";
4
1 @MyAnnotation//@MyAnnotation(value="hi")
 2 class Student extends Person{
 3     
 4     public Student(String name, int age) {
 5         super(name, age);
 6         // TODO Auto-generated constructor stub
 7     }
 8 
 9     @Override
10     public void work() {
11         System.out.println("學生走了");
12     }
13

  四、JDK中的4種元注解:

  1.Retention:

                  只能定義Annotation的生命周期,
                  RetentionPolicy3種狀態:SOURCE(編譯時拋棄注解) CLASS(編譯時保留注解) RUNTIME(執行時保留注解,只有該狀態時,反射才能調)
                  eg.@Retention(RetentionPolicy.RUNTIOME) 

2.Target

          只能定義Annotation的使用類型;(如下代碼)
          類型:

  • @Target(ElementType.TYPE)——接口、類、枚舉、注解

  • @Target(ElementType.FIELD)——字段、枚舉的常量

  • @Target(ElementType.METHOD)——方法

  • @Target(ElementType.PARAMETER)——方法參數

  • @Target(ElementType.CONSTRUCTOR) ——構造函數

  • @Target(ElementType.LOCAL_VARIABLE)——局部變量

  • @Target(ElementType.ANNOTATION_TYPE)——注解

  • @Target(ElementType.PACKAGE)——包

  例如@Target({FIELD,CONSTRUCTOR});說明該注解只能用在屬性和構造器上,比如該注釋寫在方法前那就不行,會報錯;如下代碼;

元注釋的作用:修改時其他 annotation的annotation
  元數據:對現有數據的修飾的數據;eg.String name = "joy";這里,String和name 就是元數據;

1 @Retention(RetentionPolicy.RUNTIME)
2 @Target({TYPE, FIELD, PARAMETER,CONSTRUCTOR, ElementType.TYPE_PARAMETER,ElementType.TYPE_USE})
3 public @interface MyAnnotation {
4 
5     String value() default "hello";
6

Annotation注解怎么定義

3.Documented 被他修飾的Annotation類將被javadouc 工具提取成文檔  

4.Inherited 被他修飾的Annotation將具有繼承性

五、通過反射獲取注解信息;

六、jdk8種注解的新特性:可重復注解、類型注解

  1.可重復注解;可以加多個不同類型的注解 eg.Repeatable(MyAnotations.class);

  ①在MyAnnotation上聲明@Repeatable,成員值為MyAnotations.class
   ②MyAnotation的Rarget 和 Retention和MyAnotations相同;

1 @Retention(RetentionPolicy.RUNTIME)
2 @Target({ElementType.TYPE,ElementType.CONSTRUCTOR, ElementType.TYPE_PARAMETER,ElementType.TYPE_USE})
3 public @interface MyAnnotations {
4 
5     MyAnnotation[] value();
6
1 @Repeatable(MyAnnotations.class)
2 @Retention(RetentionPolicy.RUNTIME)
3 @Target({ElementType.TYPE,ElementType.CONSTRUCTOR, ElementType.TYPE_PARAMETER,ElementType.TYPE_USE})
4 public @interface MyAnnotation {
5 
6     String value() default "hello";
7

可重復注解實例:

@MyAnnotation(value="hi")
@MyAnnotation
class Student extends Person{
    
    public Student(String name, int age) {
        super(name, age);
        // TODO Auto-generated constructor stub
    }

    
    @Override
    public void work() {
        System.out.println("學生走了");
    }
}

  2.類型注解(可以修飾泛型)

  ElementType.TYPE_PARRAMETER 表示該注解能寫在類型變量的聲明語句種(如泛型聲明)
  ElementType.TYPE_USE 表示該注解能寫在使用類型的任何語句中;

類型注解(可以修飾泛型)實例:

class Generic<@MyAnnotation T>{
    public void show() throws RuntimeException{
        int num = (@MyAnnotation int )10l;
    }
}
class Generic<@MyAnnotation T>這里的@MyAnnotation,是因為設置了@Target({ElementType.TYPE,ElementType.CONSTRUCTOR, ElementType.TYPE_PARAMETER})

@Target設置了ElementType.TYPE_PARAMETER;所以@MyAnnotation這里不報錯;
int num = (@MyAnnotation int )10l;@Target設置了ElementType.TYPE_USE;所以這里(@MyAnnotation int )10l不報錯;
否則 報錯;

以上就是“Annotation注解怎么定義”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永济市| 聊城市| 丁青县| 新昌县| 屏南县| 常州市| 西丰县| 泾阳县| 谢通门县| 正蓝旗| 航空| 长岛县| 甘德县| 抚松县| 浏阳市| 浪卡子县| 固阳县| 莱西市| 福鼎市| 阳曲县| 尚义县| 满城县| 四子王旗| 龙南县| 无为县| 凌海市| 西丰县| 叶城县| 威信县| 万载县| 中超| 青海省| 隆安县| 淳安县| 神木县| 湖南省| 康乐县| 中山市| 新营市| 宁德市| 乐山市|