反射機制的理解
以前學過很長時間反射機制,很是不理解?今天終於看到一本書講的很詳細。
所有反射機制都是通過一個類叫做Class來實現:
讓我看看書上是怎麽介紹的
Class
Class是java.lang包中的類,該類的實例用來封裝對象運行時的狀態。當一個類被加載且創建對象時,
和該類相關的一個類型為Claas的對象就會自動創建。Class類本身不提供構造方法,因此,不能使用new來構造對象
任何對象調用getClass()方法都可以獲取和該對象相關的一個Class對象看,當然也可以有其他方法得到對象。
String getName()返回類的名字
Constructor []getDeclaredConstructors()返回類的全部構造方法
Field []getDeclaredFields()返回類的全部成員變量。
Method []getDeclaredMethods()返回類的全部方法
// 這裏先介紹一下為什麽這個,就是所有類都有成員變量,Java中封裝成一個類,同理構造方法等等。
Class具有2個功能
前面已經說過了,重點介紹下,使用Class對象實例化一個對象
尤其這個方法一直困擾很久,在這裏將會變得九霄雲散。
Class.forName(String classname)throws ClassNotFoundException
這個是通過反射機制創建對象實例
通常我們是這樣的做到
類 對象名=new 類();
以上兩個方法等價,只不過一個是反射機制,可能大家不是很理解。
反射機制主要用到框架中實例化對象。
這裏舉個例子實例化。
Class Rect
{
double width,height,area;
public double getArea()
{
area=height*width;
return area;
}
}
public class Example
{
public static void main(String argss[])
{
try
{
Class cs=Class.forName("Rect");
Rect rect=(Rect)cs.newInstance()//這裏該類有無參構構造方法才可以調用。不然程序會報錯。
rect.area()
}
catch(Exception e)
{
}
}
}
主要是框架中服務器可能會調用,這個地方都是隱藏的,所以程序員學的時候感到很崩潰,今天這個問題,無疑惑可存。
本文出自 “簡答生活” 博客,請務必保留此出處http://1464490021.blog.51cto.com/4467028/1922889
反射機制的理解