寫代碼看到一條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() 一般用於動態加載類。