asp.net+Android+IOS開發 、Net培訓、期待與您交流!
(前言:本篇文章參見了張孝祥的反射視頻教程,以及網友的博客 http://m.survivalescaperooms.com/gulvzhe/archive/2012/01/27/2330001.html)
目錄:一、概述 二、Class 類介紹 三、如何使用反射以及簡單代碼演示
一、概述
java反射機制是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法和屬性,這種動態獲取的信息以及動態調用對象的方法的功能稱為Java語言的反射機制。
反射主要用于框架中,框架需要大量調用使用框架者寫的類,這些類是框架開發后完成的,所以框架不能直接通過new來獲得它們的實例對象,而要用反射來做。
反射的缺點是比較消耗資源
二、Class 類介紹
java中有九個預定義的Class類型 (八個基本類型以及一個void類型)
可通過Class類中 isPRimitive()方法 來判斷是否為預定義對象
獲取Class 類對象的三種方式
1、 Class.forName(“類名”) 返回類的字節碼,已加載的直接獲取,未加載的先加載后獲取
2、對象.getClass()
3、 類名.class
構造方法 對應Construct 類
成員變量 對應Filed 類
成員方法 對應Method類
三、如何應用反射
使用java的反射機制,一般需要遵循三步:
示例代碼:通過反射操作類的實例屬性,甚至可以強制獲得類的private屬性 ;以及三種方式獲得類對象的代碼演示。
1 public class ReflectTest { 2 3 /** 類目的:通過反射操作類的實例屬性,甚至可以強制獲得類的private屬性 4 * @param args 5 * @throws ClassNotFoundException 6 * @throws IllegalaccessException 7 * @throws IllegalArgumentException 8 */ 9 public static void main(String[] args) throws ClassNotFoundException, IllegalArgumentException, IllegalAccessException {10 11 Class cat=Cat.class;//類名.class 方式獲得類對象12 Class catfor=Class.forName("edu.fjnu.reflect.Cat");// Class.forName(“類名”) 方法獲得類對象,方便起見,直接拋出異常13 14 Cat cats=new Cat(); 15 Class catget=cats.getClass();//對象.getClass() 方式獲得類對象16 17 Field[] catFields=cat.getDeclaredFields();//獲得所有屬性,包括private屬性18 19 for(Field catField:catFields){20 21 catField.setAccessible(true);//設置屬性值為可訪問,包括private屬性值22 23 String name=catField.getName();//獲得屬性名稱 24 Object value=catField.get(cats);//方法參數為屬性所屬類的實例對象,異常簡單拋出處理25 26 System.out.println(name+":"+value);27 }28 29 }30 31 }32 class Cat{33 private String name="kitty";34 private String color="white";35 private int age=2;36 }
初學者難免錯誤,歡迎評判指教,持續更正ing...........
ASP.Net+Android+IOS開發 、Net培訓、期待與您交流!
新聞熱點
疑難解答