Annotation注解(有源代码)
注解(annotation)概述:
·從JDK5.0 開始,java增加了對元數據(MetaData)的支持,也就是Annotation(注解)
·Annotation其實就是代碼里的特殊標記,這些標記可以在編譯,類加載,運行時被讀取,并執行相應的處理。通過使用Annotation,程序員可以在不改變原有邏輯的情況下,在源文件中嵌入一些補充信息。
·Annotation可以像修飾符一樣被使用,可用于修飾包,類,構造器,方法,成員變量,參數,局部變量的聲明,這些信息被保存在Annotation的“name=value”對中。
·Annotation能被用來為程序元素(類,方法,成員變量等)設置元數據
基本的Annotation:
·使用Annotation時要在其前面增加@符號,并把該Annotation當成一個修飾符使用。用于修飾它支持的程序元素
·三個基本的Annotation:
1.@ Override:限定重寫父類方法,該注釋只能用于方法
2.@ Deprecated:用于表示某個程序元素(類,方法等)已過時
3.@ SuppressWarnings:抑制編譯器警告
自定義Annotation:
·定義新的Annotation類型使用@interface關鍵字
·Annotation的成員變量在Annotation定義中以無參數方法的形式來聲明。其方法名和返回值定義了該成員的名字和類型。
·可以在定義Annotation的成員變量時為其制定初始值,指定成員變量的初始值可使用default關鍵字
例:
public @interface MyAnnotation{
String name() default "liang"
}
·沒有成員定義的Annotation稱為標記;包含成員變量的Annotation稱為元數據Annotation
提取Annotation信息:
·JDK5.0 在java.lang.reflect 包下新增了AnnotationElement接口,該接口代表程序中可以接受注解的程序元素
·當一個Annotation類型被定義為運行時可見,當class文件被載入時保存在class文件中的Annotation才會被虛擬機讀取
·程序可以調用AnnotationElement對象的如下方法來訪問Annotation信息
?
?
JDK的元Annotation:
·JDK的元Annotation用于修飾其他Annotation定義
·JDK5.0 提供了專門在注解上的注解類型,分別是:
1.Retention
2.Target
3.Documented
4.Inherited
?
·@Retention:只用用于修飾一個Annotation定義,用于指定該Annotation可以保留多長時間,@Retention包含一個RetentionPolicy類型的成員變量,使用@Retention時必須為該value成員變量指定值:
1.RetentionPolicy.SOURCE:編譯器直接直接丟棄這種策略的注釋
2.RetentionPolicy.CLASS(默認):編譯器會把注釋記錄在class文件中。當運行java程序時,JVM不會保留注解。這是 默認值
3.RetentionPolicy.RUNTIME:編譯器將把注釋記錄在class文件中。當運行java程序時,JVM會保留注釋。程序可以通過反射獲取該注釋。
·@Target:用于修飾Annotation定義,用于指定被修飾的Annotation能用于哪些程序元素。@Target也包含了一個名為value的成員變量。
@Documented:用于指定被該元Annotation修飾的Annotation類江北javadoc工具提取成文檔。
1.定義為Documented的注解必須設置Retention值為RUNTIME。
·@Inherited:被它修飾的Annotation將具有繼承性。如果某個類使用了被@Inherited修飾的Annotation,則其子類將自動具有該注解(實際應用中,使用較少)。
?
1 package com.demo; 2 /* 3 * 4 * 如何自定義一個注解 5 * 元注解 6 */ 7 public class TestAnnotation { 8 public static void main(String[] args) { 9 Person p = new Student(); 10 p.walk(); 11 } 12 } 13 14 class Student extends Person{ 15 16 @Override 17 public void walk() { 18 System.out.println("學生走路"); 19 } 20 @Override 21 public void eat() { 22 super.eat(); 23 } 24 } 25 class Person{ 26 @MyAnnotation(value="liang") 27 String name; 28 int age; 29 30 public Person() { 31 } 32 public Person(String name, int age) { 33 super(); 34 this.name = name; 35 this.age = age; 36 } 37 public void walk(){ 38 System.out.println("走路"); 39 } 40 @Deprecated 41 public void eat(){ 42 System.out.println("吃東西 "); 43 } 44 @Override 45 public String toString() { 46 return super.toString(); 47 } 48 49 } 1 package com.demo; 2 3 import java.lang.annotation.Retention; 4 import java.lang.annotation.RetentionPolicy; 5 import java.lang.annotation.Target; 6 import java.lang.reflect.Field; 7 import java.lang.annotation.ElementType; 8 //自定義的注解 9 @Target({ElementType.FIELD}) 10 @Retention(RetentionPolicy.RUNTIME) 11 public @interface MyAnnotation { 12 String value() default "Hello"; 13 }?
轉載于:https://www.cnblogs.com/liangxiaoyu/p/5119905.html
總結
以上是生活随笔為你收集整理的Annotation注解(有源代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求解一个数的所有约数之积
- 下一篇: Unity 3D 离线协议