<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # Java 注解教程 > 原文: [https://beginnersbook.com/2014/09/java-annotations/](https://beginnersbook.com/2014/09/java-annotations/) [Java 注解](https://docs.oracle.com/javase/tutorial/java/annotations/index.html)允許我們將元數據信息添加到我們的源代碼中,盡管它們不是程序本身的一部分。注解從 JDK 5 添加到 java 中。注解對它們注解的代碼的操作沒有直接影響(即它不影響程序的執行)。 在本教程中,我們將介紹以下主題:注解的使用,如何應用注解,Java 中可用的預定義注解類型以及如何創建自定義注解。 ## 注解有什么用? **1)編譯器指令**:Java 中有三種內置注解(`@Deprecated`,`@Override`和`@SuppressWarnings`),可用于向編譯器提供某些指令。例如,`@override`注解用于指示編譯器注解方法是否覆蓋該方法。有關這些內置注解的更多信息,請參閱本文的下一部分。 **2)編譯時教程**:注解可以為編譯器提供編譯時指令,軟件構建工具可以進一步使用它來生成代碼,XML 文件等。 **3)運行時指令**:我們可以定義在運行時可用的注解,我們可以使用 [java 反射](https://docs.oracle.com/javase/tutorial/reflect/)訪問它們,并可用于在運行時向程序發出指令。我們將在稍后的同一篇文章的幫助下討論這個問題。 ## 注解基礎知識 注解始終以符號`@`開頭,后跟注解名稱。符號`@`向編譯器指示這是一個注解。 對于例如`@Override` 這里@符號表示這是一個注解,而`Override`是這個注解的名稱。 **我們可以在哪里使用注解?** 注解可以應用于類,接口,方法和字段。例如,以下注解正在應用于該方法。 ```java @Override void myMethod() { //Do something } ``` 這個注解在這里做的正是在下一節中解釋的,但簡單來說它指示編譯器`myMethod()`是一個覆蓋超類方法(`myMethod()`)的重寫方法。 ## Java 中的內置注解 Java 有三個內置注解: * `@Override` * `@Deprecated` * `@SuppressWarnings` #### 1)`@Override`: 在覆蓋子類中的方法時,我們應該使用此批注來標記該方法。這使得代碼可讀并避免維護問題,例如:在更改父類的方法簽名時,必須更改子類中的簽名(使用此批注的位置),否則編譯器將拋出編譯錯誤。如果您沒有使用此注解,則很難跟蹤。 例: ```java public class MyParentClass { public void justaMethod() { System.out.println("Parent class method"); } } public class MyChildClass extends MyParentClass { @Override public void justaMethod() { System.out.println("Child class method"); } } ``` 我相信這個例子是自我解釋的。要閱讀有關此注解的更多信息,請參閱以下文章: [`@Override內置注解](https://beginnersbook.com/2014/07/override-annotation-in-java/)。 #### 2)`@Deprecated` `@Deprecated`注解表示已棄用標記的元素(類,方法或字段),不應再使用。只要程序使用已經使用`@Deprecated`注解標記的方法,類或字段,編譯器就會生成警告。不推薦使用元素時,也應使用 Javadoc `@deprecated`標記對其進行記錄,如以下示例所示。記下`@Deprecated`和`@deprecated`的大小寫差異。`@deprecated`用于文檔目的。 示例: ```java /** * @deprecated * reason for why it was deprecated */ @Deprecated public void anyMethodHere(){ // Do something } ``` 現在,只要任何程序使用此方法,編譯器就會生成警告。要閱讀有關此注解的更多信息,請參閱以下文章: [Java - `@Deprecated`注解](https://beginnersbook.com/2014/07/deprecated-annotation-in-java/) 。 #### 3)`@SuppressWarnings` 此批注指示編譯器忽略特定警告。例如,在下面的代碼中,我調用了一個不推薦使用的方法(假設方法`deprecatedMethod()`標有`@Deprecated`注解),因此編譯器應該生成警告,但是我使用`@SuppressWarnings`注解來抑制棄用警告。 ```java @SuppressWarnings("deprecation") void myMethod() { myObject.deprecatedMethod(); } ``` ## 創建自定義注解 * 注解是使用`@interface`創建的,后跟注解名稱,如下例所示。 * 注解也可以包含元素。他們看起來像方法。例如,在下面的代碼中,我們有四個元素。我們不應該為這些元素提供實現。 * 所有注解都擴展了`java.lang.annotation.Annotation`接口。注解不能包含任何`extends`子句。 ```java 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 MyCustomAnnotation{ int studentAge() default 18; String studentName(); String stuAddress(); String stuStream() default "CSE"; } ``` 注意:使用注解時,可以跳過在創建注解時設置了默認值的所有元素。例如,如果我將上述注解應用于類,那么我會這樣做: ```java @MyCustomAnnotation( studentName="Chaitanya", stuAddress="Agra, India" ) public class MyClass { ... } ``` 如您所見,我們沒有給`studentAge`和`stuStream`元素賦予任何值,因為設置這些元素的值是可選的(默認值已經在注解定義中設置,但是如果您希望可以分配新的使用注解時的值與我們對其他元素的處理方式相同)。但是,我們必須在使用注解時提供其他元素的值(沒有設置默認值的元素)。 **注意**:我們也可以在注解中包含數組元素。這就是我們如何使用它們: 注解定義: ```java @interface MyCustomAnnotation { int count(); String[] books(); } ``` 用法: ```java @MyCustomAnnotation( count=3, books={"C++", "Java"} ) public class MyClass { } ``` 再次回到主題:在自定義注解示例中,我們使用了這四個注解:`@Documented`,`@Target`,`@Inherited`和`@Retention`。讓我們詳細討論它們。 #### `@Documented` `@Documented`注解表明使用此注解的元素應由 JavaDoc 記錄。例如: ```java java.lang.annotation.Documented @Documented public @interface MyCustomAnnotation { //Annotation body } ``` ```java @MyCustomAnnotation public class MyClass { //Class body } ``` 在為類`MyClass`生成 javadoc 時,注解`@MyCustomAnnotation`將包含在其中。 #### `@Target` 它指定了我們可以使用注解的位置。例如:在下面的代碼中,我們將目標類型定義為`METHOD`,這意味著下面的注解只能用于方法。 ```java import java.lang.annotation.ElementType; import java.lang.annotation.Target; @Target({ElementType.METHOD}) public @interface MyCustomAnnotation { } ``` ```java public class MyClass { @MyCustomAnnotation public void myMethod() { //Doing something } } ``` **注意**:1)如果您沒有定義任何目標類型,則意味著可以將注解應用于任何元素。 2)除了`ElementType.METHOD`之外,注解可以具有以下可能的`Target`值。 ```java ElementType.METHOD ElementType.PACKAGE ElementType.PARAMETER ElementType.TYPE ElementType.ANNOTATION_TYPE ElementType.CONSTRUCTOR ElementType.LOCAL_VARIABLE ElementType.FIELD ``` #### `@Inherited` `@Inherited`注解表示類中使用的自定義注解應該由其所有子類繼承。例如: ```java java.lang.annotation.Inherited @Inherited public @interface MyCustomAnnotation { } ``` ```java @MyCustomAnnotation public class MyParentClass { ... } ``` ```java public class MyChildClass extends MyParentClass { ... } ``` 這里的類`MyParentClass`正在使用注解`@MyCustomAnnotation`,該注解用`@inherited`注解標記。這意味著子類`MyChildClass`繼承了`@MyCustomAnnotation`。 #### `@Retention` 它指示要保留帶注解類型的注解的時間長度。 ```java import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) @interface MyCustomAnnotation { } ``` 這里我們使用了`RetentionPolicy.RUNTIME`。還有另外兩種選擇。讓我們看看他們的意思: `RetentionPolicy.RUNTIME`:注解應該在運行時可用,以便通過 java 反射進行檢查。 `RetentionPolicy.CLASS`:注解將在`.class`文件中,但在運行時不可用。 `RetentionPolicy.SOURCE`:注解將在程序的源代碼中提供,它既不在`.class`文件中,也不在運行時可用。 這就是“Java 注解”這個主題的全部內容。如果您有任何疑問,請隨時在下面留言。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看