关于Clone的问题,小白求解答

qqxxcc123 2014-07-03 11:21:05
1. Cloneable这个接口里面什么方法也没有啊?那我不实现Cloneable这个接口,直接写clone方法:
public class A {
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Object clone() {
A o = null;
try {
o = (A) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
}

然后在main中这样:
A a1 = new A();
A a2 = new A();
a1.setName("a1");
a2 = (A) a1.clone();
System.out.println(a1);
System.out.println(a2);
a2.setName("a2");
System.out.println("a1 name: " + a1.getName());
System.out.println("a2 name: " + a2.getName());

为什么会抛异常?a2是null,为什么A类实现了Cloneable接口后就好了?
2.Object 为什么不能调clone()方法?
3.这个和clone()无关,我在跑方法的时候发现了一个问题,就上面的方法,为什么a1的地址几乎一直是A@c17164,偶尔这个地址会变,但90%都是A@c17164。不是new了么?为什么还是这个地址?是否和java的垃圾回收有关系?
...全文
372 18 打赏 收藏 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_17240387 2014-07-04
  • 打赏
  • 举报
回复
hedley 2014-07-03
  • 打赏
  • 举报
回复
Effective Java,Item 11(第二版,54页)中专门说的这个问题 这是java中最反人类的设计,可能没有之一。具体的细节楼主可以去翻阅一下,给你贴出来最后的结论 Given all of the problems associated with Cloneable, it’s safe to say that other interfaces should not extend it, and that classes designed for inheritance (Item 17) should not implement it. Because of its many shortcomings, some expert programmers simply choose never to override the clone method and never to invoke it except, perhaps, to copy arrays. If you design a class for inheritance, be aware that if you choose not to provide a well-behaved protected clone method, it will be impossible for subclasses to implement Cloneable.
chengxu2011 2014-07-03
  • 打赏
  • 举报
回复
Object类没有实现Cloneable接口 当然不能克隆 java中的类只要实现了Cloneable接口就能克隆
qqxxcc123 2014-07-03
  • 打赏
  • 举报
回复
引用 1 楼 chengxu2011 的回复:
Cloneable是一个标识性接口 实现了这个接口等于告诉了虚拟机我可以被克隆 ,如果没有实现是不可以被克隆的 标识行接口还有 Serializable 接口 lz可以百度下java标识性接口
还有,Java中的类都不能被clone么?
qqxxcc123 2014-07-03
  • 打赏
  • 举报
回复
引用 1 楼 chengxu2011 的回复:
Cloneable是一个标识性接口 实现了这个接口等于告诉了虚拟机我可以被克隆 ,如果没有实现是不可以被克隆的 标识行接口还有 Serializable 接口 lz可以百度下java标识性接口
恩 好的 那Object类为什么不能clone呢?比如

Object o = new Object();
Object o2 = o.clone();
chengxu2011 2014-07-03
  • 打赏
  • 举报
回复
Cloneable是一个标识性接口 实现了这个接口等于告诉了虚拟机我可以被克隆 ,如果没有实现是不可以被克隆的 标识行接口还有 Serializable 接口 lz可以百度下java标识性接口
业余草 2014-07-03
  • 打赏
  • 举报
回复
什么是水区??????求解
qqxxcc123 2014-07-03
  • 打赏
  • 举报
回复
引用 15 楼 longtian1213 的回复:
引用 14 楼 u012335961 的回复:
- - 子类重新父类的方法,可以增强可见性,不能减弱 如果反过来,父类是public,你不能重写成protected
不好意思 突然脑子一抽搞反了
S117 2014-07-03
  • 打赏
  • 举报
回复
引用 12 楼 qqxxcc123 的回复:
引用 11 楼 longtian1213 的回复:
克隆是object类的方法,你实现Cloneable只是告诉虚拟机这个类可以被克隆,你不实现Cloneable借口调用clone方法会报错吧
恩 不实现会报错 我的问题是自己重写了Object中的clone方法 额 貌似又不是重写 因为Object中的clone方法是protected的。但是为什么我写成public没报错?
重写只要不降低访问权限就没问题!如果你变成private的就不行了!
hedley 2014-07-03
  • 打赏
  • 举报
回复
- - 子类重新父类的方法,可以增强可见性,不能减弱 如果反过来,父类是public,你不能重写成protected
qqxxcc123 2014-07-03
  • 打赏
  • 举报
回复
技术区人好少啊
qqxxcc123 2014-07-03
  • 打赏
  • 举报
回复
引用 11 楼 longtian1213 的回复:
克隆是object类的方法,你实现Cloneable只是告诉虚拟机这个类可以被克隆,你不实现Cloneable借口调用clone方法会报错吧
恩 不实现会报错 我的问题是自己重写了Object中的clone方法 额 貌似又不是重写 因为Object中的clone方法是protected的。但是为什么我写成public没报错?
S117 2014-07-03
  • 打赏
  • 举报
回复
克隆是object类的方法,你实现Cloneable只是告诉虚拟机这个类可以被克隆,你不实现Cloneable借口调用clone方法会报错吧
hedley 2014-07-03
  • 打赏
  • 举报
回复
地址那个大概说个意思吧 大家都知道java new一个对象都是放在堆内存上的,Object分配内存地址的算法是JVM内部实现的,直接print一个对象出来可以去看Object的toString方法,
    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
hashCode方法返回了这个内存地址的一个标记,然后转换为16进制打印。 native的hashCode方法屏蔽了这些实现的细节,但我们可以设想在同样的计算机环境Context下,这个分配的内存地址应该是相对稳定的(因为特定算法封装的嘛),所以你在重复的操作中,可以认为计算机的环境是相对稳定的,从而可以得到一个相对稳定的结果。 偶尔这个地址有变化很正常啊,谁知道你电脑里跑了多少线程,在哪个时间点污染了这个Context
qqxxcc123 2014-07-03
  • 打赏
  • 举报
回复
引用 8 楼 xmt1139057136 的回复:
我没分了,求给分
水区要分去
qqxxcc123 2014-07-03
  • 打赏
  • 举报
回复
引用 4 楼 chengxu2011 的回复:
Object类没有实现Cloneable接口 当然不能克隆 java中的类只要实现了Cloneable接口就能克隆
那地址那个问题能给解答下么
qqxxcc123 2014-07-03
  • 打赏
  • 举报
回复
引用 5 楼 u012335961 的回复:
Effective Java,Item 11(第二版,54页)中专门说的这个问题 这是java中最反人类的设计,可能没有之一。具体的细节楼主可以去翻阅一下,给你贴出来最后的结论 Given all of the problems associated with Cloneable, it’s safe to say that other interfaces should not extend it, and that classes designed for inheritance (Item 17) should not implement it. Because of its many shortcomings, some expert programmers simply choose never to override the clone method and never to invoke it except, perhaps, to copy arrays. If you design a class for inheritance, be aware that if you choose not to provide a well-behaved protected clone method, it will be impossible for subclasses to implement Cloneable.
给跪了 你好流弊啊
大气污染是影响公众健康与生态环境的重要问题,精准的空气质量时空预测与污染源贡献度量化是精准治污的关键支撑。针对现有研究多源融合不充分、时空关联刻画不足、预测与源解析割裂三方面缺陷,本文设计实现了城市空气质量时空预测与污染源贡献度分析系统,融合监测、气象、工业排放与交通四类数据,构建基于时空注意力的LSTM(STAM-LSTM)预测模型与基于正定矩阵因子分解(PMF)的源解析模型,形成数据融合-特征工程-预测-源解析-可视化闭环。 系统实现四类数据时空对齐与融合,构建时序与空间邻域特征,以普通克里金插值生成1km网格浓度场;STAM-LSTM引入时空注意力自适应学习站点间污染传输时变权重,以72小时输入预测未来24小时逐小时PM2.5浓度;PMF识别交通、工业、燃煤、扬尘与二次生成五个源因子,量化各源全年贡献度并分析时空演变。 实验表明:STAM-LSTM预测RMSE 24.6、MAE 17.8、R² 0.88,相对LSTM基线(30.2)提升18.5%;普通克里金插值误差8.9,优于反距离加权(11.4);源解析显示交通源28.4%、工业源23.1%、燃煤源19.6%为主要贡献源,冬季燃煤源升至27.3%、早高峰交通源达34.8%,下风向工业源贡献高出上风向8~12个百分点;减排情景显示交通源减排20%可使年均PM2.5下降5.7%,与源贡献度排序一致。 系统按五模块14组件实现,功能测试16项用例全部通过,为大气污染预警、源管控与减排政策制定提供了决策依据。 【课程报告内容】 摘要 第1章 绪论 第2章 相关技术与理论 第3章 系统需求分析 第4章 系统总体设计 第5章 系统详细设计与实现 第6章 系统测试与分析 第7章 总结与展望 参考文献 附件-实现指南
基于iTransformer-BiGRU-KAN多模型融合的滚动轴承剩余寿命预测研究(Python代码实现)内容概要:本文提出了一种基于iTransformer-BiGRU-KAN多模型融合的滚动轴承剩余寿命预测方法,旨在通过结合多种先进深度学习模型的优势,提升在复杂工况下的预测精度与鲁棒性。该方法利用iTransformer捕捉长期时间序列中的全局依赖关系,通过BiGRU模型提取双向时序特征,最后引入KAN(Kernel Attention Network)增强非线性映射与关键特征的自适应加权能力,实现对轴承退化过程的精准建模。文中详细介绍了模型架构设计、训练流程及在公开数据集上的实验验证,结果表明该融合模型相比单一模型在预测精度和稳定性方面均有显著提升。; 适合人群:具备一定机器学习与深度学习基础,从事设备故障诊断、工业大数据分析或智能运维相关领域的研究人员及工程技术人员,尤其适合研究生及以上学历或有相关项目经验的专业人员。; 使用场景及目标:①应用于工业设备状态监测与预测性维护系统中,实现对滚动轴承等关键部件剩余寿命的精准预测;②为复杂时间序列回归任务提供多模型融合的设计思路与技术参考;③推动深度学习在智能制造与工业物联网领域的落地应用。; 阅读建议:建议读者结合Python代码实现部分,深入理解各子模型的接口设计与融合逻辑,重点关注特征融合机制与注意力权重的可视化分析,以便在实际项目中灵活调整与优化模型结构。
几何旋转和天线校准模式对GNSS相位缠绕的组合效应(Matlab代码实现)内容概要:本文研究了几何旋转和天线校准模式对全球导航卫星系统(GNSS)相位缠绕的组合效应,并提供了基于Matlab的代码实现方案。相位缠绕是GNSS高精度定位中的重要误差源,受卫星与接收机相对几何关系及天线相位中心变化的共同影响。文章通过建模分析几何旋转与天线校准参数对相位缠绕的影响机制,探讨二者耦合作用下的修正方法,旨在提升GNSS数据处理的精度与可靠性。研究涵盖了理论建模、算法实现与仿真实验,结合Matlab工具进行数值模拟与结果可视化,验证了所提方法的有效性。; 适合人群:具备一定GNSS基础知识和Matlab编程能力的科研人员、研究生及从事高精度定位相关工作的技术人员。; 使用场景及目标:①用于GNSS高精度数据处理中相位缠绕误差的精确建模与修正;②支持地壳形变监测、精密授时、卫星定轨等对定位精度要求较高的应用场景;③为相关算法开发与教学研究提供可复现的代码实例。; 阅读建议:建议读者结合GNSS误差处理的相关理论,边运行代码边理解算法细节,重点关注几何旋转模型与天线校准参数的集成方式,并可通过修改参数进行敏感性分析以加深理解。

62,620

社区成员

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

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