java annotation,java里的注解

 2023-10-17 阅读 21 评论 0

摘要:從JDK5開始,Java增加對元數據的支持,也就是 注解(Annotation) ,注解與注釋是有一定區別的,可以把注解理解為代碼里的特殊標記,這些標記可以在編譯,類加載,運行時被讀取,并執行相應的處理。 java annotation,

從JDK5開始,Java增加對元數據的支持,也就是 注解(Annotation) ,注解與注釋是有一定區別的,可以把注解理解為代碼里的特殊標記,這些標記可以在編譯,類加載,運行時被讀取,并執行相應的處理。

java annotation,注釋 ( comment ) 用于注解說明解釋程序的文字就是 注釋 。

  • 注解入門
  • 內置注解
  • 自定義注解,元注解

注解入門

注解是JAVA5開始引入的新技術。注解其實就是代碼里的特殊標記,它用于替代配置文件:傳統方式通過配置文件告訴類如何運行,有了注解技術后,開發人員可以通過注解告訴類如何運行。在Java技術里注解的典型應用是:可以通過反射技術去得到類里面的注解,以決定怎么去運行類。

注解的作用:

  • 注解不屬于代碼,但它可以對程序做出解釋
  • 可以被其它程序(如編譯器等)讀取,有助于其它程序可以進行針對性的優化。

注解的格式:

  • 注解是以“@注釋名”在代碼中存在的,還可以添加參數值,例如:@SuppressWarning(value=“unchecked”)

注解在哪里使用?

  • 可以附加在package, class, method, field等上面,相當于給他們添加了額外的輔助信息,我們可以通過反射機制編程實現對這些元數據的訪問
package com.peng.annotation;public class Test {// @Override 就是重寫的注解,一般idea里黃色的字都是注解@Overridepublic String toString() {return super.toString();}
}

內置注解

內置注解是系統自帶的注解,一般使用較多。

  • @Override:定義在java.lang.Override中,此注釋只適用于修辭方法,表示一個方法聲明打算重寫超類中的另一個方法申明。
  • @Deprecated:定義在java.lang.Deprecated中,此注釋可以用于修辭方法,屬性,類,表示不鼓勵程序員使用這樣的元素,通常十一位內它很危險或者存在更好的選擇。(Deprecated: adj.棄用的)
  • @SuppressWarnings:定義在java.lang.SuppressWarrings中,用來抑制編譯時的警告信息。與前兩個注解,該注解必須添加一個參數才可使用,且參數都是內置時已定義好的,如"all",“unchecked”,{“all”,“unchecked”}等

元注解

除了直接使用JDK 定義好的注解,我們還可以自定義注解,在JDK 1.5中提供了4個標準的用來對注解類型進行注解的注解類,我們稱之為 meta-annotation(元注解),他們分別是:
  • @Target

    • 用于解釋我們的注解將用于什么范圍(例如一個方法或一個域),該范圍有一個明確的枚舉類 ElemenetType
  • @Retention

    • 表示在什么級別保存該注解信息。可選的參數值在枚舉類型 RetentionPolicy中。
  • @Documented

    • 表示將此注解包含在javadoc中,它表示此注解會被javadoc提取成文檔。
  • @Inherited

    • 允許子類繼承父類的注解

自定義注解

使用**@interface自定義注解時,自動繼承了java.lang.annotation.Annotation接口,由編譯程序自動完成其他細節。在定義注解時,不能繼承其他的注解或接口。@interface**用來聲明一個注解,其中的每一個方法實際上是聲明了一個配置參數。方法的名稱就是參數的名稱,返回值類型就是參數的類型(返回值類型只能是基本類型、Class、String、enum)。可以通過default來聲明參數的默認值。

定義注解格式:
  public @interface 注解名 {定義體}

注解參數的可支持數據類型:

1.所有基本數據類型(int,float,boolean,byte,double,char,long,short)
    2.String類型
    3.Class類型
    4.enum類型
    5.Annotation類型
    6.以上所有類型的數組

小技巧:當注解只有一個時,且其值名為value,則value可以省略。

package com.peng.annnotation;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;// 自定義注解
public class Test {// 注解可以顯示賦值, 如果沒有默認值, 就必須給注解復制@MyAnnotation(name = "", age = 18, id = 1, schools = {})// 當注解只有一個時,且其值名為value,則value可以省略@MyAnnotation2("")public void test(){}
}@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation{// 注解的參數: 參數類型 + 參數名();String name() default "";int age() default 18;int id() default -1; //常用小技巧,設置-1表示這項找不到,表示為空。String[] schools() default {"浙江工商大學", "浙江大學"};
}@interface MyAnnotation2{String value();
}

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/143405.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息