Java中的數(shù)組有對應(yīng)的類么,為什么數(shù)組可以直接調(diào)用clone()方法?

科技 未結(jié) 5 1598

該問題從clone()方法開始引出。

clone()是基類Object類中的一個protected方法。

對該方法做以下測試

1. 在類A中調(diào)用類A實例a的clone()方法

public class A implements Cloneable { public static void main(String[] args) throws CloneNotSupportedException { A a = new A(); // 調(diào)用正確 A a2 = (A) a.clone(); } }

以上調(diào)用成功,因為A是object的子類,繼承了Object中的clone()方法,所以可以直接調(diào)用。

2. 在類B中調(diào)用類A實例a的clone()方法

public class B { public static void main(String[] args) { A a = new A(); // 調(diào)用失敗 a.clone(); } }

錯誤信息:

以上調(diào)用出錯,A和B都是Object的子類,都繼承了clone()方法,但不能在一個子類中調(diào)用另一個子類的protected方法。

如果需要在類B中實現(xiàn)對實例a的clone,類A需要重寫clone方法,并且申明為public,如下:

類A:

public class A implements Cloneable { public Object clone() throws CloneNotSupportedException { return super.clone(); } }

類B:

public class B { public static void main(String[] args) throws CloneNotSupportedException { A a = new A(); // 調(diào)用成功 a.clone(); } }

以上調(diào)用成功,因為類A重寫了clone方法,并且申明為public。

3. 提出問題,數(shù)組為什么可以直接調(diào)用clone()方法

public class ArrayClone { public static void main(String[] args) { int[] array = {1, 1, 4, 7}; // 調(diào)用成功 array.clone(); } }

如果把array理解成為Object的子類,那么該array應(yīng)該不能在類ArrayClone中調(diào)用clone()方法。但是可以調(diào)用成功。

此外:

章節(jié)1中,直接在類A中調(diào)用實例a的clone()方法時,IDE明確指出clone()方法是protected的,智能提示上有個小鑰匙。

而在章節(jié)3中,調(diào)用數(shù)組的clone()方法時,IDE提示該方法是public的,智能提示上有個打開的鎖。


4. 提問

1. Java中是否有一個類對應(yīng)數(shù)組?數(shù)組在jvm中是一個怎樣的存在?
2. 數(shù)組的clone()方法是怎么實現(xiàn)的?為什么可以直接調(diào)用?為什么是public的?
3. 數(shù)組的.length方法是怎么實現(xiàn)的?為什么IDE點不進去源碼?

相關(guān)標(biāo)簽:
5條回答
  • 2023-04-22 02:20

    1、Java中并不存在任何一個類對應(yīng)數(shù)組,數(shù)組屬于Java語言的一部分。2、數(shù)據(jù)是特殊的對象,本身就實現(xiàn)了Cloneable。Objectclone方法的javadoc中有這么一句Note that all arrays are considered to implement the interface Cloneable ,所以數(shù)組是可以直接使用clone方法的。3、數(shù)組對象天生就有一個finallength屬性,因為數(shù)組并沒有定義在任何一個類中,所以沒有源碼。

    0 討論(0)
  • 2023-04-22 02:24

    Class c = int[].class;System.out.println(c.getPackage());System.out.println(c.getName());System.out.println(Modifier.toString(c.getModifiers()));

    0 討論(0)
  • 2023-04-22 02:24

    可以這么理解:數(shù)組類是一組特殊的類,由JVM運行時動態(tài)生成,包括它的length屬性及其它方法實現(xiàn)除了int[], boolean[] 這種數(shù)組外,還包含用戶自定義類型的數(shù)組, 比如 com.yourPackage.YourClass[] 這種格式的數(shù)組,以及2維,3維..多維數(shù)組

    0 討論(0)
  • 2023-04-22 02:38

    有個有意思的輸入結(jié)果int[]類的修飾符是 public abstract final這又超出了我們的認知

    0 討論(0)
  • 2023-04-22 02:41

    Java的數(shù)組就是數(shù)組,沒有類與之對應(yīng)。數(shù)組所使用的clone()并非一定要類才能擁有呀,只要編譯器提供了這種語法,一樣可以實現(xiàn)。同樣的,數(shù)組的length也是編譯器解析出來的數(shù)組屬性,并非由Java實現(xiàn),也自然看不到Java的源碼。

    0 討論(0)
提交回復(fù)
最新問題
什么是智慧屏? 5
小米智能電視如何看電視臺的頻道 1
女人怎么治療輸卵管堵 1
為什么很多人出索尼xbaZ5 1
宏基E146D家用投影機有非常大的聲響 1
做輸卵管造影大約多少錢 1
央視是哪個頻道 3
什么牌子的電視盒子比較好? 1
哪里醫(yī)院專治輸卵管堵塞好 1
9K金是純金嗎?9K金佩戴時間長了會不會掉色? 4
猜你喜歡
平度37歲二胎做試管成功率!具體明細是!
成都做試管嬰兒較好的私立醫(yī)院來了,讓你心中有數(shù)!
南昌做一次第三代試管嬰兒多少錢,成功案例分享!
泰國較好的試管醫(yī)院?附帶收費標(biāo)準(zhǔn)!
蘇州三代試管嬰兒醫(yī)院排行榜一覽!附試管價格明細!
欽州染色體多態(tài)性做試管一次能成功的經(jīng)驗分享?有沒有補貼!
南京可以做試管嬰兒的醫(yī)院有哪些?附醫(yī)院排名費用!
北京私立醫(yī)院試管嬰兒?附過程簡單說明!
北京做試管嬰兒可以保證懷孕嗎?手術(shù)的費用!
俄羅斯三代試管嬰兒的花費明細表,附試管排名!
熱門文章
【在線求助】2025年試管嬰兒的完整步驟
2025年泰國三代試管醫(yī)院全在這里 排名表值得收藏
單身男性美國試管嬰兒多少錢?附價格表
同性試管嬰兒費用清單表
熱議:做試管嬰兒會加重精神病人的病情嗎?
泰國試管嬰兒好評醫(yī)生及醫(yī)院推薦 試管嬰兒醫(yī)院選擇指南
泰國助孕生孩子費用明細曝光
2025北京私立試管醫(yī)院排名盤點,哪家好看成功率數(shù)據(jù)
2025泰國生殖醫(yī)院新綜合排名名單!
重慶可以做三代試管的私立醫(yī)院哪家比較靠譜?醫(yī)生推薦名單一覽
廣告合作方 廣告申請