簡介
首先介紹一些不太實用的解釋:JAVA反射機制是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意方法和屬性;這種動態獲取信息以及動態調用對象方法的功能稱為java語言的反射機制。
簡單使用
反射,在java中是非常常見和好用的一種方式,(但是大家需要知道,他的效率是比較低的,所以要慎用)當然在基于java語言而產生的Android中也是可以使用的,我們可以使用反射來獲取一些系統并不開放,但是存在的類,從而調用他的一些方法,下面就簡單的寫一下,利用java反射來獲取類和調用它的方法的實現。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
//需要被反射調用的類的路徑 try { //通過路徑來獲取java類 reflect = Class.forName(className); //實例化對應得類 Object javaReflect = reflect.newInstance(); if ( null != javaReflect) { //反射出該Class類中的stringToUp()方法 stringToUp是方法名,String.class是參數類型 Method stringToUp = reflect.getDeclaredMethod( "stringToUp" , String. class ); //取消訪問私有方法的合法性檢查 stringToUp.setAccessible( true ); //調用stringToUp()方法,第一個參數表示對應的類,第二個是方法的參數 String str = (String) stringToUp.invoke(javaReflect, "java reflect test" ); System.out.println( "result:" +str); } } catch (Exception e) { e.printStackTrace(); } |
我們來看一下,在stringToUp里面做了什么:
1
2
3
|
public String stringToUp(String str){ return str.toUpperCase(); } |
其實就是一個對字符串轉換成大寫,然返回,好了我們來看一下輸出結果:
1
|
01-02 08:09:11.959 6150-6150/com.zxf.alpha I/System.out: result:JAVA REFLECT TEST |
簡直就是完美。
總結
好了,以上就是這篇文章的全部內容了,反射在Android中的應用范圍也很多,比如我們項目有多個module的時候,你想在module里面調用主的程序的一個方法你就可以這么干,也可以用反射來調用一些系統為公開的方法,但是效率不太高。希望本文的內容對大家學習或者使用Java中的放射能有所幫助,如果有疑問大家可以留言交流。