Java反射機制的優點

java的反射機制就是增加程序的靈活性,避免將程序寫死到代碼裏,
例如: 實例化一個 person()對象, 不使用反射, new person(); 如果想變成 實例化 其他類, 那麼必須修改源代碼,並重新編譯。
      使用反射: class.forName("person").newInstance(); 而且這個類描述可以寫到配置文件中,如 **.xml, 這樣如果想實例化其他類,只要修改配置文件的"類描述"就可以了,不需要重新修改代碼並編譯。

增加程序的靈活性。
如struts中。請求的派發控制。
當請求來到時。struts通過查詢配置文件。找到該請求對應的action。已經方法。
然後通過反射實例化action。並調用響應method。
如果不適用反射,那麼你就只能寫死到代碼裏了。
所以說,一個靈活,一個不靈活。
很少情況下是非用反射不可的。大多數情況下反射是爲了提高程序的靈活性。
因此一般框架中使用較多。因爲框架要適用更多的情況。對靈活性要求較高。

創建對象的3中方式:

  • 使用new的方式,最爲常見。

  • 使用對象的clone()方法。

  • 使用反射機制的newInstance()方法。

舉個簡單的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.java;
 
public class Demo
{
    /**
     * 通過兩種方式創建對象,以做對比。
     * @param args
     * @throws ClassNotFoundException
     * @throws InstantiationException
     * @throws IllegalAccessException
     */
    public static void main(String[] args) throws ClassNotFoundException,
            InstantiationException, IllegalAccessException
    {
        // 我們認爲這種方方式,Demo類和Basic類是耦合的,
        // 編譯Demo類時,Basic類必須存在,拓展性不強。
        Basic basic0 = new Basic();
 
         
        // 很明顯這種方式,在編譯Demo類時,並不需要
        // Basic類的存在,只要在運行Demo類時,存在即可,
        // 所以我們認爲Demo類和Basic是鬆耦合的,
        // 爲後期的拓展提供了空間,好處顯而易見。這麼說,如果沒有
        // 反射機制,就沒有struts、spring、hibernate等等這些web框架。
        Class clazz = Class.forName("com.java.Basic");
 
        Basic basic1 = (Basic) clazz.newInstance();
    }
}
轉:http://zhidao.baidu.com/question/478254128.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章