反射機制是Java語言中一個非常重要的特性,它允許程式在運作時自我檢查,同時也允許對其内部的成員進行操作。由于反射機制能夠實作在運作時對類進行裝載,是以能夠增加程式的靈活性,但是不恰當地使用反射機制,也會嚴重影響系統的性能。
具體而言,反射機制提供的功能主要有:
- 得到一個對象所屬的類;
- 擷取一個類的所有成員變量和方法;
- 在運作時建立對象;
- 在運作時調用對象的方法;
其實,反射機制非常重要的一個作用就是可以在運作時動态地建立類的對象,示例如下:
class Base{
public void f(){
System.out.println("Base");
}
}
class Sub extends Base{
public void f(){
System.out.println("Sub");
}
}
public class Test{
public static void main(String[] args){
try{//使用反射機制加載類
Class c = Class.forName("Sub");
Base b = (Base)c.newInstance();
b.f();
}catch(Exception e){
e.printStackTrace();
}
}
}
/* 程式運作結果為:Sub */
在反射機制中,Class是一個非常重要的類,那麼如何才能擷取Class類呢?總共有如下3種方法可以擷取到Class類:
- Class.forName (“類的路徑”),如上例所示。
- 類名.Class。
- 執行個體.getClass()。
Java中建立對象的方式有以下4種:
- 通過new語句執行個體化一個對象;
- 通過反射機制建立對象。
- 通過clone()方法建立一個對象;
- 通過反序列化的方式建立對象。