反射:
基本特徵:
- 允許運行中的Java程序對自身進行檢查,或者說自審,並能直接操作程序的內部屬性
- 可以通過名稱得到對象(類、屬性、方法等)
- 運行時探究和使用編譯時未知的類
- .選方法的時候就是反射
使用步驟:
- 獲取class對象
- 通過class對象探究這個類的信息
- 操作探究出的信息
- 三種方式:
- New
User u = new User();Class uClass = u.getClass();Class strclass = "hello".getClass();int[] intArray = new int[6];Class arraClass = intArray.getClass();Class uClass1 = User.class;
- 根據類型名稱獲取class對象
Class strClass1 =String.class;Class arrayClass = int[].class;//JDK1.5以後纔有Class intClass = int.class;//基本數據類型,也有Class對象Class voidClass = void.class;//雖然不是數據類型,但他是返回類型,也有class對象//JDK1.5之前,想要獲取int.class對象必須要如下操作Class integerClass = Integer.class;Class intClass1 = Integer.TYPE;//以上兩種方法,不管用那種方法,一個類型只有一個class對象
- 根據類型的字符串名稱獲取class對象(最多)
實現方式:調用Class.forName(”類的限定名“),記得帶包;使用範圍:只有類類型(包括接口),基本數據類型和引用數據類型動態性:有唯一 一個可以Class uClass2 = null;try {//必須掌握uClass2 = Class.forName("fanshe.User"/*字符串類型*/);//動態性的體現,可以傳參String className = new Scanner(System.in).next();uClass2 = Class.forName(className);} catch (ClassNotFoundException e) {}
- Field:屬性
- Constructor:構造
- Method:方法
- Declared:聲明
- 操作從class對象中探究出的信息
- New instance:創建對象
- Get/set:查看和修改
- Invoke:調用方法