帮我看看这个小代码为什么出错,关于clone

sure2003 2009-02-16 08:51:58
public class T1
{
public static void main(String[] args)
{
A aa = new A();
A bb =(A) aa.clone();
}

}
class A
{
public Object clone() {
A o = null;
try {
o = (A) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
}
...全文
90 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
云上飞翔 2009-02-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 sure2003 的帖子:]
Java codepublic class T1
{
public static void main(String[] args)
{
A aa = new A();
A bb =(A) aa.clone();
}

}
class A
{
public Object clone() {
A o = null;
try {
o = (A) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
}
[/Quote]
答:
1)类A必须要implements Cloneable.
2)类A中clone()代码可如下写:

public Object clone() {
return super.clone();
}
3)为什么要这样做?关键是要了解:super.clone()做了什么.
它做了:http://topic.csdn.net/u/20090216/22/b91ae1df-ec34-405e-8faf-f529b6b6405b.html

gesanri 2009-02-17
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sure2003 的回复:]
什么地方。
[/Quote]
。。。 就是要实现Cloneable接口啊,这是规定的,java里的Cloneable是标识接口,表面上什么都不做,但是是由jvm负责工作的,我们只需要声明implement了这个接口,剩下的工作自然会由jvm负责的(但关键代码还是要有的),如果不声明,jvm就认为这些类不符合相关的要求,就会报异常
sure2003 2009-02-17
  • 打赏
  • 举报
回复
什么地方。
Roy_MrLi208 2009-02-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 Roy_MrLi208 的回复:]
引用 3 楼 gesanri 的回复:
引用 1 楼 thc1987 的回复:
class A implements Cloneable

正确,如果在没有实现 Cloneable 接口的实例上调用 Object 的 clone 方法,则会导致抛出 CloneNotSupportedException 异常。

按照惯例,实现此接口的类应该使用公共方法重写 Object.clone(它是受保护的)。

貌似这样改了之后还是不对,目前我还不知道错误在哪里
[/Quote]
哎,楼上的是正解,是我的问题,错误是出现在实现那个接口的地方了。
Roy_MrLi208 2009-02-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 gesanri 的回复:]
引用 1 楼 thc1987 的回复:
class A implements Cloneable

正确,如果在没有实现 Cloneable 接口的实例上调用 Object 的 clone 方法,则会导致抛出 CloneNotSupportedException 异常。

按照惯例,实现此接口的类应该使用公共方法重写 Object.clone(它是受保护的)。
[/Quote]
貌似这样改了之后还是不对,目前我还不知道错误在哪里
狂浪吻血 2009-02-16
  • 打赏
  • 举报
回复
o = (A) super.clone();
super.clone()调用父类的方法,但是你的父类在哪呀。
所以要加上 class Aimplements Cloneable

xgj1000 2009-02-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 thc1987 的回复:]
class Aimplements Cloneable
[/Quote]


同意。
haha017 2009-02-16
  • 打赏
  • 举报
回复
是没继承
haha017 2009-02-16
  • 打赏
  • 举报
回复
是没又抛异常的问题吗》?
gesanri 2009-02-16
  • 打赏
  • 举报
回复
Object 类本身不实现接口 Cloneable,所以在类为 Object 的对象上调用 clone 方法将会导致在运行时抛出异常。

gesanri 2009-02-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 thc1987 的回复:]
class A implements Cloneable
[/Quote]
正确,如果在没有实现 Cloneable 接口的实例上调用 Object 的 clone 方法,则会导致抛出 CloneNotSupportedException 异常。

按照惯例,实现此接口的类应该使用公共方法重写 Object.clone(它是受保护的)。
mike_24 2009-02-16
  • 打赏
  • 举报
回复
o = (A) super.clone();

super.clone()调用父类的方法,但是你的父类在哪呀。

猿敲月下码 2009-02-16
  • 打赏
  • 举报
回复
class A implements Cloneable
课程亮点: 从无到有、手把手教你编写CA/TA,快速上手,快速部署项目标准的开发,开发一套CA/TA,可部署到不同的TEE OS上。受益人群: 汽车行业主机厂、tier1、SOC芯片公司的安全部门同事手机行业,ODM/OEM、SOC芯片公司的安全部门同事学生课程收益: 熟悉CA/TA开发的步骤和流程。快速上手,快速搭建自己开发环境。熟悉各类TEE、基于各类TEE的CA/TA开发步骤。搭建自己的安全平台熟悉各类常规安全应用熟悉tee密码学算法、tee存储  课程大纲  Hello大家好,上架一门新的视频课程,课程主要包含两大部分,第一部分搭建环境,第二部分从无到有的编写代码。带领大家手把手编写。 具体大纲如下:(1)qemu v8环境搭建- 搭建一个qemu_v8的环境,用于跑BL1-->BL2-->BL31-->BL32-->BL33-->Linux kernel;- 直接使用已搭建好的镜像- 工程使用以及说明(2)CA/TA开发编程实践从无到有编写代码,已完成的大纲如下:- 2秒钟快速编写(clone)一组CA/TA程序- 安全存储详解以及代码示例- CA到TA双向传参数的四种方式(value、temref、memref),区别?优缺点?- 对称密码学算法aes的使用,CBC/ECB/CTR/XTS分组密码的使用,加密解密,pending等- aeskey的操作,如何随机生成aeskey(TEE_GenerateKey),objectHandle和aesbuf有什么区别? 如何将handle- 认证加密算法,如aes-GCM的使用- 非对称密码学算法RSA的使用,包括加密、解密、签名、验签- RSA key的处理,包含如何生成RSA KEY,rsakey object如何转换成可见的数组,如何转换der,如何转换pem,反向又如何转换- ECC/ECDSA的使用- 国密sm2 sm3 sm4的使用.  其中sm4包含加密、解密、签名、验签等- encode和decode的实现- TA属性的定制以及API的使用- 数字摘要  SHA1 sha224 sha256 sha384 sha512等- 消息认证码 HMAC- TEE侧获取时间的函数有哪些(TEE_GetSystemTime、TEE_GetREETime),有什么区别?分别是怎样使用的? - 如何获取随机数(TEE_GenerateRandom)?- TA调用TA的示例和演示后续可能继续补充的如下(也欢迎大家提需求):- multi-session和multi-instance的使用- CA LOGIN flag的使用 

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧