1. 程式人生 > >Java反射機制的優點

Java反射機制的優點

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

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

建立物件的3中方式:

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

  • 使用物件的clone()方法。

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

舉個簡單的例子:

123456789101112131415161718192021222324252627282930313233package 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