java中的克隆方法的使用(三类 浅、深、完美克隆 )

来源:互联网 发布:新网互联域名证书下载 编辑:程序博客网 时间:2024/06/09 23:46
Java代码 复制代码 收藏代码
  1. package clone; //本例子阐释了clone的魅力,影子克隆
  2. class UnCloneA {
  3. private int i;
  4. public UnCloneA(int ii) {
  5. i = ii;
  6. }
  7. public void doublevalue() {
  8. i *= 2;
  9. }
  10. public String toString() {
  11. return Integer.toString(i); //把整数转换为字符串
  12. }
  13. }
  14. class CloneB implements Cloneable{//实现了克隆接口 Cloneable
  15. public int aInt;
  16. public UnCloneAA unCA = new UnCloneAA(111);
  17. public Object clone(){ //重写clone方法
  18. CloneB o = null;
  19. try{
  20. o = (CloneB)super.clone();
  21. }catch(CloneNotSupportedException e){
  22. e.printStackTrace();
  23. }
  24. return o;
  25. }
  26. }
  27. public class CloneMain影子克隆 {
  28. public static void main(String[] a){
  29. CloneB b1 = new CloneB();
  30. b1.aInt = 11;
  31. System.out.println("before clone,b1.aInt = "+ b1.aInt);
  32. System.out.println("before clone,b1.unCA = "+ b1.unCA);
  33. CloneB b2 = (CloneB)b1.clone(); //b1的克隆
  34. b2.aInt = 22;
  35. b2.unCA.doublevalue();
  36. System.out.println("=================================");
  37. System.out.println("after clone,b1.aInt = "+ b1.aInt);
  38. System.out.println("after clone,b1.unCA = "+ b1.unCA);//已经被改变了
  39. System.out.println("=================================");
  40. System.out.println("after clone,b2.aInt = "+ b2.aInt);
  41. System.out.println("after clone,b2.unCA = "+ b2.unCA);
  42. }
  43. }
  44. /** RUN RESULT:
  45. * before clone,b1.aInt = 11 before clone,b1.unCA = 111
  46. * =================================
  47. * after clone,b1.aInt = 11 after clone,b1.unCA = 222
  48. * =================================
  49. * after clone,b2.aInt = 22 after clone,b2.unCA = 222 */
  50. package clone;
  51. class UnCloneAA implements Cloneable{
  52. private int i;
  53. public UnCloneAA(int ii) {
  54. i = ii;
  55. }
  56. public void doublevalue() {
  57. i *= 2;
  58. }
  59. public String toString() {
  60. return Integer.toString(i);
  61. }
  62. public Object clone(){ //深度克隆这个类也要重写这个方法
  63. UnCloneAA o = null;
  64. try{
  65. o = (UnCloneAA)super.clone();
  66. }catch(CloneNotSupportedException e){
  67. e.printStackTrace();
  68. }
  69. return o;
  70. }
  71. }    
原创粉丝点击