写这一个是因为如果类的成员变量比较复杂,那么使用clone()方法显然不是很好
于是我们考虑了一下使用序列化对象,下面简单的讲解一下什么叫序列化对象
一种处理对象流的机制,对象流即将对象的内容流化,让对象可以进行读写操作
序列化是为了解决对象在进行读写操作是产生的问题
序列化的实现
被序列化的类需要继承Serializable接口,该接口没有实现方法,实现该节口只是为
了标记该对象可以被序列化
序列化简单的说是把java对象存储在某个地方,以便于传输
下面是有关代码的实现
首先是创建一个Love类
import java.io.Serializable;
public class Love implements Serializable{
public String people;
public int number;
public Love (String people,int number)
{
this.people=people;
this.number=number;
}
public String getPeople() {
return people;
}
public void setPeople(String people) {
this.people = people;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return people+"-----"+number;
}
}
然后是创建一个Employer 类
import java.io.Serializable;
public class Employer implements Serializable{
private String name;
private int age;
private Love love;
public Employer(String name,int age,Love love)
{
this.name=name;
this.age=age;
this.love=love;
}
public Love getLove() {
return love;
}
public void setLove(Love love) {
this.love = love;
}
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() {
// TODO Auto-generated method stub
return name+"-------"+age+"-----"+love;
}
}
最后创建Demo这个测试类
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class Demo { public static void main(String[] args) { // TODO Auto-generated method stub Love love= new Love("刘美女",23); Employer e1=new Employer("雇主1",38,love); System.out.println("输出雇主信息"); System.out.println(e1); System.out.println("序列化之后"); ObjectOutputStream oos=null; ObjectInputStream ois=null; Employer e2=null; try { oos=new ObjectOutputStream(new FileOutputStream("employer.bat")); //创建输出流 ois=new ObjectInputStream(new FileInputStream("employer.bat")); //创建输入流 //写入对象到employer.bat中 oos.writeObject(e1); //读出employer.bat文件中的对象 e2=(Employer) ois.readObject(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ if(oos!=null) { try { oos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(ois!=null) { try { ois.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } if(e2!=null) { //对e2的内容进行修改 e2.setAge(29); e2.setName("雇主2"); e2.getLove().setNumber(18); e2.getLove().setPeople("迪美女"); System.out.println("输出e2对象的内容"); System.out.println(e2); System.out.println("-------"); System.out.println("输出e1对象的内容"); System.out.println(e1); } } }
需要留意的是你也可以将对象写入到内存中