<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      注解含義

      個人理解就是一種帶信息的標簽, 即元數據,描述數據的數據, 這種數據一般不能獨立運行,需要借助外部的代碼或者工具才能發揮作用。使用關鍵字@interface定義一個注解類,本文主要用作快速熟悉的筆記

      元注解

      用來定義注解的基本注解

      1. @Retention, 指定生命周期,源代碼中,字節碼文件中,程序時JVM中
      • RetentionPolicy.SOURCE 注解只在源碼階段保留,在編譯器進行編譯時它將被丟棄忽視。
      • RetentionPolicy.CLASS 注解只被保留到編譯進行的時候,它并不會被加載到 JVM 中。
      • RetentionPolicy.RUNTIME 注解可以保留到程序運行的時候,它會被加載進入到 JVM 中,所以在程序運行時可以獲取到它們
      1. @Documented, 生成javadoc時,該注解會被包含
      2. @Target, 作用范圍
      • ElementType.ANNOTATION_TYPE 可以給一個注解進行注解
      • ElementType.CONSTRUCTOR 可以給構造方法進行注解
      • ElementType.FIELD 可以給屬性進行注解
      • ElementType.LOCAL_VARIABLE 可以給局部變量進行注解
      • ElementType.METHOD 可以給方法進行注解
      • ElementType.PACKAGE 可以給一個包進行注解
      • ElementType.PARAMETER 可以給一個方法內的參數進行注解
      • ElementType.TYPE 可以給一個類型進行注解,比如類、接口、枚舉
      1. @Inherited, 是否可繼承
        Inherited 是繼承的意思,但是它并不是說注解本身可以繼承,而是說如果一個超類被 @Inherited 注解過的注解進行注解的話,那么如果它的子類沒有被任何注解應用的話,那么這個子類就繼承了超類的注解。
      @Inherited
      @Retention(RetentionPolicy.RUNTIME)
      @interface Test {}
      
      @Test
      public class A {}
      
      public class B extends A {}
      

      注解 Test 被 @Inherited 修飾,之后類 A 被 Test 注解,類 B 繼承 A,類 B 也擁有 Test 這個注解

      1. @Repeatable, 1.8引入, 可重復的意思, 該注解可以重復出現
      # Persons是一個容器注解,容器注解是用來存放其他注解的地方,本身也是一個注解
      public @interface Persons {
          Person[] value();
      }
      
      @Repeatable(Persons.class)
      @interface Person{
          String role() default "";
      }
      
      @Person(role = "coder")
      @Person(role = "PM")
      @Person(role = "artist")
      class SuperMan{
          
      }
      
      

      注解的屬性,即成員變量

      注解只有成員變量,沒有方法,注解的成員變量在注解的定義中以“無形參的方法”形式來聲明,其方法名定義了該成員變量的名字,其返回值定義了該成員變量的類型。

      # 使用default定義默認值
      @Target(ElementType.TYPE)
      @Retention(RetentionPolicy.RUNTIME)
      public @interface TestAnnotation {
      
          int id();
      
          String msg() default "";
      
      }
      

      使用:

      # 如果注解中只有一個成員變量value,則可以省略括號不寫,不設置屬性值
      # 如果注解的屬性設置了默認值,也可以不自定義屬性值
      @DemoAnnotation("demo")
      public class Demo {
      
      }
      

      java預置的注解

      1. @Deprecated, 用于標記過時的注解
      2. @Override,標記該方法要復寫父類中的方法
      3. @SuppressWarnings,組織警告,某些代碼比如調用過時的方法是編譯器會告警,使用該注解忽略編譯器告警
      4. @SafeVarargs,參數安全類型注解。它的目的是提醒開發者不要用參數做一些不安全的操作,它的存在會阻止編譯器產生 unchecked 這樣的警告。1.7新增
      5. @FunctionalInterface, 1.8新增,定義該接口為一個函數式接口

      反射+注解

      1. isAnnotationPresent(),判斷一個Class對象是否應用了某個注解
      public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) {}
      
      1. getAnnotation, 指定注解類型,獲取Class對象上的某個注解對象
      public <A extends Annotation> A getAnnotation(Class<A> annotationClass) {}
      
      1. getAnnotations, 獲取所有的注解對象
      public Annotation[] getAnnotations() {}
      

      以上為作用與類上的注解的操作方法,其他作用域的注解類似

      注解作用

      1. 提供信息給編譯器:編譯器可以利用注解來探測錯誤和告警信息
      2. 編譯階段時的處理:軟件工具可以利用注解信息來生成代碼,HTML文檔或者其他相應的處理
      3. 運行時的處理:某些注解可以在程序運行的時候接受代碼的提取
      posted on 2017-12-07 16:49  行走在云端的愚公  閱讀(332)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 少妇无码av无码一区| av无码久久久久不卡网站蜜桃| 国产一区二区三区不卡观| 免费可以在线看a∨网站| 999国产精品999久久久久久| 国产办公室秘书无码精品99| 真人作爱免费视频| 久热色视频精品在线观看| 国产精品理论片| 青青草国产自产一区二区| 2019国产精品青青草原| 少妇人妻真实偷人精品| 92精品国产自产在线观看481页| 日本欧美大码a在线观看| 欧美色丁香| 免费费很色大片欧一二区| 欧美人人妻人人澡人人尤物| 国内精品免费久久久久电影院97| 国产精一区二区黑人巨大| 日韩丝袜欧美人妻制服| 美女高潮黄又色高清视频免费| 午夜福利国产精品视频| 久久久久久久波多野结衣高潮| 最新国产精品亚洲| 久久久精品2019中文字幕之3| 女人张开腿让男人桶爽| 久久精品亚洲精品国产色婷 | 国产精品国产三级国产专i| 精品人妻日韩中文字幕| 麻豆精品在线| 久久精品国产亚洲αv忘忧草 | 欧美人成精品网站播放| 久国产精品韩国三级视频| 美日韩av一区二区三区| 免费看的一级毛片| 日本一二三区视频在线| 亚洲精品无码av天堂| 巨爆乳中文字幕爆乳区| 18禁男女爽爽爽午夜网站免费| 在线看av一区二区三区| 国产一区二区三区不卡自拍|