国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java從零開始學四十七(注解簡述)

2019-11-14 23:54:58
字體:
來源:轉載
供稿:網友
java從零開始學四十七(注解簡述)一、Java中注解Annotation

什么是注解:用來描述數據的數據(元數據)。

Java代碼里的特殊標記。它為代碼中添加用Java程序無法表達的額外信息提供一種形式化的方法,使用我們可以在未來的某一個時刻方便的使得這些注解修飾的程序元素。

作用:

用將由編譯器來測試和驗證的格式,存儲有關程序額外信息

生成 描述符文件,甚至是新的類定義

減輕編寫模板代碼的負擔

使代碼更加干凈易讀

注解和注釋不同

注解與普通的代碼注釋有一定的區別,也有一定的聯系。注解和注釋都屬于對代碼的描述;

注釋的作用只是簡單的描述程序的信息,它不會被程序所讀取;

注解則是Java代碼中的特殊標記,這些標記可以在編譯、類加載、運行時被讀取,并執行相應的處理

通過使用注解,程序開發人員可以在不改變原有邏輯的情況下在源文件中嵌入一些補充的信息,代碼分析工具、開發工具和部署工具可以通過這些補充信息進行驗證或者部署。

二、注解語法

使用注解時要在基前面加“@” 符號,同時將注解作為修飾符使用

所有的注解都繼承了java.lang.annotation包下的Annotation接口

注解語法規范

  • 將注解放在所有修飾符之前
  • 通常將注解單獨放置在一行
  • 默認情況下,注解可用于修飾任何元素,包括類,方法,成員,變量等。
三、注解類型

內建注解(也稱為基本注解),定義于java.lang包下

  • 限定重寫父類方法:@Override
  • 標示已經過時:@DePRecated
  • 抑制編譯器警告:@SupperssWarnings

元注解(Meta Annotation)

  • @Retention
  • @Target
  • @Documented
  • @Inherited

自定義注解

  使用@interface自定義注解

@Override

@Override只能用于修飾方法,而不能修飾其它的元素。

@Deprecated注解
    private String name;    private String pwd;        //標示這個屬性已經過時,會在這個屬性或者方法 名上加上刪除線    @Deprecated    private int age;    @Deprecated    public String getName() {        return name;    }

@SuppressWarnings
    @SuppressWarnings("unused")    public static void main(String[] args) {            //沒有定義泛型        @SuppressWarnings("rawtypes")            List list=new ArrayList();

四、元注解

元注解用來修飾其它的注解位于java.lang.annotation下

元注解(Meta Annotation)

  • @Retention:用于指定被修飾的注解可以保留多長時間,包含一個RetentionPolicy類型的value成員變量,使用Retetion時必須為該value成員變量指定值
  • @Target:有唯一的value作為成員變量,value的類型為java.lang.annotation.ElementType[]是被標注的枚舉類型
  • @Documented:用于指定被修飾的注解將被javadoc工具提取成文檔,沒有成員變量
  • @Inherited:用于指定被修改的注解將具有繼承性

五、自定義注解

使用@interface 關鍵字

注解類型和接口的相似之處

都可以定義常量,靜態成員(如枚舉類型定義)。注解類型也可以像接口一樣被實現或者被繼承

package com.pb.annotation.diy;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Inherited;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** *自定義注解需要使用@interface關鍵字 * *///設置注解可以為javadoc獲取為幫助文檔@Documented/* * @Retention有如下參數(注解的生命周期) *         RetentionPolicy.SOURCE:注解被編譯器丟棄 *         RetentionPolicy.CLASS:注解保存在class類當中,被虛擬機忽略 *         RetentionPolicy.RUNTIME:注解被保存在class類當中,被虛擬機讀取 * */@Retention(RetentionPolicy.RUNTIME)/* * target 有如下參數: *         TYPE : 注解目標是類、接口 *         FIELD: 注解目標是字段 *         METHOD:注解目標是方法 *         PARAMETER:注解目標是方法的參數 *         CONSTRUCTOR:注解目標是構造函數 *         LOCAL_VARIABLE:注解目標是局部變量 * */@Target(value={ElementType.METHOD,ElementType.TYPE,ElementType.FIELD})/* * 可以被繼承 */@Inheritedpublic @interface MyAnnotation {    //設置注解成員變量并賦初始值    String name() default "張三";    int age()         default 21;    }

讀取注解信息

package com.pb.annotation.diy;import java.lang.annotation.Annotation;public class MyAnnotationTest {        @MyAnnotation(name="Jack",age=32)    public void getInfo(){                try {            //獲取當前getInfo()方法中包含的所有注解            @MyAnnotation            Annotation [] annos=MyAnnotationTest.class.getMethod("getInfo").getAnnotations();            //注解數組            for (Annotation an : annos) {                if(an instanceof MyAnnotation){                    System.out.println("an 是"+an);                    System.out.println("注解中的name:"+((MyAnnotation) an).name());                    System.out.println("注解中的age:"+((MyAnnotation) an).age());                }            }                                } catch (NoSuchMethodException | SecurityException e) {            e.printStackTrace();        }    }    public static void main(String[] args) {        MyAnnotationTest mt=new MyAnnotationTest();        mt.getInfo();    }}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鄂托克前旗| 福鼎市| 南平市| 中牟县| 额济纳旗| 绥棱县| 万载县| 加查县| 邵阳县| 邓州市| 洪江市| 高雄县| 海兴县| 板桥市| 富顺县| 延吉市| 沅江市| 农安县| 平乐县| 宜兰市| 东山县| 独山县| 镇赉县| 嵩明县| 聂拉木县| 平阳县| 清丰县| 于都县| 博野县| 札达县| 永新县| 和田县| 温宿县| 昆明市| 汝州市| 漳浦县| 刚察县| 瓮安县| 隆德县| 林周县| 山东省|