免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
測試,反射,注解

測試,反射,注解

1.junit測試

1.1流程

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

1.2擴(kuò)展的注解

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

2.反射

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

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

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

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

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

2.2class功能

  1. 獲取成員變量們

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

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

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

? * Field getDeclaredField(String name)

  1. 獲取構(gòu)造方法們

? * 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():獲取所有字段,包括:私有、受保護(hù)、默認(rèn)、公有;
  1. 獲取單個(gè)的:
  • public Field getField(String fieldName):獲取某個(gè)"公有的"字段;

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

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

2.4獲取Constructor

Constructor:構(gòu)造方法

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

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

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

? * 如果使用空參數(shù)構(gòu)造方法創(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之后新特性,說明程序的

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

  • jdk中預(yù)定義的注解

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

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

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

    3.fallthrough:當(dāng) Switch 程序塊直接通往下一種情況而沒有 Break 時(shí)的警告;

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

    5.serial:當(dāng)在可序列化的類上缺少 serialVersionUID 定義時(shí)的警告;

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

    7.all:關(guān)于以上所有情況的警告。

3.1自定義注解

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

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

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

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

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

  • 格式:

? 元注解

? public @interface 注解名稱{

? 屬性列表;

? }

? * 本質(zhì):注解本質(zhì)上就是一個(gè)接口,該接口默認(rèn)繼承Annotation接口

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

補(bǔ)充

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

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

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

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

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

2.@Target:定義注解的作用目標(biāo)

源碼為:

@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) //構(gòu)造函數(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)

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

? public class ProImpl implements Pro{

? public String className(){

return “cn.itcast.annotation.Demo1”;

? }

? public String methodName(){

? return “show”;

? }

? }

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

來源:https://www.icode9.com/content-4-660301.html
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Java Annotation詳解
Tiger系列四:Annotation第二部分:定制Annotation
JAVA 基礎(chǔ)篇-注解的概念
框架開發(fā)之Java注解的妙用
Java自定義注解
[直呼內(nèi)行] 注解開發(fā)才是簡潔之道,讓同行直呼內(nèi)行的Java注解技術(shù)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服