• 2020.7.19 + 周报(2)


    一、今日学习内容      每周周报

       1、对象中的克隆

       (1)克隆的限制

             Java对于克隆(Clone)有一些限制, 主要表现如下:

             a.被克隆的类必须自己实现Cloneable接口,以指示Object.cloneO) 方法可以合法地对该类实例进行按字段复制。Cloneable接口实际上是个标识接口,没有任何接口                方法。

             b.实现Cloneable接口的类应该使用公共方法重写Object.clone (它是受保护的)。某个对象实现了此接口就克隆它是不可能的。

             c.在Java.lang Object类中克隆方法是这么定义的:

                    protected object clone()
                    throws CloneNotSupportedException

                   创建并返回此对象的个副本。 表明是一个受保护的方法, 同个包中可见。 按照惯例,返回的对象应该通过调用super.clone 获得。

         (2)浅层克隆和深层克隆            

                a.浅层克隆:主要复制基本对象的值。
                b.深层克隆:当类存在聚合关系时,克隆就必须考虑聚合对象的克隆。可以复制引用类型的字段。

              示例:浅层克隆

     1 public class CloneDemo (
     2 publte Btatie vold main(string[] args) throws CloneNotSupportedException {
     3      Person P =new Person("任我行",35);
     4      Person p2= (Person)p.clone();
     5      System. out.println("克隆前: "+p.getName()+", "+p.getAge());
     6      System. out.println("克隆后: "+p2 .getName()+", "+p2.getAge());
     7     if (p==p2)
     8       System.out.println("p和p2的地址相等!");
     9     else
    10        System.out. println("p和p2的地址不相等!!");
    11     }
    12 }
    13 /**
    14 *简单类克隆实现
    15 *要实现克隆,必须实现Cloneable接口,这是一个标识接口,没有接口方法
    16 *实现了Cloneable接口,以指示object.clone() 方法
    17 *可以合法地对该类实例进行按字段复制
    18 *按照惯例,实现此接口的类应该使用公共方法重写object.clone (它是受保护的)
    19 */
    20 class Person implements Cloneable{
    21     private String name;
    22     private  int age;
    23     public Person(String name,int age) {
    24        this.name=name;
    25        this .age=age;
    26     }
    27    public String getName() {
    28       return name;
    29     } 
    30    public void setName (String name){
    31        this.name=name;
    32    }
    33    public int getAge(){
    34       return age ;
    35     }
    36    public void setAge (int age) {
    37       this.age = age;
    38    }
    39    @Override
    40    protected objéct clone () throws CloneNotSupportedException{
    41    return super.clone();
    42    }
    43 }

             结果:

             示例:深层克隆

     public class CloneDemo (
     publte Btatie vold main(string[] args) throws CloneNotSupportedException {
          Person Per =new Person("令狐冲",20);
             P p=new P(per);
          P p2= (P)p.clone();
         System. out.println("克隆前: "+p.getPer().getName()+", 
            "+p.getPer().getAge());
          System. out.println("克隆后: "+p2.getPer().getName()+", 
             "+p2.getPer().getAge());
        if (p==p2)
          System.out.println("p和p2的地址相等!");
         else
            System.out. println("p和p2的地址不相等!!");
            if(p.getPer()==p2.getPer())
                 System.out.println("p中的person对象和p2中的person对象相等!"); 
            else
                 System.out.println("p中的person对象和p2中的person对象不相等!"); 
         }
     }
     
     class P implements Cloneable{
         Person per;
         public P(Person per) {
            this.per=per;
         }
        public Person gePer() {
           return per;
         } 
        public void setPer (Person per){
        }
        @Override
        protected objéct clone () throws CloneNotSupportedException{
            P  p=(P)super.clone();
                P.per=(Person)this.per.clone();
                return p;
       }
    }

          结果:

    二、遇到的问题

        对于克隆问题还没有理解的很明白

    三、明日计划

        继续学习第五章的内容

    收获:

         在过去一周学习了第四章和第五章的部分内容,学习了java中的类的相关知识:Java中的方法、构造方法、方法的调用、类的属性、包等,第五章的部分内容:类的继承,以及对象中的克隆。

    遇到的问题:

        java类的相关知识与c++中的类的相关知识有些不同,需要及时巩固熟练。

    下周计划:

       继续学习第五章、第六章的内容

  • 相关阅读:
    事务的传播特性及事务的并发
    Spring 配置文件配置事务
    Spring 配置文件AOP
    Spring 注解形式AOP
    Spring与Junit测试整合
    Spring基础知识1--环境搭建、bean创建、依赖注入、注解注入
    JDK动态代理与CGLIB动态代理
    java.lang.illegalArgumentException异常
    计算器
    list
  • 原文地址:https://www.cnblogs.com/wmdww/p/13341891.html
Copyright © 2020-2023  润新知