java流对象的复制_java中关于对象的复制

packageobjDeepCopy;importjava.io.ByteArrayInputStream;importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.io.ObjectInputStream;importjava.io.ObjectOutputStream;importjava.io.Serializable;public classDeepCopy {public static void main(String[] args) throwsException {

Teacher teacher=newTeacher();

teacher.settAge(20);

teacher.settName("zhangsan");

Student student1=newStudent();

student1.setsAge(55);

student1.setsName("xiaojiang");

student1.setsTeacher(teacher);

System.out.println("student1"+student1.getsAge()+student1.getsName()+student1.getsTeacher().gettAge()+student1.getsTeacher().gettName());

Student student2=lowCopy(student1);

System.out.println("student2"+student2.getsAge()+student2.getsName()+student2.getsTeacher().gettAge()+student2.getsTeacher().gettName());//对student1修改,只对复制对象的成员变量进行复制,但是引用的变量只是将引用指向过去

student1.setsAge(44);

student1.setsName("xinxiaoming");

student1.getsTeacher().settName("xinlaoshi");

System.out.println("------------------");

System.out.println("student1"+student1.getsAge()+student1.getsName()+student1.getsTeacher().gettAge()+student1.getsTeacher().gettName());

System.out.println("student2"+student2.getsAge()+student2.getsName()+student2.getsTeacher().gettAge()+student2.getsTeacher().gettName());//深复制通过流,将对象完整的复制过去,并不是引用//System.out.println("------------------深复制");//

//Teacher teacher=new Teacher();//teacher.settAge(20);//teacher.settName("zhangsan");//Student student1=new Student();//student1.setsAge(55);//student1.setsName("xiaojiang");//student1.setsTeacher(teacher);//System.out.println("student1"+student1.getsAge()+student1.getsName()+student1.getsTeacher().gettAge()+student1.getsTeacher().gettName());//Student student2=student1.deepCopy(student1);//System.out.println("student2"+student2.getsAge()+student2.getsName()+student2.getsTeacher().gettAge()+student2.getsTeacher().gettName());// //对student1修改,只对复制对象的成员变量进行复制,但是引用的变量只是将引用指向过去//student1.setsAge(44);//student1.setsName("xinxiaoming");//student1.getsTeacher().settName("xinlaoshi");//System.out.println("------------------");//System.out.println("student1"+student1.getsAge()+student1.getsName()+student1.getsTeacher().gettAge()+student1.getsTeacher().gettName());//System.out.println("student2"+student2.getsAge()+student2.getsName()+student2.getsTeacher().gettAge()+student2.getsTeacher().gettName());

}public static Student lowCopy(Student student) throwsException{

Student student2=(Student) student.clone();returnstudent2;

}

}class Student implementsSerializable,Cloneable{/****/

private static final long serialVersionUID = 5668069747602085306L;private intsAge;privateString sName;privateTeacher sTeacher;public intgetsAge() {returnsAge;

}public void setsAge(intsAge) {this.sAge =sAge;

}publicString getsName() {returnsName;

}public voidsetsName(String sName) {this.sName =sName;

}publicTeacher getsTeacher() {returnsTeacher;

}public voidsetsTeacher(Teacher sTeacher) {this.sTeacher =sTeacher;

}

@Overridepublic Object clone() throwsCloneNotSupportedException {return super.clone();

}public Student deepCopy(Student student) throwsException{

ByteArrayOutputStream boStream=newByteArrayOutputStream();

ObjectOutputStream oos= newObjectOutputStream(boStream);

oos.writeObject(this);

ByteArrayInputStream bis=newByteArrayInputStream(boStream.toByteArray());

ObjectInputStream ois=newObjectInputStream(bis);return(Student) ois.readObject();

}

}class Teacher implementsSerializable{private inttAge;privateString tName;public intgettAge() {returntAge;

}public void settAge(inttAge) {this.tAge =tAge;

}publicString gettName() {returntName;

}public voidsettName(String tName) {this.tName =tName;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值