Java实现对象克隆Cloneable

 2022-09-16
原文地址:https://blog.csdn.net/booy123/article/details/105996399

创建对象过程: 创建一个对象首先会在栈中生成一个引用,对象第一次创建首先要被虚拟机类加载器加载到方法区,然后根据方法区字节计算对象大小,然后去堆中申请内存空间创建一个对象,成功后栈中引用指向堆中的对象。
当一个项目需要相同的多个对象时,克隆效率比创建新对象效率要高

将一个对象复制一份,称为对象的克隆技术
在Obeject类中存在一个clone()方法:

    protected Object clone() throws CloneNotSupportedException

如果某个类的对象要想被克隆,则对象所在的类必须实现Cloneable接口。此接口没有定义任何方法,是一个标记接口。

对象需要具备克隆功能:
1、实现Cloneable接口(标记接口)
2、重写Object类中的clone方法

实例代码:
主类

    package com.booy1;
    
    public class Test {
    	public static void main(String[] args) {
    		Dog dog = new Dog("肉肉",5);
    		try {
    			Dog newdog = (Dog) dog.clone();//需强制转换
    			System.out.println("dog ="+dog.toString());
    			System.out.println("newdog ="+newdog.toString());
    			System.out.println(dog==newdog);
    		} catch (CloneNotSupportedException e) {
    			e.printStackTrace();
    		}
    	}
    }
    /**
    运行结果:
    dog =Dog [name=肉肉, age=5]
    newdog =Dog [name=肉肉, age=5]
    false
    *

Dog类:

    package com.booy1;
    
    public class Dog implements Cloneable{
    	private String name;
    	private int age;
    	
    	public Dog() {
    		super();
    	}
    	public Dog(String name, int age) {
    		super();
    		this.name = name;
    		this.age = age;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}	
    	@Override
    	public String toString() {
    		return "Dog [name=" + name + ", age=" + age + "]";
    	}
    	//重写Object类中的clone方法
    	@Override
    	protected Object clone() throws CloneNotSupportedException {
    		return super.clone();
    	}
    }