您好,登錄后才能下訂單哦!
今天小編給大家分享一下Annotation注解怎么定義的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
Annotatio從jdk1.5開始產生;他是代碼里面的特殊標記,可以在編譯、類加載、運行時被讀取,并執行相應的處理。
可以修飾包、類、構造器、 成員變量、參數、局部變量的聲明;
框架 = 注解+反射+設計模式
@auth 標明該模塊的作者,多個作者用,分割
@version 表明該類模塊的版本
@see 參考轉向,也就是相關主題;
@since 從哪個版本開始增加的;
@param 對方法中某些參數的說明,如果沒有參數就不能寫
@return 對返回值的說明,如果方法的返回值類型就void就不能寫
@exception 對方法可能拋出的一場進行說明,如果方法沒有又throws 顯示拋出異常,就不能寫其中
例如:
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;
@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
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
只能定義Annotation的生命周期,
RetentionPolicy3種狀態:SOURCE(編譯時拋棄注解) CLASS(編譯時保留注解) RUNTIME(執行時保留注解,只有該狀態時,反射才能調)
eg.@Retention(RetentionPolicy.RUNTIOME)
只能定義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
①在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("學生走了"); } }
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注解怎么定義”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。