程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Class.forName().newInstance()和通過new得到對象的區別

Class.forName().newInstance()和通過new得到對象的區別

編輯:C++入門知識

Class.forName().newInstance()和通過new得到對象的區別


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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved