Java clone方法的使用
2024-08-31 13:29:35
浅克隆
Person p2 = (Person) p1.clone();
clone()
方法使用后得到p2
,p2
和p1
指向不同的地址。但是如果p1
中的属性是引用类型,那么不再对这个引用类型进行复制,而止于这个引用。
clone类
Ojbect
类中clone()
是protected
修饰,因此需要扩权。在Person
中重写这个方法(并抛出异常)。同时需要实现cloneable
接口,否则将报错。
代码
Person类
public class Person implements Cloneable{
private String name;
private int age;
private Addr addr;
public String getName() {
System.out.println(this+this.name);
return name;
}
public String getAddr() {
System.out.println(this+addr.city);
return addr.city;
}
public void setAddr(String city) {
this.addr.city = city;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
其中Person中的地址,是Addr类型:
public class Addr {
public String city;
}
Test类:
public class Test1 {
public static void main(String[] args) {
Person p1 = new Person();
p1.setAge(11);
p1.setName("xiaoming");
p1.setAddr("南京");
p1.getName();
p1.getAddr();
Person p2=(Person) p1.clone();
p2.getName();
p2.getAddr();
}
}
得到结果,p1
和p2
指定不同的区域,但是他们的addr
指向同一区域。
最新文章
- 一个在线jpg png转ICO的网站
- clip:rect矩形剪裁
- EmberJs之数组绑定@each&;[]
- Docker - Docker基础命令及使用
- OC笔记
- [SharpZipLib 未能加载文件或程序集] 解决方法
- codeforces C. Bits(数学题+或运算)
- 按键的使用方法(三)-------verilog
- MongoDB 学习笔记(二) 高级查询
- 关于c#中的Timer控件的简单用法
- PostgreSQL的initdb 源代码分析之五
- 乐在其中设计模式(C#) - 享元模式(Flyweight Pattern)
- Spring MVC整合DWR
- (十分钟视频教程)nodejs基础实战教程3:react服务端渲染入门篇
- C# datatable 重新排序
- 【EF6学习笔记】(十二)EF高级应用场景
- Qt::WindowFlags枚举类型解析
- Python3基础 iter+next 进行迭代时超出了范围 产生StopIteration异常
- [转] Java 基础
- 【Python项目】爬取新浪微博个人用户信息页