日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java注解(1)-注解基础

發布時間:2024/1/17 java 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java注解(1)-注解基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

注解(Annotation)是在JAVA5中開始引入的,它為在代碼中添加信息提供了一種新的方式。注解在一定程度上把元數據與源代碼文件結合在一起,正如許多成熟的框架(Spring)所做的那樣。那么,注解到底可以做什么呢?

1、注解的作用。

  • 提供用來完整地描述程序所需要的信息,如編譯期校驗程序信息。
  • 生成描述符文件,或生成新類的定義。
  • 減輕編寫“樣板”代碼(配置文件)的負擔,可以使用注解自動生成。
  • 更加干凈易讀的代碼。
  • 編譯期類型檢查。

2、Java提供的注解

Java5內置了一些原生的注解,它們僅次于java.lang包下(不止于此):

  • @Override,表示當前的方法定義將覆蓋超類中的方法。
  • @Deprecated,標識元素為棄用的,如果程序員使用了注解為它的元素,編譯器會發出警告信息。
  • @SuppressWarnings,關閉不當的編譯器警告信息。

以上注解均為源碼級別注解(即為RetentionPolicy.SOURCE標注,需要注意的是,雖然@Deprecated是由RetentionPolicy.CLASS標注,但是所起的作用主要還是在編譯期),僅編譯器可讀取,編譯成class將會舍棄,當然,運行時就更不會存在了。

Java還提供了一些元注解,用于自定義注解(meta-annotations),如@Target、@Retention、@SupportedSourceVersion等。java.lang.annotation包中的元注解:

@Retention?指定標識的注解如何保存。

  • RetentionPolicy.SOURCE?– 注解將僅保存在源代碼級別,將會被編譯器丟棄。
  • RetentionPolicy.CLASS?– 將會在編譯時期使用,并保存在class中,但JVM不會識別此。
  • RetentionPolicy.RUNTIME?– 此注解將會被JVM識別,理論上將會在任意時期都會存在。

@Documented?表明該注解標識的元素所使用的注解應該出現在javadoc中。

@Target?指定哪種JAVA元素可以使用當前定義的注解,指定類型(ElementType)如下:

  • ElementType.ANNOTATION_TYPE?注釋類型聲明。
  • ElementType.CONSTRUCTOR?構造方法聲明。
  • ElementType.FIELD?字段聲明(包括枚舉常量)。
  • ElementType.LOCAL_VARIABLE?局部變量聲明。
  • ElementType.METHOD?方法聲明。
  • ElementType.PACKAGE?包聲明。
  • ElementType.PARAMETER?參數聲明。
  • ElementType.TYPE?類、接口(包括注釋類型)或枚舉聲明。

@Inherited ?指示注釋類型被自動繼承。如果在注釋類型聲明中存在 Inherited 元注釋,并且用戶在某一類聲明中查詢該注釋類型,同時該類聲明中沒有此類型的注釋,則將在該類的超類中自動查詢該注釋類型。此過程會重復進行,直到找到此類型的注釋或到達了該類層次結構的頂層 (Object) 為止。如果沒有超類具有該類型的注釋,則查詢將指示當前類沒有這樣的注釋。

注意,如果使用注釋類型注釋類以外的任何事物,此元注釋類型都是無效的。還要注意,此元注釋僅促成從超類繼承注釋;對已實現接口的注釋無效。

@Repeatable?(Java8中增加)使用此注解注釋的注解,在使用時是可重復使用的。注意,在Java8之前注解同一個注解在同一個元素上是不可以多次使用的。

3、定義注解

大多數時候,開發者需要自己定義注解以滿足不同的需求。

定義注解,注解一般包括注解的定義、注解元素、元注解,示例如下:

package com.zenfery.example.annotation;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;@Target(ElementType.TYPE) @Retention(RetentionPolicy.CLASS) public @interface ClassInfo {String value() default "default"; }

?

3.1、注解的定義

使用關鍵字@interface來定義,如上public @interface ClassInfo,注解的權限限定符僅支持public、default(包訪問權限)。

3.2、元注解

如上@Target(ElementType.TYPE),表示注解ClassInfo可用于類、接口、或者枚舉類型。

3.3、注解元素

注解元素使用類似普通方法的定義格式,如上述例子中的value(),使用default指定默認值。注解元素在使用時必須有值,要么是默認值,要么在使用注解是提供元素的值。且注解元素的值不能為null值。

注解元素的可用類型有:所有的基本類型、String、Class、enum、Annotation、以上類型的數組。如果使用復雜類型的注解,可使用注解的嵌套來實現。如果程序員的注解中定義了名為value的元素,并且在應用該注解的時候,如果該元素是唯一需要賦值的一個元素,那么此時無需使用名-值對的語法,而只需在括號內給出value元素所需的值即可。

3.4、注解不支持繼承

不可使用extends關鍵字繼承某個@interface。可以使用嵌套來實現相似的功能。

4、注解的使用

如果要使用以上的注解,可像如下這種方式使用:

package com.zenfery.example.annotation.clazz;import com.zenfery.example.annotation.ClassInfo;@ClassInfo("這是HelloAnnotation類。") public class HelloAnnotation { }

?

原文鏈接 ?https://blog.zenfery.cc/archives/70.html

轉載于:https://www.cnblogs.com/wryd952532573/p/7479214.html

總結

以上是生活随笔為你收集整理的Java注解(1)-注解基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。