寫代碼看到一條newInstance()語句,不是很理解它和new()的區別,就找了些資料,在這裡總結一下。先看一個例子:
package com.zz.bridge.impl; /** * Copyright 2015年6月16日 * created by txxs * all right reserved */ public class ClassDemo { /** * 構造函數 */ public ClassDemo() { System.out.println("classDemo!"); } public static void main(String[] args) throws Exception { /** * Class.forName(String):要求JVM查找並加載String指定的類 * 返回String串指定的類 */ Class clazz = Class.forName("com.zz.bridge.impl.ClassDemo"); System.out.println(clazz); /** * clazz.newInstance() * 返回的類所代表的一個實例和new ClassDemo()效果是一樣的。 */ ClassDemo classDemo = (ClassDemo) clazz.newInstance(); System.out.println(classDemo); } }
運行結果:
class com.zz.bridge.impl.ClassDemo classDemo! com.zz.bridge.impl.ClassDemo@32c3601b
區別:
1、使用newInstance可以解耦。使用newInstance的前提是,類已加載並且這個類已連接,這是正是class的靜態方法forName()完成的工作。newInstance實際上是把new 這個方式分解為兩步,即,首先調用class的加載方法加載某個類,然後實例化。
2、newInstance: 弱類型。低效率。只能調用無參構造。 new: 強類型。相對高效。能調用任何public構造。
3、newInstance()是實現IOC、反射、面對接口編程和依賴倒置等技術方法的必然選擇,new只能實現具體類的實例化,不適合於接口編程。
4、 newInstance() 一般用於動態加載類。