建立對象執行個體的幾種方法

來源:互聯網
上載者:User

ava有一下三種方法可以建立對象執行個體。

1.new

通常都是使用java的關鍵字new來建立對象執行個體。

若有一個Something類,則可以通過下面的語句建立Something類的對象執行個體並指定到變數obj。

Java代碼
  1. Something somethingNew = new Something();  
Something somethingNew = new Something();

 通過new建立對象執行個體必須把類名寫在原代碼裡面。

 

2.clone

若程式寫成如下,則可以根據當前對象(this)建立一個新執行個體對象(沒有調用建構函式).

Java代碼
  1. public class Something implements Cloneable{   
  2.     private Something obj;   
  3.     public Something cloneSomething()   
  4.     {   
  5.         try {   
  6.             obj = (Something)this.clone();   
  7. //          obj = (Something)clone();   
  8.         } catch (CloneNotSupportedException e) {   
  9.             e.printStackTrace();   
  10.         }   
  11.         return obj;   
  12.            
  13.     }   
  14. }  
public class Something implements Cloneable{private Something obj;public Something cloneSomething(){try {obj = (Something)this.clone();//obj = (Something)clone();} catch (CloneNotSupportedException e) {e.printStackTrace();}return obj;}}

 如果需要複製上面的那個obj指向的對象執行個體時,調用somethingNew.cloneSomething()方法就ok了。

但是為什麼不直接使用somethingNew.clone()呢?

JDK中Object# clone()方法的原型是:
protected native Object clone() throws CloneNotSupportedException;

方法修飾符是protected,而不是public。這種訪問的不可見度使得我們對Object#clone()方法不可見。

所以,必需重寫Object的clone方法後才能使用。

Java代碼
  1. public Object clone()throws CloneNotSupportedException   
  2. {   
  3.     Something obj;   
  4.     obj= (Something)super.clone();   
  5.     return obj;   
  6. }  
public Object clone()throws CloneNotSupportedException{Something obj;obj= (Something)super.clone();return obj;}

 值得注意的是 :如果需要使用clone方法,必需實現java.lang.Cloneable介面,否則會拋出java.lang.CloneNotSupportedException。

另外clone方法所做的的操作是直接複製欄位的內容,換句話說,這個操作並不管該欄位對應的對象執行個體內容。

像這樣欄位對欄位的拷貝(field to field copy)就成為"淺拷貝",clone方法所做的正是"淺拷貝".

 

3.newInstance

利用java.lang.Class類的newInstance方法,則可根據Class對象的執行個體,建立該Class所表示的類的對象執行個體。

建立Something類的對象執行個體可以使用下面的語句(這樣需要一個已經存在的對象執行個體)。

Java代碼
  1. somethingNew.getClass().newInstance().   
somethingNew.getClass().newInstance(). 

或者使用下面的語句(只需要存在相應的.class檔案即可)

Java代碼
  1. Something instance = (Something) Class.forName("cn.softkid.test.Something").newInstance();  
Something instance = (Something) Class.forName("cn.softkid.test.Something").newInstance();

 如果包下不存在相應.class檔案,則會拋出ClassNotFoundException。

注意 :newInstance建立對象執行個體的時候會調用無參的建構函式,所以必需確保類中有無參數的建構函式,否則將會

拋出java.lang.InstantiationException異常。無法進行執行個體化。

 

引自:http://softkid.javaeye.com/blog/292935

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.