一个<<corejava>>的例子
---------------------------
import java.util.*;public class CloneTest
{
public static void main(String[] args)
{
Employee original = new Employee("John Q. Public", 50000);
original.setPayDay(2000, 1, 1);
Employee copy = (Employee)original.clone();
copy.raiseSalary(10);
copy.addPayDay(14);
System.out.println("original=" + original);
System.out.println("copy=" + copy);
}
}class Employee implements Cloneable
{
public Employee(String n, double s)
{
name = n;
salary = s;
} public Object clone()
{
try
{
// call Object.clone()
Employee cloned = (Employee)super.clone(); // clone mutable fields
cloned.payDay = (GregorianCalendar)payDay.clone();
return cloned;
}
catch (CloneNotSupportedException e) { return null; }
} public void setPayDay(int year, int month, int day)
{
payDay = new GregorianCalendar(year, month - 1, day);
} public void addPayDay(int days)
{
payDay.add(Calendar.DAY_OF_MONTH, days);
} public Date getPayDay()
{
return payDay.getTime();
} public void raiseSalary(double byPercent)
{
double raise = salary * byPercent / 100;
salary += raise;
} public String toString()
{
return "Employee[name=" + name
+ ",salary=" + salary
+ ",payDay=" + getPayDay()
+ "]";
} private String name;
private double salary;
private GregorianCalendar payDay;
}
---------------------------
import java.util.*;public class CloneTest
{
public static void main(String[] args)
{
Employee original = new Employee("John Q. Public", 50000);
original.setPayDay(2000, 1, 1);
Employee copy = (Employee)original.clone();
copy.raiseSalary(10);
copy.addPayDay(14);
System.out.println("original=" + original);
System.out.println("copy=" + copy);
}
}class Employee implements Cloneable
{
public Employee(String n, double s)
{
name = n;
salary = s;
} public Object clone()
{
try
{
// call Object.clone()
Employee cloned = (Employee)super.clone(); // clone mutable fields
cloned.payDay = (GregorianCalendar)payDay.clone();
return cloned;
}
catch (CloneNotSupportedException e) { return null; }
} public void setPayDay(int year, int month, int day)
{
payDay = new GregorianCalendar(year, month - 1, day);
} public void addPayDay(int days)
{
payDay.add(Calendar.DAY_OF_MONTH, days);
} public Date getPayDay()
{
return payDay.getTime();
} public void raiseSalary(double byPercent)
{
double raise = salary * byPercent / 100;
salary += raise;
} public String toString()
{
return "Employee[name=" + name
+ ",salary=" + salary
+ ",payDay=" + getPayDay()
+ "]";
} private String name;
private double salary;
private GregorianCalendar payDay;
}
解决方案 »
- 求一个正则表达式
- hibernate 使用inner join出现问题
- 谁给个ObjectInputStream ObjectOutputStream 读写数据的例子
- 解析并修改html文件内容
- 用swt如何实现窗口的慢慢弹出效果,类似MSN收到消息时升起的提示框那样的
- 求代码,给定第几月的第几周,求该周的第一天及最后一天的日期
- [请教]arraylist中元素更新的问题
- 关于在jcreator中设置classpath(找不到自己package的class)
- 有个关于JTableHeader的例子,请大家帮忙研究一下,谢谢
- 紧急求助!!!
- 请问在redhat8 linux下怎样解决java中文显示
- 请教一个问题!!!在线等!!!
因此如果要不使用java的cloneable接口而自己实现一个clone方法
需要调用要clone类的构造函数,先生成一个对象
然后根据被clone对象的当前属性值,把这些属性值赋给新生成的那个对象
这样就得到了一个和原有对象一模一样的新对象
如果这个被clone对象里含有其他对象的引用,同样需要调用这些对象的构造函数,直到所有的对象都调用了自己的构造函数并赋了被clone对象的初值
实际上 我并不是想问如何实现那个接口,我是想问虚拟机内部的 是怎么实现的 嘿嘿.
http://www.blueidea.com/bbs/NewsDetail.asp?id=1261679
看 我在脚本中实现的. :).