乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      測試,反射,注解

       印度阿三17 2020-03-15

      測試,反射,注解

      1.junit測試

      1.1流程

      1. 創(chuàng)建測試包 xxx.xxx.xx.test
      2. 創(chuàng)建測試類 xxxTest
      3. 創(chuàng)建測試方法 testxxxx(),返回值void,參數(shù)無,為保證測試方法可以獨立運行,必須使用@Test進行注解,同時添加@Test的依賴
      4. 編寫測試代碼
      5. 使用Assert進行斷言
      6. 查看測試結果:紅色,失??;綠色,成功

      1.2擴展的注解

      • @Before:如初始化init,在所有測試用例之前執(zhí)行
      • @After:如關閉資源close,在所有測試用例之后執(zhí)行

      2.反射

      2.1獲取字節(jié)碼文件的三種方式

      1. Class.forName(“全類名”):將字節(jié)碼文件加載進內存,返回Class對象
        * 多用于配置文件,將類名定義在配置文件中。讀取文件,加載類

      2. 類名.class:通過類名的屬性class獲取
        * 多用于參數(shù)的傳遞

      3. 對象.getClass():getClass()方法在Object類中定義著。
        * 多用于對象的獲取字節(jié)碼的方式

        結論:
        同一個字節(jié)碼文件(*.class)在一次程序運行過程中,只會被加載一次,不論通過哪一種方式獲取的Class對象都是同一個。

      2.2class功能

      1. 獲取成員變量們

      ? * Field[] getFields() :獲取所有public修飾的成員變量

      ? * Field getField(String name) 獲取指定名稱的 public修飾的成員變量

      ? * Field[] getDeclaredFields() 獲取所有的成員變量,不考慮修飾符

      ? * Field getDeclaredField(String name)

      1. 獲取構造方法們

      ? * Constructor<?>[] getConstructors()

      ? * Constructor getConstructor(類<?>… parameterTypes)

      ? * Constructor getDeclaredConstructor(類<?>… parameterTypes)

      ? * Constructor<?>[] getDeclaredConstructors()

      1. 獲取成員方法們:

      ? * Method[] getMethods()

      ? * Method getMethod(String name, 類<?>… parameterTypes)

      ? * Method[] getDeclaredMethods()

      ? * Method getDeclaredMethod(String name, 類<?>… parameterTypes)

      1. 獲取全類名

      ? * String getName()

      2.3獲取file方法

      獲取該類的成員變量方法

      1. 批量的
      • Field[] getFields():獲取所有的"公有字段"
      • Field[] getDeclaredFields():獲取所有字段,包括:私有、受保護、默認、公有;
      1. 獲取單個的:
      • public Field getField(String fieldName):獲取某個"公有的"字段;

      • public Field getDeclaredField(String fieldName):獲取某個字段(可以是私有的)

      1. 設置值
        * void set(Object obj, Object value) 執(zhí)行前先創(chuàng)建對象,傳入對象
      2. 獲取值
        * get(Object obj)
      3. 忽略訪問權限修飾符的安全檢查,可以訪問私有等的代碼
        * setAccessible(true):暴力反射

      2.4獲取Constructor

      Constructor:構造方法

      獲取構造方法們
      * Constructor<?>[] getConstructors()
      * Constructor getConstructor(類<?>… parameterTypes)

      • Constructor getDeclaredConstructor(類<?>… parameterTypes)
        * Constructor<?>[] getDeclaredConstructors()

      • 創(chuàng)建對象:
        * T newInstance(Object… initargs)

      ? * 如果使用空參數(shù)構造方法創(chuàng)建對象,操作可以簡化:Class對象的newInstance方法

      2.5獲取Method

      1. 獲取方法名稱:
        * String getName:獲取方法名

      ? * Method[] getMethods()
      ? * Method getMethod(String name, 類<?>… parameterTypes)

      ? * Method[] getDeclaredMethods()
      ? * Method getDeclaredMethod(String name, 類<?>… parameterTypes)

      1. Method:方法對象
        * 執(zhí)行方法:
        * Object invoke(Object obj, Object… args) 執(zhí)行前先創(chuàng)建對象,傳入對象

      ?

      3.注解

      jdk1.5之后新特性,說明程序的

      作用分類:
      ①編寫文檔:通過代碼里標識的注解生成文檔【生成文檔doc文檔】
      ②代碼分析:通過代碼里標識的注解對代碼進行分析【使用反射】
      ③編譯檢查:通過代碼里標識的注解讓編譯器能夠實現(xiàn)基本的編譯檢查【Override】

      • jdk中預定義的注解

        ? * @Override :檢測被該注解標注的方法是否是繼承自父類(接口)的
        ? * @Deprecated:該注解標注的內容,表示已過時
        ? * @SuppressWarnings:壓制警告
        ? * 一般傳遞參數(shù)all @SuppressWarnings(“all”)

          		1.deprecation:使用了不贊成使用的類或方法時的警告(使用@Deprecated使得編譯器產(chǎn)生的警告);
        

        2.unchecked:執(zhí)行了未檢查的轉換時的警告,例如當使用集合時沒有用泛型 (Generics) 來指定集合保存的類型; 關閉編譯器警告

        3.fallthrough:當 Switch 程序塊直接通往下一種情況而沒有 Break 時的警告;

        4.path:在類路徑、源文件路徑等中有不存在的路徑時的警告;

        5.serial:當在可序列化的類上缺少 serialVersionUID 定義時的警告;

        6.finally:任何 finally 子句不能正常完成時的警告;

        7.all:關于以上所有情況的警告。

      3.1自定義注解

      屬性:接口中的抽象方法
      * 要求:

      1. 屬性的返回值類型有下列取值
        * 基本數(shù)據(jù)類型
        * String
        * 枚舉
        * 注解
        * 以上類型的數(shù)組

      2. 定義了屬性,在使用時需要給屬性賦值

                  1. 如果定義屬性時,使用default關鍵字給屬性默認初始化值,則使用注解時,可以不進行屬性的賦值。
                  1. 如果只有一個屬性需要賦值,并且屬性的名稱是value,則value可以省略,直接定義值即可。
                  1. 數(shù)組賦值時,值使用{}包裹。如果數(shù)組中只有一個值,則{}可以省略
        

        元注解:用于描述注解的注解
        * @Target:描述注解能夠作用的位置
        * ElementType取值:
        * TYPE:可以作用于類上
        * METHOD:可以作用于方法上
        * FIELD:可以作用于成員變量上
        * @Retention:描述注解被保留的階段
        * @Retention(RetentionPolicy.RUNTIME):當前被描述的注解,會保留到class字節(jié)碼文件中,并被JVM讀取到
        * @Documented:描述注解是否被抽取到api文檔中
        * @Inherited:描述注解是否被子類繼承

      • 格式:

      ? 元注解

      ? public @interface 注解名稱{

      ? 屬性列表;

      ? }

      ? * 本質:注解本質上就是一個接口,該接口默認繼承Annotation接口

      ? * public interface MyAnno extends java.lang.annotation.Annotation {}

      補充

      1.@Retention: 定義注解的保留策略

      @Retention(RetentionPolicy.SOURCE) //注解僅存在于源碼中,在class字節(jié)碼文件中不包含

      @Retention(RetentionPolicy.CLASS) // 默認的保留策略,注解會在class字節(jié)碼文件中存在,但運行時無法獲得,

      @Retention(RetentionPolicy.RUNTIME) // 注解會在class字節(jié)碼文件中存在,在運行時可以通過反射獲取到

      首 先要明確生命周期長度 SOURCE < CLASS < RUNTIME ,所以前者能作用的地方后者一定也能作用。一般如果需要在運行時去動態(tài)獲取注解信息,那只能用 RUNTIME 注解;如果要在編譯時進行一些預處理操作,比如生成一些輔助代碼(如 ButterKnife),就用 CLASS注解;如果只是做一些檢查性的操作,比如 @Override 和 @SuppressWarnings,則可選用 SOURCE 注解。

      2.@Target:定義注解的作用目標

      源碼為:

      @Documented

      @Retention(RetentionPolicy.RUNTIME)

      @Target(ElementType.ANNOTATION_TYPE)

      public @interface Target {

      ElementType[] value();

      }

      @Target(ElementType.TYPE) //接口、類、枚舉、注解

      @Target(ElementType.FIELD) //字段、枚舉的常量

      @Target(ElementType.METHOD) //方法

      @Target(ElementType.PARAMETER) //方法參數(shù)

      @Target(ElementType.CONSTRUCTOR) //構造函數(shù)

      @Target(ElementType.LOCAL_VARIABLE)//局部變量

      @Target(ElementType.ANNOTATION_TYPE)//注解

      @Target(ElementType.PACKAGE) ///包

      3.@Document:說明該注解將被包含在javadoc中

      4.@Inherited:說明子類可以繼承父類中的該注解

      3.2注解解析

      在程序使用(解析)注解:獲取注解中定義的屬性值

      ? 1. 獲取注解定義的位置的對象 (Class,Method,Field)

      ? 2. 獲取指定的注解

      ? * getAnnotation(Class)

      ? //其實就是在內存中生成了一個該注解接口的子類實現(xiàn)對象

      ? public class ProImpl implements Pro{

      ? public String className(){

      return “cn.itcast.annotation.Demo1”;

      ? }

      ? public String methodName(){

      ? return “show”;

      ? }

      ? }

      ? 3. 調用注解中的抽象方法獲取配置的屬性值

      來源:https://www./content-4-660301.html

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多