1. 程式人生 > 其它 >註解與反射基礎回顧

註解與反射基礎回顧

1、註解

1 . 內建註解

  • @Override,定義在lang.Override中,只用於修飾方法,表明表明一個方法宣告打算重寫超類中另一個宣告。

  • @Depracated,定義在lang.Depracated中,修飾方法,屬性,類,表明不鼓勵使用,很危險或有更好的存在。

  • @Suppress Warnings,定義在lang.Suppress Warnings中,用來抑制編譯時的警告資訊 , 需要引數。

2 . 元註解

負責註解其他註解,java定義了4個標準的meta-annotation型別,用來提供對其他annotation型別作說明。

這些型別和他們支援的類在lang.annotation包中可以找到

  • @Target,用於描述註解的使用範圍,即註解可以用在哪些地方。

  • @Retention,表示需要在什麼級別儲存該註釋資訊,用於描述註解的生命週期(SOURCE<CLASS<RUNTIME(一般情況))

  • @Document,說明該註解將被包含在javadoc中。

  • Inherited,說明子類可以繼承父類中的該註解。

3 . 自定義註解

//自定義一個註解
//註解的作用域Target,TYPE類,Method方法
@Target({ElementType.TYPE,ElementType.METHOD})
//註解的生命週期,預設都用RUNTIME執行時
@Retention(RetentionPolicy.RUNTIME)
//@interface自定義註解後加註解名
@interface Myannotation{
//註解引數表示為 :引數型別 + 引數名();
//使用時為@Myannotation(name = "名字")
String name() default "a";//預設值為a,不必須傳參
int age();//無預設值,使用該註解時必須傳入該引數
int id() default -1;//預設值為-1,代表不存在

//當註解中無上述引數,只有一個時引數名可設定為value,傳參時候不需要引數名
String value();
}

2、反射

Java Reflection(反射)是java被視為動態語言的關鍵,反射機制允許程式在執行期藉助Reflction API去的任何類的內部資訊並能直接操作任何物件的內部屬性以及方法。

Class c = Class.forName("java.lang.String")

  • 優點:動態建立物件和編譯,體現靈活性。

  • 缺點:對效能有影響,反射屬於解釋操作,慢於直接操作。

通過反射獲取類例項方式

    //新建一個類人類,類學生繼承人類
class Person{}
class Student extends Person{}
//建立一個學生物件
Person person = new Student();

//方式1:通過物件獲得學生類
Class c1 = person.getClass();
//方式2:forname獲得學生類
Class c2 = Class.forName("src.biji.Student");
//方式3:通過類名.class獲得學生類
Class c3 = Student.class;
//方式4:通過父類型別,獲取學生的父類人類
Class c4 = c1.getSuperclass();
//方式5:基本內建型別的包裝類有一個Type屬性,獲取int型別
Class c5 = Integer.TYPE;