Java Cloneable抛出CloneNotSupportedException
当我试图编译它时(在第4行,不是主代码),我得到了Java Cloneable抛出CloneNotSupportedException,java,clone,cloneable,Java,Clone,Cloneable,当我试图编译它时(在第4行,不是主代码),我得到了错误:未报告的异常CloneNotSupportedException。据我所知,实现Cloneable的整个目的就是为了消除异常 有没有一种方法可以在不引发或捕获异常的情况下使用super.clone() 界面真的做了什么吗 有没有一种方法可以在不引发或捕获异常的情况下使用super.clone() 否,因为对象#clone()(使用super.clone()调用的方法)声明了它 界面真的做了什么吗 是的,但很少:如果不实现它,Object
错误:未报告的异常CloneNotSupportedException
。据我所知,实现Cloneable
的整个目的就是为了消除异常
- 有没有一种方法可以在不引发或捕获异常的情况下使用
super.clone()
- 界面真的做了什么吗
对象#clone()
(使用super.clone()
调用的方法)声明了它
界面真的做了什么吗
是的,但很少:如果不实现它,
Object#clone()
实际上会抛出声明的异常。您需要处理CloneNotSupportedException
异常,类名应该以大写字母开头
有没有一种方法可以使用super.clone()而不抛出或捕获
例外
如果您不想在clone
方法中处理异常,那么使用throws
关键字,它会将您的异常传播到被调用的方法
public class test implements Cloneable {
@Override
public test clone() {
return (test) super.clone();
}
public static void main(String[] args) {
new test().clone();
}
}
界面真的做了什么吗
类实现了Cloneable
接口,以向Object.clone()
方法指示该方法为该类的实例创建字段副本是合法的 实现Cloneable(标记接口:无方法)并不意味着摆脱异常。很简单,您告诉编译器,将来可以创建实现类对象的克隆。如果不自动重写克隆方法,它将调用对象类方法
如果您不想要此功能,您可以抛出相同的异常 您尚未处理main中出现的异常method@user2900314这应该是哪个异常?(new test().clone())将引发异常,异常为CloneNotSupportedException。@user2900314很有趣。那么,请解释一下
main
方法应该如何引发此异常。但首先请注意,唯一可以引发此异常的方法是super.clone()
而此调用位于try/catch
块内。@user2900314我已经编辑了我的代码,以前的代码也是正确的,因为它在clone方法中处理编译时
异常。如果在运行时出现任何异常,java将负责处理
public class Test implements Cloneable {
@Override
public Test clone() throws CloneNotSupportedException{
return (Test) super.clone();
}
public static void main(String[] args) {
try {
new Test().clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
public interface Cloneable