<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 注解 ### 什么是注解   Annontation 是 Java5 開始引入的新特征,中文名稱叫注解。它提供了一種安全的類似注釋的機制,用來**將任何的信息或元數據(metadata)與程序元素(類、方法、成員變量等)進行關聯**。為程序的元素(類、方法、成員變量)加上更直觀更明了的說明,這些說明信息是與程序的業務邏輯無關,并且供指定的工具或框架使用。Annontation 像一種修飾符一樣,應用于包、類型、構造方法、方法、成員變量、參數及本地變量的聲明語句中。   Java 注解是附加在代碼中的一些元信息,用于一些工具在編譯、運行時進行解析和使用,起到說明、配置的功能。注解不會也不能影響代碼的實際邏輯,僅僅起到輔助性的作用。包含在`java.lang.annotation`包中。   簡單來說:注解其實就是**代碼中的特殊標記**,這些標記可以**在編譯、類加載、運行時被讀取,并執行相對應的處理**。 ### [](https://github.com/frank-lam/fullstack-tutorial/blob/master/notes/JavaArchitecture/01-Java%E5%9F%BA%E7%A1%80.md#為什么要用注解)為什么要用注解 傳統的方式,我們是通過配置文件`.xml`來告訴類是如何運行的。 有了注解技術以后,我們就可以通過注解告訴類如何運行 例如:我們以前編寫 Servlet 的時候,需要在 web.xml 文件配置具體的信息。我們使用了注解以后,可以直接在 Servlet 源代碼上,增加注解...Servlet 就被配置到 Tomcat 上了。也就是說,注解可以給類、方法上注入信息。 明顯地可以看出,這樣是非常直觀的,并且 Servlet 規范是推崇這種配置方式的。 ### 元注解: java.lang.annotation 提供了四種元注解,專門注解其他的注解(在自定義注解的時候,需要使用到元注解): ?? @Documented – 注解是否將包含在JavaDoc中 ?? @Retention – 什么時候使用該注解 ?? @Target – 注解用于什么地方 ?? @Inherited – 是否允許子類繼承該注解 ? 1.)@Retention – 定義該注解的生命周期 ? ●?? RetentionPolicy.SOURCE : 在編譯階段丟棄。這些注解在編譯結束之后就不再有任何意義,所以它們不會寫入字節碼。@Override, @SuppressWarnings都屬于這類注解。 ? ●?? RetentionPolicy.CLASS : 在類加載的時候丟棄。在字節碼文件的處理中有用。注解默認使用這種方式 ? ●?? RetentionPolicy.RUNTIME : 始終不會丟棄,運行期也保留該注解,因此可以使用反射機制讀取該注解的信息。我們自定義的注解通常使用這種方式。 ? 2.)Target – 表示該注解用于什么地方。默認值為任何元素,表示該注解用于什么地方。可用的ElementType 參數包括 ? ● ElementType.CONSTRUCTOR: 用于描述構造器 ? ● ElementType.FIELD: 成員變量、對象、屬性(包括enum實例) ? ● ElementType.LOCAL\_VARIABLE: 用于描述局部變量 ? ● ElementType.METHOD: 用于描述方法 ? ● ElementType.PACKAGE: 用于描述包 ? ● ElementType.PARAMETER: 用于描述參數 ? ● ElementType.TYPE: 用于描述類、接口(包括注解類型) 或enum聲明 ?3.)@Documented – 一個簡單的Annotations 標記注解,表示是否將注解信息添加在java 文檔中。 ?4.)@Inherited – 定義該注釋和子類的關系 ???? @Inherited 元注解是一個標記注解,@Inherited 闡述了某個被標注的類型是被繼承的。如果一個使用了@Inherited 修飾的annotation 類型被用于一個class,則這個annotation 將被用于該class 的子類。 ### [](https://github.com/frank-lam/fullstack-tutorial/blob/master/notes/JavaArchitecture/01-Java%E5%9F%BA%E7%A1%80.md#基本annotation)基本Annotation 在 java.lang 包下存在著5個基本的 Annotation,重點掌握前三個。 1. @Override 重寫注解 * 如果我們使用IDE重寫父類的方法,我們就可以看見它了。 * @Override是告訴編譯器要檢查該方法是實現父類的,可以幫我們避免一些低級的錯誤。 * 比如,我們在實現 equals() 方法的時候,把 euqals() 打錯了,那么編譯器就會發現該方法并不是實現父類的,與注解 @Override 沖突,于是就會給予錯誤。 2. @Deprecated 過時注解 * 該注解也非常常見,Java 在設計的時候,可能覺得某些方法設計得不好,為了兼容以前的程序,是不能直接把它拋棄的,于是就設置它為過時。 * Date對象中的 toLocalString() 就被設置成過時了 * 當我們在程序中調用它的時候,在 IDE 上會出現一條橫杠,說明該方法是過時的。 ~~~java @Deprecated public String toLocaleString() { DateFormat formatter = DateFormat.getDateTimeInstance(); return formatter.format(this); } ~~~ 3. @SuppressWarnings 抑制編譯器警告注解 * 該注解在我們寫程序的時候并不是很常見,我們可以用它來讓編譯器不給予我們警告 * 當我們在使用集合的時候,如果沒有指定泛型,那么會提示安全檢查的警告 * 如果我們在類上添加了@SuppressWarnings這個注解,那么編譯器就不會給予我們警告了 4. @SafeVarargs Java 7“堆污染”警告 * 什么是堆污染呢??當把一個不是泛型的集合賦值給一個帶泛型的集合的時候,這種情況就很容易發生堆污染。 * 這個注解也是用來抑制編譯器警告的注解,用的地方并不多。 5. @FunctionalInterface 用來指定該接口是函數式接口 * 用該注解顯示指定該接口是一個函數式接口。 ### [](https://github.com/frank-lam/fullstack-tutorial/blob/master/notes/JavaArchitecture/01-Java%E5%9F%BA%E7%A1%80.md#自定義注解類編寫規則)自定義注解類編寫規則 1. Annotation 型定義為 @interface, 所有的 Annotation 會自動繼承 java.lang.Annotation 這一接口,并且不能再去繼承別的類或是接口. 2. 參數成員只能用 public 或默認(default)這兩個訪問權修飾 3. 參數成員只能用基本類型 byte,short,char,int,long,float,double,boolean 八種基本數據類型和 String、Enum、Class、annotations 等數據類型,以及這一些類型的數組 4. 要獲取類方法和字段的注解信息,必須通過 Java 的反射技術來獲取 Annotation 對象,因為你除此之外沒有別的獲取注解對象的方法 5. 注解也可以沒有定義成員, 不過這樣注解就沒啥用了 PS:自定義注解需要使用到元注解 ### [](https://github.com/frank-lam/fullstack-tutorial/blob/master/notes/JavaArchitecture/01-Java%E5%9F%BA%E7%A1%80.md#自定義注解實例)自定義注解實例 ~~~java import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.RetentionPolicy.RUNTIME; /** * 水果名稱注解 */ @Target(FIELD) @Retention(RUNTIME) @Documented public @interface FruitName { String value() default ""; } ~~~ 參考資料:[注解Annotation實現原理與自定義注解例子](https://www.cnblogs.com/acm-bingzi/p/javaAnnotation.html)
                  <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>

                              哎呀哎呀视频在线观看