之前两篇,我们讲解了创建对象方式中的反射和工厂模式的方式, 本文我们来学习一下其他方式。
上图中的和Class类和Constructor中的newInstance方法其实就是之前我们讲到的反射。
Constructor<Employee> constructor = Employee.class.getConstructor();
Employee emp3 = constructor.newInstance();
Class类中的newInstance方法
事实上Class的newInstance方法内部调用Constructor的newInstance方法。
Employee emp2 = (Employee) Class.forName("org.programming.mitra.exercises.Employee").newInstance();
或者
Employee emp2 = Employee.class.newInstance();
clone方法:
无论何时我们调用一个对象的clone方法,jvm就会创建一个新的对象,将前面对象的内容全部拷贝进去。
用clone方法创建对象并不会调用任何构造函数。
要使用clone方法,我们需要先实现Cloneable接口并实现其定义的clone方法。
也就是说我们在需要使用clone的类中,实现Cloneable接口,重写clone方法(就是实现super.clone();),那么在客户端中就可以直接使用一个对象调用clone方法实例化出一个新的对象。
例如,Student类实现了Cloneable接口,并重写了clone方法(注意:Student类中只包含基本数据类型的成员变量)。那么在客户端类中调用,就可以先new一个新的stu对象,然后
Student stu2=(Student)stu.clone();//这样就可以实现新对象的实例化操作
此为浅克隆
但是上述情况 只适用于没有其他类