Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的Clone()_Java_Clone - Fatal编程技术网

java中的Clone()

java中的Clone(),java,clone,Java,Clone,为什么这个简单的测试程序不起作用?clone是对象类的一种方法。对于“可克隆”的类,它应该实现markercloneable接口字符串类不实现此接口,也不重写克隆方法,因此出现错误 我希望上面的代码片段是出于教育目的,因为您永远不会觉得有必要在Java中对字符串调用clone,因为: Java中的字符串是不可变的。可以在方法/类之间自由地共享它们 已经存在一个构造函数newstring(String),它的作用类似于复制构造函数,与您的clone()调用相当 Object.clone()受保护。

为什么这个简单的测试程序不起作用?

clone
是对象类的一种方法。对于“可克隆”的类,它应该实现marker
cloneable
接口<代码>字符串类不实现此接口,也不重写克隆方法,因此出现错误

我希望上面的代码片段是出于教育目的,因为您永远不会觉得有必要在Java中对字符串调用
clone
,因为:

  • Java中的字符串是不可变的。可以在方法/类之间自由地共享它们
  • 已经存在一个构造函数
    newstring(String)
    ,它的作用类似于复制构造函数,与您的
    clone()
    调用相当
  • Object.clone()
    受保护。这是一个很难使用的API

    通常,当通过扩大方法的可见性来扩展对象时,会公开
    clone()

    任何字符串上的克隆都没有什么意义,因为它既是
    最终的
    也是不可变的

    复制字符串是有原因的;这可以通过以下方式实现:

    import java.util.*;
    import java.lang.*;
    
    public class Test{
        public static void main(String[] argv){
            String s1="abc";
            String s2=(String) s1.clone();
        }    
    }
    

    是对象类上受保护的方法。如果您希望类是可克隆的,一般的模式是实现并公开该方法。

    它显然无法编译<代码>对象。克隆具有受保护的访问权限

    除了在类本身中可访问和在 同一个包…,受保护的成员也可以从 通过至少与相同类型的对象引用初始化 班级

    对于“可克隆”的类,它应该实现标记可克隆接口。String类不实现此接口,也不重写clone方法,因此出现错误

    受保护对象克隆()抛出CloneNotSupportedException创建并返回此对象的精确副本(克隆)

    Java中的字符串是不可变的。可以在方法/类之间自由地共享它们 已经存在一个构造函数new String(String),它的作用类似于复制构造函数,并且与clone()调用相当

    通常,当通过扩大方法的可见性来扩展对象时,会公开clone()


    任何字符串上的克隆都没有什么意义,因为它既是最终的也是不可变的。

    它以什么方式不起作用?线程“main”中的异常java.lang.RuntimeException:不可编译的源代码-未报告的异常java.lang.CloneNotSupportedException;必须捕获或声明在test.test.main(test.java:9)中抛出java结果:1有效的java项11:明智地覆盖克隆。(或者更好,只需使用复制构造函数等,而不是克隆。)它不会编译
    clone
    Cloneable
    中不是一个公共方法,所以实现它并不重要。很少需要复制字符串,而且您还没有解释为什么需要复制字符串。
    String s1 = ...;
    String s2 = new String(s1)