亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中的數(shù)組復制(clone與arraycopy)代碼詳解

 更新時間:2017年11月17日 14:26:03   作者:_枸杞子_  
這篇文章主要介紹了Java中的數(shù)組復制(clone與arraycopy)代碼詳解,本文并未全部介紹數(shù)組復制的幾種方式,僅對clone和copy的相關內(nèi)容進行了解析,具有一定參考價值,需要的朋友可以了解下。

JAVA數(shù)組的復制是引用傳遞,而并不是其他語言的值傳遞。

1、clone

protectedObjectclone()

throwsCloneNotSupportedException創(chuàng)建并返回此對象的一個副本?!案北尽钡臏蚀_含義可能依賴于對象的類。這樣做的目的是,對于任何對象x,表達式:

x.clone()!=x為true,表達式:

x.clone().getClass()==x.getClass()也為true,但這些并非必須要滿足的要求。一般情況下:

x.clone().equals(x)為true,但這并非必須要滿足的要求。

按照慣例,返回的對象應該通過調(diào)用super.clone獲得。如果一個類及其所有的超類(Object除外)都遵守此約定,則x.clone().getClass()==x.getClass()。

按照慣例,此方法返回的對象應該獨立于該對象(正被復制的對象)。要獲得此獨立性,在super.clone返回對象之前,有必要對該對象的一個或多個字段進行修改。這通常意味著要復制包含正在被復制對象的內(nèi)部“深層結構”的所有可變對象,并使用對副本的引用替換對這些對象的引用。如果一個類只包含基本字段或?qū)Σ蛔儗ο蟮囊?,那么通常不需要修改super.clone返回的對象中的字段。

Object類的clone方法執(zhí)行特定的復制操作。首先,如果此對象的類不能實現(xiàn)接口Cloneable,則會拋出CloneNotSupportedException。注意,所有的數(shù)組都被視為實現(xiàn)接口Cloneable。否則,此方法會創(chuàng)建此對象的類的一個新實例,并像通過分配那樣,嚴格使用此對象相應字段的內(nèi)容初始化該對象的所有字段;這些字段的內(nèi)容沒有被自我復制。所以,此方法執(zhí)行的是該對象的“淺表復制”,而不“深層復制”操作。

Object類本身不實現(xiàn)接口Cloneable,所以在類為Object的對象上調(diào)用clone方法將會導致在運行時拋出異常。

返回:

此實例的一個副本。

拋出:

CloneNotSupportedException-如果對象的類不支持Cloneable接口,則重寫clone方法的子類也會拋出此異常,以指示無法復制某個實例。

1、克隆方法用于創(chuàng)建對象的拷貝,為了使用clone方法,類必須實現(xiàn)java.lang.Cloneable接口重寫protected方法clone,

如果沒有實現(xiàn)Clonebale接口會拋出CloneNotSupportedException。

2、在克隆java對象的時候不會調(diào)用構造器。

3、java提供一種叫淺拷貝(shallowcopy)的默認方式實現(xiàn)clone,創(chuàng)建好對象的副本后然后通過賦值拷貝內(nèi)容,

意味著如果你的類包含引用類型,那么原始對象和克隆都將指向相同的引用內(nèi)容,這是很危險的,

因為發(fā)生在可變的字段上任何改變將反應到他們所引用的共同內(nèi)容上。為了避免這種情況,需要對引用的內(nèi)容進行深度克隆。

2、arraycopy

publicstaticvoidarraycopy(Objectsrc,

intsrcPos,

Objectdest,

intdestPos,

intlength)從指定源數(shù)組中復制一個數(shù)組,復制從指定的位置開始,到目標數(shù)組的指定位置結束。

從src引用的源數(shù)組到dest引用的目標數(shù)組,數(shù)組組件的一個子序列被復制下來。被復制的組件的編號等于

length參數(shù)。源數(shù)組中位置在srcPos到srcPos+length-1之間的組件被分別復制到目標數(shù)組中的destPos

到destPos+length-1位置。

如果參數(shù)src和dest引用相同的數(shù)組對象,則復制的執(zhí)行過程就好像首先將srcPos到srcPos+length-1位置的組件復制到一個帶有l(wèi)ength組件的臨時數(shù)組,然后再將此臨時數(shù)組的內(nèi)容復制到目標數(shù)組的destPos到destPos+length-1位置一樣。

If如果dest為null,則拋出NullPointerException異常。

如果src為null,則拋出NullPointerException異常,并且不會修改目標數(shù)組。

否則,只要下列任何情況為真,則拋出ArrayStoreException異常并且不會修改目標數(shù)組:

src參數(shù)指的是非數(shù)組對象。

dest參數(shù)指的是非數(shù)組對象。

src參數(shù)和dest參數(shù)指的是那些其組件類型為不同基本類型的數(shù)組。

src參數(shù)指的是具有基本組件類型的數(shù)組且dest參數(shù)指的是具有引用組件類型的數(shù)組。

src參數(shù)指的是具有引用組件類型的數(shù)組且dest參數(shù)指的是具有基本組件類型的數(shù)組。

否則,只要下列任何情況為真,則拋出IndexOutOfBoundsException異常,并且不會修改目標數(shù)組:

srcPos參數(shù)為負。

destPos參數(shù)為負。

length參數(shù)為負。

srcPos+length大于src.length,即源數(shù)組的長度。

destPos+length大于dest.length,即目標數(shù)組的長度。

否則,如果源數(shù)組中srcPos到srcPos+length-1位置上的實際組件通過分配轉(zhuǎn)換并不能轉(zhuǎn)換成目標數(shù)組的組件

類型,則拋出ArrayStoreException異常。在這種情況下,將k設置為比長度小的最小非負整數(shù),這樣就無法

將src[srcPos+k]轉(zhuǎn)換為目標數(shù)組的組件類型;當拋出異常時,從srcPos到srcPos+k-1位置上的源數(shù)組組件

已經(jīng)被復制到目標數(shù)組中的destPos到destPos+k-1位置,而目標數(shù)組中的其他位置不會被修改。

(因為已經(jīng)詳細說明過的那些限制,只能將此段落有效地應用于

兩個數(shù)組都有引用類型的組件類型的情況。)

參數(shù):

src-源數(shù)組。

srcPos-源數(shù)組中的起始位置。

dest-目標數(shù)組。

destPos-目標數(shù)據(jù)中的起始位置。

length-要復制的數(shù)組元素的數(shù)量。

拋出:

IndexOutOfBoundsException-如果復制會導致對數(shù)組范圍以外的數(shù)據(jù)的訪問。

ArrayStoreException-如果因為類型不匹配而使得無法將src數(shù)組中的元素存儲到dest數(shù)組中。

NullPointerException-如果src或dest為null。

3、測試代碼

import java.util.Arrays;
public class TestCloneCopy 
{
	public static void outputArrays(int[] a) 
	  {
		for ( int i = 0; i < a.length; ++i ) 
		    {
			System.out.print(a[i] + "\t");
		}
		System.out.println();
	}
	public static void main(String[] args) 
	  {
		int[] ia = new int[10];
		Arrays.fill(ia,20);
		////////////////////////////////////////////////////////////////////clone//////////////////////////////////////////////////////////////// 
		//克隆一個數(shù)組ia 
		int[] ib = ia.clone();
		ib[5] = 11;
		TestClone.outputArrays(ib);
		TestClone.outputArrays(ia);
		///////////////////////////////////////////////////////////////arraycopy///////////////////////////////////////////////////// 
		int[] ic = new int[20];
		System.arraycopy(ib,0,ic,5,10);
		TestClone.outputArrays(ic);
	}
}

測試結果:

F:\code\Java\Course\017_數(shù)組CloneCopy>java TestCloneCopy 
20   20   20   20   20   11   20   20   20   20 
 
20   20   20   20   20   20   20   20   20   20 
 
0    0    0    0    0    20   20   20   20   20 
11   20   20   20   20   0    0    0    0    0 

總結

以上就是本文關于Java中的數(shù)組復制(clone與arraycopy)代碼詳解的全部內(nèi)容,希望對大家學習Java數(shù)組復制方面的內(nèi)容有些許幫助。

相關文章

  • Java 內(nèi)置接口 Serializable示例詳解

    Java 內(nèi)置接口 Serializable示例詳解

    這篇文章主要為大家介紹了Java 內(nèi)置接口 Serializable示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • 查找native方法的本地實現(xiàn)函數(shù)native_function詳解

    查找native方法的本地實現(xiàn)函數(shù)native_function詳解

    JDK開放給用戶的源碼中隨處可見Native方法,被Native關鍵字聲明的方法說明該方法不是以Java語言實現(xiàn)的,而是以本地語言實現(xiàn)的,Java可以直接拿來用。這里介紹下查找native方法的本地實現(xiàn)函數(shù)native_function,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • Java環(huán)境配置圖文教程(推薦)

    Java環(huán)境配置圖文教程(推薦)

    下面小編就為大家?guī)硪黄狫ava環(huán)境配置圖文教程(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Java 通過mave命令下載jar包的示例代碼

    Java 通過mave命令下載jar包的示例代碼

    這篇文章主要介紹了Java 通過mave命令下載jar的示例代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Java實現(xiàn)考試系統(tǒng)

    Java實現(xiàn)考試系統(tǒng)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)考試系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • 詳解Java實現(xiàn)設計模式之責任鏈模式

    詳解Java實現(xiàn)設計模式之責任鏈模式

    責任鏈模式是一種行為設計模式,允許你將請求沿著處理鏈發(fā)送,然后處理者都可對其進行處理,完成后可以再將其傳遞給下一個處理者。下面將會舉例說明什么是責任鏈模式,責任鏈模式該如何使用
    2021-06-06
  • Java中的FutureTask實現(xiàn)異步任務代碼實例

    Java中的FutureTask實現(xiàn)異步任務代碼實例

    這篇文章主要介紹了Java中的FutureTask實現(xiàn)異步任務代碼實例,普通的線程執(zhí)行是無法獲取到執(zhí)行結果的,FutureTask?間接實現(xiàn)了?Runnable?和?Future?接口,可以得到子線程耗時操作的執(zhí)行結果,AsyncTask?異步任務就是使用了該機制,需要的朋友可以參考下
    2024-01-01
  • 基于SSM框架之個人相冊示例代碼

    基于SSM框架之個人相冊示例代碼

    本篇文章主要介紹了基于SSM框架之個人相冊示例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • java利用phantomjs進行截圖實例教程

    java利用phantomjs進行截圖實例教程

    PlantomJs是一個基于javascript的webkit內(nèi)核無頭瀏覽器 也就是沒有顯示界面的瀏覽器,你可以在基于 webkit 瀏覽器做的事情,它都能做到。下面這篇文章主要給大家介紹了關于java利用phantomjs進行截圖的相關資料,需要的朋友可以參考下
    2018-10-10
  • Spring框架事務屬性中事務隔離級別與傳播行為全面講解

    Spring框架事務屬性中事務隔離級別與傳播行為全面講解

    這篇文章主要介紹了Spring框架聲明式事務的事務隔離級別和事務傳播行為,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-11-11

最新評論