激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

香港云服务器
服務器之家 - 編程語言 - JAVA教程 - 詳解Java注解教程及自定義注解

詳解Java注解教程及自定義注解

2020-03-24 12:32lijiao JAVA教程

這篇文章主要為大家詳細介紹了Java注解教程及自定義注解,幫助大家更好地學習Java注解,感興趣的小伙伴們可以參考一下

Java注解提供了關于代碼的一些信息,但并不直接作用于它所注解的代碼內容。在這個教程當中,我們將學習Java的注解,如何定制注解,注解的使用以及如何通過反射解析注解。

Java1.5引入了注解,當前許多java框架中大量使用注解,如Hibernate、Jersey、Spring。注解作為程序的元數據嵌入到程序當中。注解可以被一些解析工具或者是編譯工具進行解析。我們也可以聲明注解在編譯過程或執行時產生作用。

在使用注解之前,程序源數據只是通過java注釋和javadoc,但是注解提供的功能要遠遠超過這些。注解不僅包含了元數據,它還可以作用于程序運行過程中、注解解釋器可以通過注解決定程序的執行順序。例如,在Jersey webservice 我們為方法添加URI字符串的形式的**PATH**注解,那么在程序運行過程中jerser解釋程序將決定該方法去調用所給的URI。

創建Java自定義注解

創建自定義注解和創建一個接口相似,但是注解的interface關鍵字需要以@符號開頭。我們可以為注解聲明方法。我們先來看看注解的例子,然后我們將討論他的一些特性。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.journaldev.annotations;
 
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;
 
@Documented
@Target(ElementType.METHOD)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
  public @interface MethodInfo{
  String author() default 'Pankaj';
  String date();
  int revision() default 1;
  String comments();
}

注解方法不能帶有參數;
注解方法返回值類型限定為:基本類型、String、Enums、Annotation或者是這些類型的數組;
 注解方法可以有默認值;
 注解本身能夠包含元注解,元注解被用來注解其它注解。
這里有四種類型的元注解

1. @Documented —— 指明擁有這個注解的元素可以被javadoc此類的工具文檔化。這種類型應該用于注解那些影響客戶使用帶注釋的元素聲明的類型。如果一種聲明使用Documented進行注解,這種類型的注解被作為被標注的程序成員的公共API。

2. @Target——指明該類型的注解可以注解的程序元素的范圍。該元注解的取值可以為TYPE,METHOD,CONSTRUCTOR,FIELD等。如果Target元注解沒有出現,那么定義的注解可以應用于程序的任何元素。

3. @Inherited——指明該注解類型被自動繼承。如果用戶在當前類中查詢這個元注解類型并且當前類的聲明中不包含這個元注解類型,那么也將自動查詢當前類的父類是否存在Inherited元注解,這個動作將被重復執行知道這個標注類型被找到,或者是查詢到頂層的父類。

4.@Retention——指明了該Annotation被保留的時間長短。RetentionPolicy取值為SOURCE,CLASS,RUNTIME。

Java內建注解

Java提供了三種內建注解。

1. @Override——當我們想要復寫父類中的方法時,我們需要使用該注解去告知編譯器我們想要復寫這個方法。這樣一來當父類中的方法移除或者發生更改時編譯器將提示錯誤信息。

2. @Deprecated——當我們希望編譯器知道某一方法不建議使用時,我們應該使用這個注解。Java在javadoc 中推薦使用該注解,我們應該提供為什么該方法不推薦使用以及替代的方法。

3. @SuppressWarnings——這個僅僅是告訴編譯器忽略特定的警告信息,例如在泛型中使用原生數據類型。它的保留策略是SOURCE(譯者注:在源文件中有效)并且被編譯器丟棄。

我們來看一個java內建注解的例子參照上邊提到的自定義注解。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package com.journaldev.annotations;
 
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
 
public class AnnotationExample {
 
public static void main(String[] args) {
}
 
@Override
@MethodInfo(author = 'Pankaj', comments = 'Main method', date = 'Nov 17 2012', revision = 1)
public String toString() {
  return 'Overriden toString method';
}
 
@Deprecated
@MethodInfo(comments = 'deprecated method', date = 'Nov 17 2012')
public static void oldMethod() {
  System.out.println('old method, don't use it.');
}
 
@SuppressWarnings({ 'unchecked', 'deprecation' })
@MethodInfo(author = 'Pankaj', comments = 'Main method', date = 'Nov 17 2012', revision = 10)
public static void genericsTest() throws FileNotFoundException {
  List l = new ArrayList();
  l.add('abc');
  oldMethod();
}
 
}

相信這個例子可以不言自明并能展示在不同場景下的應用。

Java注解解析
我們將使用反射技術來解析java類的注解。那么注解的RetentionPolicy應該設置為RUNTIME否則java類的注解信息在執行過程中將不可用那么我們也不能從中得到任何和注解有關的數據。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.journaldev.annotations;
 
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
 
public class AnnotationParsing {
 
public static void main(String[] args) {
  try {
  for (Method method : AnnotationParsing.class
    .getClassLoader()
    .loadClass(('com.journaldev.annotations.AnnotationExample'))
    .getMethods()) {
    // checks if MethodInfo annotation is present for the method
    if (method.isAnnotationPresent(com.journaldev.annotations.MethodInfo.class)) {
      try {
    // iterates all the annotations available in the method
        for (Annotation anno : method.getDeclaredAnnotations()) {
          System.out.println('Annotation in Method ''+ method + '' : ' + anno);
          }
        MethodInfo methodAnno = method.getAnnotation(MethodInfo.class);
        if (methodAnno.revision() == 1) {
          System.out.println('Method with revision no 1 = '+ method);
          }
 
      } catch (Throwable ex) {
          ex.printStackTrace();
          }
    }
  }
  } catch (SecurityException | ClassNotFoundException e) {
      e.printStackTrace();
     }
  }
 
}

運行上面程序將輸出:

?
1
2
3
4
5
6
Annotation in Method 'public java.lang.String com.journaldev.annotations.AnnotationExample.toString()' : @com.journaldev.annotations.MethodInfo(author=Pankaj, revision=1, comments=Main method, date=Nov 17 2012)
Method with revision no 1 = public java.lang.String com.journaldev.annotations.AnnotationExample.toString()
Annotation in Method 'public static void com.journaldev.annotations.AnnotationExample.oldMethod()' : @java.lang.Deprecated()
Annotation in Method 'public static void com.journaldev.annotations.AnnotationExample.oldMethod()' : @com.journaldev.annotations.MethodInfo(author=Pankaj, revision=1, comments=deprecated method, date=Nov 17 2012)
Method with revision no 1 = public static void com.journaldev.annotations.AnnotationExample.oldMethod()
Annotation in Method 'public static void com.journaldev.annotations.AnnotationExample.genericsTest() throws java.io.FileNotFoundException' : @com.journaldev.annotations.MethodInfo(author=Pankaj, revision=10, comments=Main method, date=Nov 17 2012)

這就是該教程的全部內容,希望你可以從中學到些東西。

延伸 · 閱讀

精彩推薦
  • JAVA教程實例詳解Java中如何對方法進行調用

    實例詳解Java中如何對方法進行調用

    這篇文章主要介紹了實例詳解Java中如何對方法進行調用,是Java入門學習中的基礎知識,需要的朋友可以參考下 ...

    生活的沉淀3992020-01-12
  • JAVA教程Java使用jxl包寫Excel文件適合列寬實現

    Java使用jxl包寫Excel文件適合列寬實現

    用jxl.jar包,讀寫過Excel文件。也沒有注意最適合列寬的問題,但是jxl.jar沒有提供最適合列寬的功能,上次用到寫了一下,可以基本實現最適合列寬。 ...

    java教程網4922019-10-21
  • JAVA教程java實現高效的枚舉元素集合示例

    java實現高效的枚舉元素集合示例

    Set是Java集合類的重要組成部分,它用來存儲不能重復的對象。枚舉類型也要求其枚舉元素各不相同。看起來枚舉類型和集合是很相似的。然而枚舉類型中的...

    java教程網3222019-11-12
  • JAVA教程java實現簡單音樂播放器

    java實現簡單音樂播放器

    這篇文章主要為大家詳細介紹了java實現簡單音樂播放器,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    StrictModel4702019-06-28
  • JAVA教程java中final修飾符實例分析

    java中final修飾符實例分析

    本文通過實例向我們展示了java中final修飾符的概念,final修飾的基本變量和引用類型變量的區別。有需要的小伙伴可以參考下 ...

    hebedich4882019-12-06
  • JAVA教程Java虛擬機JVM性能優化(三):垃圾收集詳解

    Java虛擬機JVM性能優化(三):垃圾收集詳解

    這篇文章主要介紹了Java虛擬機JVM性能優化(三):垃圾收集詳解,本文講解了眾多的JVM垃圾收集器知識點,需要的朋友可以參考下 ...

    junjie1922019-11-28
  • JAVA教程Java實現圖片對比功能

    Java實現圖片對比功能

    個人從來沒有研究過圖像學,也沒看過什么論文或者相關文檔,寫這個完全是靠google和百度,自己寫了個實驗了下,測試用例也少,估計有大BUG的存在,所...

    hebedich2162019-11-28
  • JAVA教程Java基于Socket的文件傳輸實現方法

    Java基于Socket的文件傳輸實現方法

    這篇文章主要介紹了Java基于Socket的文件傳輸實現方法,結合實例分析了Java使用Socket實現文件傳輸的建立連接、發送與接收消息、文件傳輸等相關技巧,需要的...

    wiseideal2442020-03-07
367
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 一级免费a | 91美女视频在线观看 | 欧美亚成人 | 青青草华人在线 | 在线a视频 | 午夜视频中文字幕 | 精品国产一区二区三区在线 | 久久视频精品 | 九九热在线精品视频 | 免费一级毛片在线播放视频老 | 国产三级精品最新在线 | 欧美日韩网站在线观看 | 久久成人综合网 | 欧美一级爱操视频 | 99亚洲伊人久久精品影院红桃 | 一本精品999爽爽久久久 | 蜜桃传媒视频麻豆第一区免费观看 | 一级黄色毛片a | 91久久国产露脸精品国产 | 一级一级一级一级毛片 | 国产女王女m视频vk 中文日韩 | 国产超碰人人爽人人做人人爱 | av电影在线网 | 九九热久久免费视频 | xxxx18韩国护士hd老师 | 日韩美香港a一级毛片免费 日韩激情 | 高清国产午夜精品久久久久久 | 久草在线免费资源站 | av在线成人| 成年免费网站 | 欧美成人免费香蕉 | 亚洲国产成人久久成人52 | 免费在线观看中文字幕 | av中文字幕免费在线观看 | 国产精品成aⅴ人片在线观看 | 91福利在线观看 | 9191色| 蜜桃视频在线观看免费 | 日日噜噜夜夜爽 | 一级做a爱片久久毛片a高清 | 成人性生活视频在线播放 |