一.反射的好處:
- 1. 可以在程序運行過程中,操作這些對象。
- 2. 可以解耦,提高程序的可擴展性。
二.反射獲取Class對象的三種方式
- 1.Class.forName("全類名")
- 2.類名.class
- 3.對象.getClass()
三. 反射的方法創建對象和獲取與執行方法
1.無參構造
Class class=Class.forName("全類名");
Object object=class.newInstance();
2.有參構造
Class class=Class.forName("全類名");
Constructor constructor= class.getConstructor(Class...構造方法的參數類型);
Object object = constructor.newInstance();
3.獲取方法
Method method=class.getMethod(String "方法名",Class...方法的參數類型);
4.執行方法
method.invoke(類對象,...方法的實際參數); //返回的參數類型與方法一致
1.定義註解格式
public @interface 註解名稱{
屬性列表;
}
2.屬性列表格式
- 格式1:數據類型 屬性名();
- 格式2:數據類型 屬性名() default 默認值;
3.元註解(限制註解的使用位置)
@Target
作用:指明此註解用在哪個位置,如果不寫默認是任何地方都可以使用
可選的參數值在枚舉類 ElemenetType**中包括:
TYPE: 用在類,接口上
FIELD:用在成員變量上
METHOD: 用在方法上
PARAMETER:用在參數上
CONSTRUCTOR:用在構造方法上
LOCAL_VARIABLE:用在局部變量上
@Retention
作用:定義該註解的生命週期(有效範圍)
可選的參數值在枚舉類型RetentionPolicy中包括
SOURCE:註解只存在於Java源代碼中;
CLASS:註解存在於Java源代碼、編譯以後的字節碼文件中;
RUNTIME:註解存在於Java源代碼中、編譯以後的字節碼文件中、運行時內存中;
4.註解中常用的方法
boolean isAnnotationPresent(註解的類名.class) 判斷是否有註解
getAnnotation(註解.class) 獲取註解對象