java 中clone()的使用方法
作者:皮蛋小粥 时间:2023-03-31 12:11:37
java 中clone()的使用方法
前言:
clone就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。那么在java语言中,有:
1 使用new操作符创建一个对象
2 使用clone方法复制一个对象
那么这两种方式有什么相同和不同呢? new操作符的本意是分配内存。程序执行到new操作符时, 首先去看new操作符后面的类型,因为知道了类型,才能知道要分配多大的内存空间。分配完内存之后,再调用构造函数,填充对象的各个域,这一步叫做对象的初始化,构造方法返回后,一个对象创建完毕,可以把他的引用(地址)发布到外部,在外部就可以使用这个引用操纵这个对象。而clone在第一步是和new相似的, 都是分配内存,调用clone方法时,分配的内存和源对象(即调用clone方法的对象)相同,然后再使用原对象中对应的各个域,填充新对象的域, 填充完成之后,clone方法返回,一个新的相同的对象被创建,同样可以把这个新对象的引用发布到外部。
package test;
public class Cloneoo {
public static void main(String[] args) {
test t=new test();
t.changeInt();
System.out.println(t);
try {
test t1=(test) t.clone();//创建
System.out.println(t1);
System.out.println(t1.getI());
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class test implements Cloneable{
private int i=0;
public void setI(int i) {
this.i = i;
}
public int getI() {
return i;
}
public void changeInt(){
this.i=1;
}
@Override
protected Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
test t=null;
t=(test) super.clone();
return t;
}
}
test.test@15db9742
test.test@6d06d69c
1
当类中包含一些对象的时候,我们就需要深复制,就是在对对象的复制之后,急着对对象中的非基本类型的属性也调用clone方法完成深复制。
clone方法执行的是浅拷贝
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
来源:http://blog.csdn.net/qq442270636/article/details/74009452
标签:java,clone()
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java常用函数式接口总结
2022-02-02 00:02:50
![](https://img.aspxhome.com/file/2023/8/68178_0s.png)
Spring Data JPA调用存储过程实例代码
2023-11-25 00:13:15
Java 集合概览(小结)
2023-11-08 02:50:37
![](https://img.aspxhome.com/file/2023/0/59000_0s.jpg)
JAVA算法起步之插入排序实例
2021-05-30 15:52:30
Spring中Bean扫描原理详情
2022-05-26 04:33:14
![](https://img.aspxhome.com/file/2023/8/75488_0s.png)
使用游长编码对字符串压缩 Run Length编码示例
2022-02-18 06:58:51
Java文件上传下载、邮件收发实例代码
2022-07-05 06:40:00
C#使用三层架构开发Winform的详细案例
2023-08-08 03:22:24
![](https://img.aspxhome.com/file/2023/9/67569_0s.jpg)
Android 实现视频字幕Subtitle和横竖屏切换示例
2023-02-06 07:29:37
![](https://img.aspxhome.com/file/2023/6/104646_0s.jpg)
Java函数式编程(八):字符串及方法引用
2022-05-02 22:28:23
Java实现分页的前台页面和后台代码
2021-07-22 17:10:04
![](https://img.aspxhome.com/file/2023/1/61381_0s.jpg)
JFinal使用ajaxfileupload实现图片上传及预览
2023-08-05 08:30:48
Android编程之文件读写操作与技巧总结【经典收藏】
2023-10-16 02:20:52
java的package和import机制原理解析
2021-07-20 08:19:05
![](https://img.aspxhome.com/file/2023/6/108436_0s.png)
java后台验证码生成的实现方法
2021-10-01 05:59:26
![](https://img.aspxhome.com/file/2023/3/125653_0s.png)
C#实现功能强大的中国农历日历操作类
2023-06-05 04:13:59
Java模拟计算机的整数乘积计算功能示例
2022-01-30 19:25:51
![](https://img.aspxhome.com/file/2023/8/75678_0s.png)
C#正则表达式实用大全(建议收藏!)
2023-08-29 20:23:58
![](https://img.aspxhome.com/file/2023/4/96404_0s.gif)
C++对string进行大小写转换操作方法
2023-11-03 04:32:59
![](https://img.aspxhome.com/file/2023/5/103105_0s.png)
深入解析Android中的RecyclerView组件
2021-12-02 13:07:32
![](https://img.aspxhome.com/file/2023/4/98654_0s.jpg)