import java.util.*;
import java.lang.*;
public class Test{
public static void main(String[] argv){
String s1="abc";
String s2=(String) s1.clone();
}
}
爲什麼這個簡單的測試程序不起作用?java中的克隆()
import java.util.*;
import java.lang.*;
public class Test{
public static void main(String[] argv){
String s1="abc";
String s2=(String) s1.clone();
}
}
爲什麼這個簡單的測試程序不起作用?java中的克隆()
clone
是Object類的一個方法。對於一個類是「可複製」的,它應該實現標記Cloneable
接口。 String
類沒有實現這個接口,並且不覆蓋克隆方法,因此錯誤。
我希望上面的代碼是用於教育目的,因爲你永遠不應該感到需要調用clone
給出Java中的字符串是:
new String(String)
,它的作用類似於複製構造函數,與您的clone()
調用非常相似。有效的Java項目11。 (或者甚至更好,只是使用複製構造函數等克隆以外的其他東西。) – 2012-02-06 17:14:56
嘿,downvote這篇文章,去圖。 – 2012-02-06 17:30:18
它不編譯。 clone不是'Cloneable'中的公共方法,所以實現這一點無關緊要。 – 2012-02-06 18:21:31
Object.clone()
受保護。這是一個棘手的API使用。
當通過擴展方法的可見性擴展Object時,通常會暴露clone()
。
克隆在任何字符串上都沒什麼意義,因爲它既是final
也是不可變的。
有一個複製字符串的原因;可以用:
String s1 = ...;
String s2 = new String(s1)
很少需要複製一個字符串,而且你還沒有解釋爲什麼會這樣([這個問題])(http://stackoverflow.com/questions/390703/what-is-the-purpose-of-the-expression新的字符串在Java)))。 – 2012-02-06 17:17:14
顯然無法編譯。 Object.clone
已保護訪問權限。
除了是類本身和到 同一包中的代碼中訪問...,被保護的構件,也可以從一個 類通過對象引用是至少相同類型作爲訪問 類
的java.lang.Cloneable 接口必須由我們要建立其對象克隆的類實現。如果我們不實現 Cloneable接口,clone()方法生成CloneNotSupportedException的。
clone()方法在Object類中定義。克隆()方法的語法如下:
protected Object clone() throws CloneNotSupportedException
對於一類是「可複製」,它應該實現標記Cloneable接口。 String類不會實現這個接口,並且不會覆蓋克隆方法,因此會導致錯誤。
受保護的對象clone()拋出CloneNotSupportedException創建並返回此對象的確切副本(克隆)。
Java中的字符串是不可變的。隨意通過方法/類共享它們 已經存在一個構造函數new String(String),它的作用類似於複製構造函數,與clone()調用非常相似。
一般一個暴露克隆()當一個通過擴大該方法的可見性延伸的Object。
克隆任意字符串就沒有什麼意義,因爲它既是最後的和不可改變的。
它以什麼方式不起作用? – Jivings 2012-02-06 17:10:15
線程「main」中的異常java.lang.RuntimeException:不可編譯的源代碼 - 未報告的異常java.lang.CloneNotSupportedException;明智覆蓋克隆:必須被捕獲或者聲明在test.Test.main(Test.java:9) Java結果被拋出 \t:1 – user1192813 2012-02-06 17:12:32