zoukankan      html  css  js  c++  java
  • Java clone方法的使用

    浅克隆

    Person p2 = (Person) p1.clone();
    

    clone()方法使用后得到p2p2p1指向不同的地址。但是如果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();
        }
    }
    

    得到结果,p1p2指定不同的区域,但是他们的addr指向同一区域。

  • 相关阅读:
    当使用vue的按键修饰符不起效果的时候怎么办?如@keyup.enter = '' ;
    Android 破解
    粒子跟随3
    关于国际化
    一些js及css样式
    Could not find method google() for arguments [] on repository container.
    redis
    window cmd 自动补全
    gradle中的 settings.gradle
    for(String s:list)的运行
  • 原文地址:https://www.cnblogs.com/heenhui2016/p/10964576.html
Copyright © 2011-2022 走看看