Java反射機制的優點
阿新 • • 發佈:2019-01-11
java的反射機制就是增加程式的靈活性,避免將程式寫死到程式碼裡, 例如: 例項化一個 person()物件, 不使用反射, new person(); 如果想變成 例項化 其他類, 那麼必須修改原始碼,並重新編譯。 使用反射: class.forName("person").newInstance(); 而且這個類描述可以寫到配置檔案中,如 **.xml, 這樣如果想例項化其他類,只要修改配置檔案的"類描述"就可以了,不需要重新修改程式碼並編譯。 增加程式的靈活性。 如struts中。請求的派發控制。 當請求來到時。struts通過查詢配置檔案。找到該請求對應的action。已經方法。 然後通過反射例項化action。並呼叫響應method。 如果不適用反射,那麼你就只能寫死到程式碼裡了。 所以說,一個靈活,一個不靈活。 很少情況下是非用反射不可的。大多數情況下反射是為了提高程式的靈活性。 因此一般框架中使用較多。因為框架要適用更多的情況。對靈活性要求較高。
建立物件的3中方式:
使用new的方式,最為常見。
使用物件的clone()方法。
使用反射機制的newInstance()方法。
舉個簡單的例子:
123456789101112131415161718192021222324252627282930313233 | 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