欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java clone方法詳解及簡單實例

 更新時間:2017年03月11日 11:55:24   投稿:lqh  
這篇文章主要介紹了 Java clone方法詳解及簡單實例的相關資料,需要的朋友可以參考下

  Java clone方法詳解

什么是"clone"?

  在實際編程過程中,我們常常要遇到這種情況:有一個對象A,在某一時刻A中已經(jīng)包含了一些有效值,此時可能 會需要一個和A完全相同新對象B,并且此后對B任何改動都不會影響到A中的值,也就是說,A與B是兩個獨立的對象,但B的初始值是由A對象確定的。在 Java語言中,用簡單的賦值語句是不能滿足這種需求的。要滿足這種需求雖然有很多途徑,但實現(xiàn)clone()方法是其中最簡單,也是最高效的手段。

   Java的所有類都默認繼承java.lang.Object類,在java.lang.Object類中有一個方法clone()。JDK API的說明文檔解釋這個方法將返回Object對象的一個拷貝。要說明的有兩點:一是拷貝對象返回的是一個新對象,而不是一個引用。二是拷貝對象與用 new操作符返回的新對象的區(qū)別就是這個拷貝已經(jīng)包含了一些原來對象的信息,而不是對象的初始信息。

  怎樣應用clone()方法?

  一個很典型的調用clone()代碼如下:

class CloneClass implements Cloneable{ 
 public int aInt; 
 public Object clone(){ 
  CloneClass o = null; 
  try{ 
   o = (CloneClass)super.clone(); 
  }catch(CloneNotSupportedException e){ 
   e.printStackTrace(); 
  } 
  return o; 
 } 
}

   有三個值得注意的地方,一是希望能實現(xiàn)clone功能的CloneClass類實現(xiàn)了Cloneable接口,這個接口屬于java.lang 包,java.lang包已經(jīng)被缺省的導入類中,所以不需要寫成java.lang.Cloneable。另一個值得請注意的是重載了clone()方 法。最后在clone()方法中調用了super.clone(),這也意味著無論clone類的繼承結構是什么樣的,super.clone()直接或 間接調用了java.lang.Object類的clone()方法。下面再詳細的解釋一下這幾點。

  應該說第三點是最重要的,仔細 觀察一下Object類的clone()一個native方法,native方法的效率一般來說都是遠高于java中的非native方法。這也解釋了為 什么要用Object中clone()方法而不是先new一個類,然后把原始對象中的信息賦到新對象中,雖然這也實現(xiàn)了clone功能。對于第二點,也要 觀察Object類中的clone()還是一個protected屬性的方法。這也意味著如果要應用clone()方法,必須繼承Object類,在 Java中所有的類是缺省繼承Object類的,也就不用關心這點了。然后重載clone()方法。還有一點要考慮的是為了讓其它類能調用這個clone 類的clone()方法,重載之后要把clone()方法的屬性設置為public。

  那么clone類為什么還要實現(xiàn) Cloneable接口呢?稍微注意一下,Cloneable接口是不包含任何方法的!其實這個接口僅僅是一個標志,而且這個標志也僅僅是針對 Object類中clone()方法的,如果clone類沒有實現(xiàn)Cloneable接口,并調用了Object的clone()方法(也就是調用了 super.Clone()方法),那么Object的clone()方法就會拋出CloneNotSupportedException異常。

  以上是clone的最基本的步驟,想要完成一個成功的clone,還要了解什么是"影子clone"和"深度clone"。

       感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • Java使用iTextPDF生成PDF文件的實現(xiàn)方法

    Java使用iTextPDF生成PDF文件的實現(xiàn)方法

    這篇文章主要介紹了Java使用iTextPDF生成PDF文件的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • IDEA類和方法注釋模板設置(非常詳細)

    IDEA類和方法注釋模板設置(非常詳細)

    這篇文章主要介紹了IDEA類和方法注釋模板設置(非常詳細),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Springmvc的運行流程圖文詳解

    Springmvc的運行流程圖文詳解

    今天小編就為大家分享一篇關于Springmvc的運行流程圖文詳解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • SpringBoot整合canal實現(xiàn)數(shù)據(jù)同步的示例代碼

    SpringBoot整合canal實現(xiàn)數(shù)據(jù)同步的示例代碼

    本文主要介紹了SpringBoot整合canal實現(xiàn)數(shù)據(jù)同步,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java Scanner對象中hasNext()與next()方法的使用

    Java Scanner對象中hasNext()與next()方法的使用

    這篇文章主要介紹了Java Scanner對象中hasNext()與next()方法的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Eolink上傳文件到Java后臺進行處理的示例代碼

    Eolink上傳文件到Java后臺進行處理的示例代碼

    這篇文章主要介紹了Eolink上傳文件到Java后臺進行處理,這里是上傳的excel表格數(shù)據(jù)并轉換為java集合對象、然后進行業(yè)務邏輯處理判斷最后保存到數(shù)據(jù)庫?,需要的朋友可以參考下
    2022-12-12
  • springboot打成jar后無法讀取根路徑和文件的解決

    springboot打成jar后無法讀取根路徑和文件的解決

    這篇文章主要介紹了springboot打成jar后無法讀取根路徑和文件的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 詳解關于IntelliJ IDEA中Schedule for Addition 的問題

    詳解關于IntelliJ IDEA中Schedule for Addition 的問題

    本篇文章主要介紹了詳解關于 IntelliJ IDEA 中 Schedule for Addition 的問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • java:程序包org.junit不存在解決辦法詳析

    java:程序包org.junit不存在解決辦法詳析

    這篇文章主要給大家介紹了關于java:程序包org.junit不存在解決辦法的相關資料,這個錯誤通常發(fā)生在使用JUnit測試時,因為缺少JUnit庫的依賴,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • SpringBoot處理HTTP請求的詳細流程

    SpringBoot處理HTTP請求的詳細流程

    這篇文章主要介紹了SpringBoot處理HTTP請求的詳細流程,文中通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-05-05

最新評論