標籤:sys print tcl public java null 方法調用 method 類類型
下面就簡單的總結一下java反射機制,加深印象:
什麼是反射機制?
JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;
對於任意一個對象,都能夠調用它的任意方法和屬性;
這種動態擷取資訊以及動態調用對象方法的功能稱為java語言的反射機制。
Class類
我們知道Java是一門物件導向語言,在Java的世界裡,萬物皆為對象,比如我們有一個Person類:
public class Person { }
我們建立一個Person類的執行個體,Person person = new Person; 那麼這個person,就是Person類的執行個體對象。
那麼既然萬物都為對象,所以類也是對象。
類是什麼的對象呢?類是Class類的對象,表示方式有三種:
第一種,任何一個類都有一個隱含的靜態成員變數class Class c1 = Person.class;
第二種,已經知道該類的對象,通過getClass獲得 Class c2 = person.getClass;
第三種,Class類的forName方法 Class c3 = Class.forName("Person");
通過類的類類型,我們經常會用到的方法就是newInstance方法,通過該方法可以建立該類的執行個體:
Person personA = new Person;
//直接new一個執行個體 Person personB = Person.class.newInstance;
//通過newInstance方法獲得Person的執行個體
//在學習JAVAEE時候,newInstance方法我們最常見於擷取資料庫驅動 Class.forName("com.mysql.jdbc.Driver").newInstance;
//需要注意的是,在使用newInstance方法的前提是該類必須要有無參構造方法
動態載入類:
編譯時間刻載入類稱為靜態載入,運行時刻載入類稱為動態載入,使用new方法建立執行個體即為靜態載入類,在編譯時間候就要載入全部類。
方法的反射操作
可以通過方法的反射操作實現方法的調用:
import java.lang.reflect.Method;public class MethodDemo1 { public static void main(String[] args) { //要擷取print(int, int) //要擷取類的方法就要擷取類的資訊,擷取類的資訊就要擷取類的類類型 A a1 = new A; Class c = a1.getClass; //2,擷取方法 名稱和參數列表 //getMethod擷取的是public的方法 try { Method m = c.getDeclaredMethod("print", int.class,int.class);
//方法的反射操作 //a1.print(10, 20);方法的反射操作,用m來進行方法調用和前者效果一致 Object obj = m.invoke(a1, 10,20); //如果方法有傳回值傳回值,沒有就null } catch (Exception e) { e.printStackTrace; } } }class A { public void print(int a , int b) { System.out.println(a + b); } public void print(String a , String b) {
System.out.println(a.toUpperCase + "," + b.toUpperCase); } }
JAVA反射機制