第一种:new,这个很简单不多说。
第二种:利用clone方法,如下步骤
① 实现clone的类首先实现Cloneble接口,Cloneable接口实质上是一个标识接口,没有任何方法。
② 重写Object中的clone方法。
③ 在clone方法中调用super.clone()。无论clone类的继承结构是什么,super.clone()都会直接或者简介调用Object类中的clone方法。
如下示例代码:
package easy;
public class Obj implements Cloneable{
private int a = 0;
public Obj (){
System.out.println("construct Obj");
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public void changeA(){
this.a = 1;
}
@Override
protected Object clone() throws CloneNotSupportedException {
Object o = null;
try {
o = (Object)super.clone();
} catch (Exception e) {
e.printStackTrace();
}
return o;
}
}
测试代码及输出:
package easy;
public class Test {
public static void main(String[] args) {
try {
Obj a = new Obj();
Obj b = (Obj) a.clone();
b.changeA();
System.out.println(a.getA());
System.out.println(b.getA());
} catch (Exception e) {
e.printStackTrace();
}
}
}
第三种,利用反射:
如下示例代码:
package easy;
class Person{
String name = "Jack";
public Person(){
System.out.println("construct Person");
}
@Override
public String toString() {
return name;
}
}
public class Test {
public static void main(String[] args) {
Class clazz;
try {
clazz = Class.forName("easy.Person");
Person p = (Person) clazz.newInstance();
System.out.println(p);
} catch (Exception e) {
e.printStackTrace();
}
}
}
示例代码如下:
package easy;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class People implements Serializable{
private String name;
public People(){
this.name = "6点A君";
System.out.println("construct people");
}
@Override
public String toString() {
return this.name;
}
public static void main(String[] args) {
People p = new People();
System.out.println(p);
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
try {
FileOutputStream fos = new FileOutputStream("test.out");
oos = new ObjectOutputStream(fos);
oos.writeObject(p);
oos.close();
} catch (Exception e) {
e.printStackTrace();
}
People p1;
try {
FileInputStream fis = new FileInputStream("test.out");
ois = new ObjectInputStream(fis);
p1 = (People)ois.readObject();
System.out.println(p1);
} catch (Exception e) {
e.printStackTrace();
}
}
}