gpt4 book ai didi

java - 在未实现 Cloneable 接口(interface)的对象上调用 clone() 方法时不会抛出 CloneNotSupportedException

转载 作者:行者123 更新时间:2023-12-04 02:28:13 25 4
gpt4 key购买 nike

我最近开始 Java 编程,根据 Java SE API 文档,实现了 Cloneable 接口(interface)以指示允许对该类进行克隆操作。如果不是,则抛出 CloneNotSupportedException。然而,在一次练习中,我设法运行了一个程序,该程序克隆了一个未实现 Cloneable 接口(interface)的类,并且没有抛出任何异常。我需要知道为什么没有抛出异常。我在 Windows 7 上使用 JDK 6 update 45 和最新的 Eclipse IDE。代码如下:

package com.warren.project.first;

public class PracticeClass {

//explicit initialisation of PracticeClass Instance Variables
private int fieldOne=1;
private int fieldTwo=2;
private int fieldThree=3;

//setters and getters for instance fields of PracticeClass
public void setField1(int field1){
this.fieldOne=field1;
}

public void setField2(int field2){
this.fieldTwo=field2;
}

public void setField3(int field3){
this.fieldThree=field3;
}

public int getField1(){
return this.fieldOne;
}

public int getField2(){
return this.fieldTwo;
}

public int getField3(){
return this.fieldThree;
}


//This method clones the PracticeClass's instances and returns the clone
@Override
public PracticeClass clone(){
PracticeClass practiceClass= this;
return practiceClass;
}

}


package com.warren.project.first;

public class AppMain {

public static void main(String[] args) {
//Create PracticeClass Object
PracticeClass pc1=new PracticeClass();

//Set its instance fields using setters
pc1.setField1(111);
pc1.setField2(222);
pc1.setField3(333);

//Display Values to screen
System.out.println(pc1.getField1()+" "+pc1.getField2()+" "+pc1.getField3());

//Create clone of PracticeClass object
PracticeClass pc2=pc1.clone();

//Print values from PracticeClass clone object
System.out.println(pc2.getField1()+" "+pc2.getField2()+" "+pc2.getField3());
}

}

这段代码执行成功,没有抛出任何异常。为什么不抛出 CloneNotSupportedException

最佳答案

为了抛出 CloneNotSupportedException,您必须在您自己的 clone() 方法中调用 super.clone()。此方法将验证您的类是否实现了 Cloneable

关于java - 在未实现 Cloneable 接口(interface)的对象上调用 clone() 方法时不会抛出 CloneNotSupportedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17826521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com