1. 程式人生 > >淺談newInstance()方法和new關鍵字

淺談newInstance()方法和new關鍵字

網上看到了一段工廠類是這麼寫的:

	public class SimpleFactory<T> {
		@SuppressWarnings({ "unchecked", "rawtypes" })
		public T getInstance(Class clazz) {
		try {
			return (T) clazz.newInstance();
			} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
				}
			return null;
			}
		}

發現這個東西 return (T) clazz.newInstance(); ,就研究了一下。

它們的區別在於建立物件的方式不一樣,前者是使用類載入機制,後者是建立一個新類。

那麼為什麼會有兩種建立物件方式?這主要考慮到軟體的可伸縮、可擴充套件和可重用等軟體設計思想。

我們使用關鍵字new建立一個類的時候,這個類可以沒有被載入。但是使用newInstance()方法的時候,就必須保證:

1、這個類已經載入;2、這個類已經連線了。

newInstance()實際上是把new這個方式分解為兩步,即首先呼叫Class載入方法載入某個類,然後例項化。 

這樣分步的好處是顯而易見的。我們可以在呼叫class的靜態載入方法forName時獲得更好的靈活性,提供給了一種降耦(降低耦合度)的手段。

最後用最簡單的描述來區分new關鍵字和newInstance()方法的區別:

*    newInstance: 弱型別。低效率。只能呼叫無參構造。

*    new: 強型別。相對高效。能呼叫任何public構造。