Java中 对象克隆实例
2015-11-14 13:31
543 查看
import java.util.*; public class CloneTest { public static void main(String[] args) { // TODO Auto-generated method stub try { Employee original = new Employee("John Q,publi c", 5000); original.setHireDay(2000, 1, 1); Employee copy = original.clone(); copy.raiseSalary(10); copy.setHireDay(2002, 12, 31); System.out.println("original=" + original); System.out.println("copy+" + copy); } catch (CloneNotSupportedException e) { e.printStackTrace(); } } } //Cloneable 仅作为 clone 接口的标记,表明类设计者知道要进行克隆处理 //标记接口 class Employee implements Cloneable{ public Employee(String n, double s) { name = n; salary = s; hireDay = new Date(); } public Employee clone() throws CloneNotSupportedException { //使用Object.clone方法时如果对象中的所有数据域都属于数值类型和基本类型,则所有拷贝没问题 //但如果在对象中包含了子对象的引用,拷贝结果会使得两个域引用同一个子对象,因此原始对象和克隆对象共享这些信息 Employee cloned = (Employee) super.clone(); //为了实现深拷贝,鼻血克隆所有肯变的实例域 cloned.hireDay = (Date) hireDay.clone(); return cloned; } public void setHireDay(int year, int month, int day) { Date newHireDay = new GregorianCalendar(year, month - 1, day).getTime(); hireDay.setTime(newHireDay.getTime()); } public void raiseSalary(double byPercent) { double raise = salary * byPercent / 100; salary += raise; } public String toString() { return "Employee[name=" + name + ",salary=" + salary + ",hireDay=" + hireDay + "]"; } private String name; private double salary; private Date hireDay; }
public interface Cloneable此类实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。
如果在没有实现 Cloneable 接口的实例上调用 Object 的 clone 方法,则会导致抛出 CloneNotSupportedException 异常
相关文章推荐
- JDK和JVM
- 自己写的一个转换数字为中文大写形式的工具类
- Java基础之注解(annotation)
- 关于xml自定义颜色在xml布局的调用和java类中的调用
- Java泛型基础知识
- Java Web性能优化之一:减少DAO层的调用次数
- java按值传递理解
- [CareerCup] 14.4 Templates Java模板
- Java入门之数据类型以及变量的定义
- Java与Mysql开发中的特殊字符(包括Emoji)
- java.lang.IllegalArgumentException: Service Intent must be explicit异常说明
- java日志组件介绍(common-logging,log4j,slf4j,logback)
- java中Random()详解
- 解决spring、springMVC重复扫描导致事务失效的问题
- JavaFX透明窗口
- 如何给Spring MVC的action加上事务
- 利用java反射动态调整数组长度
- Spring中ServletContextAware接口使用理解
- Spring实例化Bean的三种方式及Bean的类型
- 在Eclipse中查看JDK类库的源代码