測(cè)試,反射,注解1.junit測(cè)試1.1流程
1.2擴(kuò)展的注解
2.反射2.1獲取字節(jié)碼文件的三種方式
2.2class功能
? * Field[] getFields() :獲取所有public修飾的成員變量 ? * Field getField(String name) 獲取指定名稱的 public修飾的成員變量 ? * Field[] getDeclaredFields() 獲取所有的成員變量,不考慮修飾符 ? * Field getDeclaredField(String name)
? * Constructor<?>[] getConstructors() ? * Constructor getConstructor(類<?>… parameterTypes) ? * Constructor getDeclaredConstructor(類<?>… parameterTypes) ? * Constructor<?>[] getDeclaredConstructors()
? * Method[] getMethods() ? * Method getMethod(String name, 類<?>… parameterTypes) ? * Method[] getDeclaredMethods() ? * Method getDeclaredMethod(String name, 類<?>… parameterTypes)
? * String getName() 2.3獲取file方法獲取該類的成員變量方法
2.4獲取ConstructorConstructor:構(gòu)造方法 獲取構(gòu)造方法們
? * 如果使用空參數(shù)構(gòu)造方法創(chuàng)建對(duì)象,操作可以簡(jiǎn)化:Class對(duì)象的newInstance方法 2.5獲取Method
? * Method[] getMethods() ? * Method[] getDeclaredMethods()
? 3.注解jdk1.5之后新特性,說明程序的 作用分類:
3.1自定義注解屬性:接口中的抽象方法
? 元注解 ? 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)的保留策略,注解會(huì)在class字節(jié)碼文件中存在,但運(yùn)行時(shí)無法獲得, @Retention(RetentionPolicy.RUNTIME) // 注解會(huì)在class字節(jié)碼文件中存在,在運(yùn)行時(shí)可以通過反射獲取到 首 先要明確生命周期長(zhǎng)度 SOURCE < CLASS < RUNTIME ,所以前者能作用的地方后者一定也能作用。一般如果需要在運(yùn)行時(shí)去動(dòng)態(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. 獲取注解定義的位置的對(duì)象 (Class,Method,Field) ? 2. 獲取指定的注解 ? * getAnnotation(Class) ? //其實(shí)就是在內(nèi)存中生成了一個(gè)該注解接口的子類實(shí)現(xiàn)對(duì)象 ? public class ProImpl implements Pro{ ? public String className(){ return “cn.itcast.annotation.Demo1”; ? } ? public String methodName(){ ? return “show”; ? } ? } ? 3. 調(diào)用注解中的抽象方法獲取配置的屬性值 來源:https://www./content-4-660301.html |
|