java clone()

作者:原创时间:2022-03-25
文档

java clone()是什么,让我们一起了解一下?

clone()属于clone中的一种,有浅克隆和深克隆。在Java中,clone方法被对象调用,所以会复制对象,所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。

要想了解clone(),首先要知道clone方法是什么?

clone方法是返回与当前对象的一个副本对象,可以通过操作副本对象而不影响当前对象。使用clone方法需要实现Cloneable接口,并重写Object方法中的clone方法。

需要注意的是在clone在Object中是project修饰符。因为所有类都是Object的子类,所以如果不实现clone方法,在类中可以直接使用父类的clone方法,但是其对象在别的类中不能调用clone方法。所以必须重写clone方法。

那clone()在java应用中扮演者什么角色?(以浅克隆为例)

1、被复制的类需要实现Clonenable接口(不实现的话在调用clone方法会抛出CloneNotSupportedException异常), 该接口为标记接口(不含任何方法)。

2、覆盖clone()方法,访问修饰符设为public。方法中调用super.clone()方法得到需要的复制对象。

具体操作代码如下:

class Student implements Cloneable{  
    private int number;  
  
    public int getNumber() {  
        return number;  
    }  
  
    public void setNumber(int number) {  
        this.number = number;  
    }  
      
    @Override  
    public Object clone() {  
        Student stu = null;  
        try{  
            stu = (Student)super.clone();  
        }catch(CloneNotSupportedException e) {  
            e.printStackTrace();  
        }  
        return stu;  
    }  
}  
public class Test {  
    public static void main(String args[]) {  
        Student stu1 = new Student();  
        stu1.setNumber(12345);  
        Student stu2 = (Student)stu1.clone();  
          
        System.out.println("学生1:" + stu1.getNumber());  
        System.out.println("学生2:" + stu2.getNumber());  
          
        stu2.setNumber(54321);  
      
        System.out.println("学生1:" + stu1.getNumber());  
        System.out.println("学生2:" + stu2.getNumber());  
    }  
}

输出结果:

学生1:12345  
学生2:12345  
学生1:12345  
学生2:54321

以上就是小编今天的分享了,希望可以帮助到大家。

显示全文
java collect java collections java color java combobox java comet 山楂干泡水最佳搭配 java commandline java comparable接口 java compiler java config java console java console.log 复活节的由来 java const java consumer接口 统一和康师傅是哪国的 怎么删掉word中的空白页 微信笔记在哪里编辑 椰子怎么挑 蟑螂最怕三种克星 java clob java classloader java class.forname java class java cipher java charset java charsequence java charat java channel iPad怎么重启 java cglib 平板如何录屏 java ceiling java callback java calendar获取当前时间 苹果13怎么开机 java calculate java byte取值范围 java bytebuffer java bundle