程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java 中的注解詳解及示例代碼

Java 中的注解詳解及示例代碼

編輯:關於JAVA

Java 中的注解詳解及示例代碼。本站提示廣大學習愛好者:(Java 中的注解詳解及示例代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是Java 中的注解詳解及示例代碼正文


在Java中,注解(Annotation)引入始於Java5,用來描寫Java代碼的元信息,平日情形下注解不會直接影響代碼的履行,雖然有些注解可以用來做到影響代碼履行。

注解可以做甚麼

Java中的注解平日飾演以下腳色

  1. 編譯器指令
  2. 構建時指令
  3. 運轉時指令
  4. 個中

    1. Java內置了三種編譯器指令,本文前面部門會重點引見
    2. Java注解可以運用在構建時,即當你構建你的項目時。構建進程包含生成源碼,編譯源碼,生成xml文件,打包編譯的源碼和文件到JAR包等。軟件的構建平日應用諸如Apache Ant和Maven這類對象主動完成。這些構建對象會按照特定的注解掃描Java代碼,然後依據這些注解生成源碼或文件。
    3. 平日情形下,注解其實不會湧現在編譯後的代碼中,然則假如想要湧現也是可以的。Java支撐運轉時的注解,應用Java的反射我們可以拜訪到這些注解,運轉時的注解的目標平日是供給給法式和第三方API一些指令。
    4. 注解基本

      一個簡略的Java注解相似與@Entity。個中@的意思是告知編譯器這是一個注解。而Entity則是注解的名字。平日在文件中,寫法以下

      public @interface Entity {
      }

      注解元素

      Java注解可使用元從來停止設置一些值,注解中的元素相似於屬性或許參數。界說包括元素的注解示例代碼

      public @interface Entity {
        String tableName();
      }

      應用包括元素的注解示例代碼

      @Entity(tableName = "vehicles")

      上述注解的元素稱號為tableName,設置的值為vehicles。沒有元素的注解不須要應用括號。

      假如注解包括多個元素,應用辦法以下

      @Entity(tableName = "vehicles", primaryKey = "id")

      假如注解只要一個元素,平日我們的寫法是如許的

      @InsertNew(value = "yes")

      然則這類情形下,當且僅當元素名為value,我們也能夠簡寫,即不須要填寫元素名value,後果以下

      @InsertNew("yes")

      注解應用

      注解可以用來潤飾代碼中的這些元素

      1. 接口
      2. 辦法
      3. 辦法參數
      4. 屬性
      5. 部分變量
      6. 一個完全的應用示例以下

        @Entity
        public class Vehicle {
        
          @Persistent
          protected String vehicleName = null;
        
        
          @Getter
          public String getVehicleName() {
            return this.vehicleName;
          }
        
          public void setVehicleName(@Optional vehicleName) {
            this.vehicleName = vehicleName;
          }
        
          public List addVehicleNameToList(List names) {
        
            @Optional
            List localNames = names;
        
            if(localNames == null) {
              localNames = new ArrayList();
            }
            localNames.add(getVehicleName());
        
            return localNames;
          }
        
        }
        
        

        內置的Java注解

        Java中有三種內置注解,這些注解用來為編譯器供給指令。它們是

        1. @Deprecated
        2. @Override
        3. @SuppressWarnings
        4. @Deprecated

          可以用來標志類,辦法,屬性。
          假如上述三種元素不再應用,應用@Deprecated注解
          假如代碼應用了@Deprecated注解的類,辦法或屬性,編譯器會停止正告。

          @Deprecated應用很簡略,以下為注解一個棄用的類。

          @Deprecated
          public class MyComponent {
          
          }
          
          
          

          當我們應用@Deprecated注解後,建議合營應用對應的@deprecated JavaDoc符號,並說明解釋為何這個類,辦法或屬性被棄用,曾經替換計劃是甚麼。

          @Deprecated
          /**
           @deprecated This class is full of bugs. Use MyNewComponent instead.
          */
          public class MyComponent {
          
          }
          
          

          @Override

          @Override注解用來潤飾對父類停止重寫的辦法。假如一個並不是重寫父類的辦法應用這個注解,編譯器將提醒毛病。

          現實上在子類中重寫父類或接口的辦法,@Overide其實不是必需的。然則照樣建議應用這個注解,在某些情形下,假定你修正了父類的辦法的名字,那末之前重寫的子類辦法將不再屬於重寫,假如沒有@Overide,你將不會發覺到這個子類的辦法。有了這個注解潤飾,編譯器則會提醒你這些信息。

          應用Override注解的例子

          public class MySuperClass {
          
            public void doTheThing() {
              System.out.println("Do the thing");
            }
          }
          
          
          public class MySubClass extends MySuperClass{
          
            @Override
            public void doTheThing() {
              System.out.println("Do it differently");
            }
          }
          
          

          @SuppressWarnings

          @SuppressWarnings用來克制編譯器生成正告信息。

          可以潤飾的元素為類,辦法,辦法參數,屬性,部分變量

          應用場景:當我們一個辦法挪用了棄用的辦法或許停止不平安的類型轉換,編譯器會生成正告。我們可認為這個辦法增長

          @SuppressWarnings注解,來克制編譯器生成正告。

          留意:應用@SuppressWarnings注解,采取就近准繩,好比一個辦法湧現正告,我們盡可能應用@SuppressWarnings注解這個辦法,而不是注解辦法地點的類。固然兩個都能克制編譯器生成正告,然則規模越小越好,由於規模年夜了,晦氣於我們發明該類下其他辦法的正告信息。

          應用示例

          @SuppressWarnings
          public void methodWithWarning() {
          
          }
          
          

          創立本身的注解

          在Java中,我們可以創立本身的注解,注解和類,接口文件一樣界說在本身的文件外面。以下

          @interface MyAnnotation {
            String  value();
            String  name();
            int   age();
            String[] newNames();
          }
          

          上述代碼界說了一個叫做MyAnnotation的注解,它有4個元素。再次強調一下,@interface這個症結字用來告知java編譯器這是一個注解。

          細心一看,你會發明,注解元素的界說很相似於接口的辦法。這些元素有類型和稱號。這些類型可所以

          1. 原始數據類型
          2. String
          3. Class
          4. annotation
          5. 列舉
          6. 一維數組
          7. 以下為運用自界說的注解

            @MyAnnotation(
              value="123",
              name="Jakob",
              age=37,
              newNames={"Jenkov", "Peterson"}
            )
            public class MyClass {
            
            
            }
            
            

            留意,我們須要為一切的注解元素設置值,一個都不克不及少。

            注解元素默許值

            關於注解中的元素,我們可認為其設置默許值,應用辦法為

            @interface MyAnnotation {
              String  value() default "";
              String  name();
              int   age();
              String[] newNames();
            }
            

            上述代碼,我們設置了value元素的默許值為空字符串。當我們在應用時,可以不設置value的值,即讓value應用空字符串默許值。 應用示例代碼

            @MyAnnotation(
              name="Jakob",
              age=37,
              newNames={"Jenkov", "Peterson"}
            )
            public class MyClass {
            
            }
            
            

            @Retention

            @Retention是用來潤飾注解的注解,應用這個注解,我們可以做到

            掌握注解能否寫入class文件
            掌握class文件中的注解能否在運轉時可見

            掌握很簡略,應用應用以下三種戰略之一便可。

            RetentionPolicy.SOURCE 注解注解僅存在源碼當中,不存在.class文件,更不克不及運轉時可見。罕見的注解為@Override, @SuppressWarnings。
            RetentionPolicy.CLASS 這是默許的注解保存戰略。這類戰略下,注解將存在與.class文件,然則不克不及被運轉時拜訪。平日這類注解戰略用來處於一些字節碼級其余操作。
            RetentionPolicy.RUNTIME 這類戰略下可以被運轉時拜訪到。平日情形下,我們都邑聯合反射來做一些工作。

            @Retention的應用示例

            import java.lang.annotation.Retention;
            import java.lang.annotation.RetentionPolicy;
            
            @Retention(RetentionPolicy.RUNTIME)
            @interface MyAnnotation {
              String  value() default "";
            }
            
            

            @Target

            應用@Target注解,我們可以設定自界說注解可以潤飾哪些java元素。簡略示例

            import java.lang.annotation.ElementType;
            import java.lang.annotation.Target;
            
            @Target({ElementType.METHOD})
            public @interface MyAnnotation {
              String  value();
            }
            
            

            上述的代碼解釋MyAnnotation注解只能潤飾辦法。

            @Target可以選擇的參數值有以下這些

            1. ElementType.ANNOTATION_TYPE(注:潤飾注解)
            2. ElementType.CONSTRUCTOR
            3. ElementType.FIELD
            4. ElementType.LOCAL_VARIABLE
            5. ElementType.METHOD
            6. ElementType.PACKAGE
            7. ElementType.PARAMETER
            8. ElementType.TYPE(注:任何類型,即下面的的類型都可以潤飾)
            9. @Inherited

              假如你想讓一個類和它的子類都包括某個注解,便可以應用@Inherited來潤飾這個注解。

              java.lang.annotation.Inherited
              
              @Inherited
              public @interface MyAnnotation {
              
              }
              1
              2
              @MyAnnotation
              public class MySuperClass { ... }
              1
              public class MySubClass extends MySuperClass { ... }
              
              

              上述代碼的年夜請安思是

              1.應用@Inherited潤飾注解MyAnnotation
              2.應用MyAnnotation注解MySuperClass
              3.完成一個類MySubclass繼續自MySuperClass

              經由過程以上幾步,MySubClass也具有了MyAnnotation注解。

              關於Java中的注解,一些根本的概念就是這些。

              以上 就是關於Java 中的注解材料整頓,後續持續彌補相干材料,感謝年夜家對本站的支撐!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved