<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之旅 廣告
                [TOC] ## 元注解 元注解是可以注解到注解上的注解,或者說元注解是一種基本注解。 ### @Retention Retention 的英文意為保留期的意思。當 @Retention 應用到一個注解上的時候,它解釋說明了這個注解的的存活時間。 它的取值如下:? * RetentionPolicy.SOURCE 注解只在源碼階段保留,在編譯器進行編譯時它將被丟棄忽視。? * RetentionPolicy.CLASS 注解只被保留到編譯進行的時候,它并不會被加載到 JVM 中。? * RetentionPolicy.RUNTIME 注解可以保留到程序運行的時候,它會被加載進入到 JVM 中,所以在程序運行時可以獲取到它 ### @Target Target 是目標的意思,@Target 指定了注解運用的地方。 @Target 有下面的取值 * ElementType.ANNOTATION\_TYPE 可以給一個注解進行注解 * ElementType.CONSTRUCTOR 可以給構造方法進行注解 * ElementType.FIELD 可以給屬性進行注解 * ElementType.LOCAL\_VARIABLE 可以給局部變量進行注解 * ElementType.METHOD 可以給方法進行注解 * ElementType.PACKAGE 可以給一個包進行注解 * ElementType.PARAMETER 可以給一個方法內的參數進行注解 * ElementType.TYPE 可以給一個類型進行注解,比如類、接口、枚舉 ### @Inherited Inherited 是繼承的意思,但是它并不是說注解本身可以繼承,而是說如果一個超類被 @Inherited注解過的注解進行注解的話,那么如果它的子類沒有被任何注解應用的話,那么這個子類就繼承了超類的注解。 ### @Documented 顧名思義,這個元注解肯定是和文檔有關。它的作用是能夠將注解中的元素包含到 Javadoc 中去。 ### @Repeatable Repeatable 自然是可重復的意思。@Repeatable 是 Java 1.8 才加進來的,所以算是一個新的特性。 什么樣的注解會多次應用呢?通常是注解的值可以同時取多個。 ~~~ @Person(role="artist") @Person(role="coder") @Person(role="PM") public class SuperMan{ } ~~~ ## Java 預置的注解 ### @Deprecated 這個元素是用來標記過時的元素 ### @Override 這個大家應該很熟悉了,提示子類要復寫父類中被 @Override 修飾的方法 ## 運行期提取注解 java.lang.reflect 包下主要包含一些實現反射功能的工具類,實際上,java.lang.reflect 包所有提供的反射API擴充了讀取運行時Annotation信息的能力。當一個Annotation類型被定義為運行時的Annotation后,該注解才能是運行時可見,當class文件被裝載時被保存在class文件中的Annotation才會被虛擬機讀取。 AnnotatedElement 接口是所有程序元素(Class、Method和Constructor)的父接口,所以程序通過反射獲取了某個類的AnnotatedElement對象之后,程序就可以調用該對象的如下四個個方法來訪問Annotation信息: ### getAnnotation T getAnnotation(Class annotationClass) 返回改程序元素上存在的、指定類型的注解,如果該類型注解不存在,則返回null。 ### isAnnotationPresent boolean isAnnotationPresent(Class annotationClass) 判斷該程序元素上是否包含指定類型的注解,存在則返回true,否則返回false. ### getAnnotations Annotation\[\] getAnnotations() 返回該程序元素上存在的所有注解。 ### getDeclaredAnnotations Annotation\[\] getDeclaredAnnotations() 返回直接存在于此元素上的所有注釋。與此接口中的其他方法不同,該方法將忽略繼承的注釋。(如果沒有注釋直接存在于此元素上,則返回長度為零的一個數組。)該方法的調用者可以隨意修改返回的數組;這不會對其他調用者返回的數組產生任何影響。 ## 編譯期提取注解 在其他文章再細說 ## 推薦閱讀 [深入理解Java:注解(Annotation)--RUNTIME運行時注解的處理](https://blog.csdn.net/fei20121106/article/details/51353725) [Java注解深入淺出](https://blog.csdn.net/shengzhu1/article/details/81271409)
                  <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>

                              哎呀哎呀视频在线观看