创建对象过程: 创建一个对象首先会在栈中生成一个引用,对象第一次创建首先要被虚拟机类加载器加载到方法区,然后根据方法区字节计算对象大小,然后去堆中申请内存空间创建一个对象,成功后栈中引用指向堆中的对象。
当一个项目需要相同的多个对象时,克隆效率比创建新对象效率要高
将一个对象复制一份,称为对象的克隆技术
在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();
}
}