Java 基础数据类型 和 深度克隆对象的2种方法(实现Cloneable接口或者实现对象序列化)
2016-01-05 14:10
1071 查看
知识点1(java有9种传递函数参数时是传值):
8大基础数据类型加String:
1,字节 byte
2,短整型 short
3,整型int
4,长整形 long
5,字符型 char
6,浮点型 float
7,双精度型 double
8,布尔型 boolean
9,String
这8大基础类型+String是传值。
知识点2(深度克隆对象的三个方法):
方法1.
方法3
直接写一个clone方法。
2种方式都实现了深度克隆,输出结果都是:
8大基础数据类型加String:
1,字节 byte
2,短整型 short
3,整型int
4,长整形 long
5,字符型 char
6,浮点型 float
7,双精度型 double
8,布尔型 boolean
9,String
这8大基础类型+String是传值。
知识点2(深度克隆对象的三个方法):
方法1.
import java.util.ArrayList; /** * 1.必须实现Cloneable接口. * 2.写clone方法的话,在clone中代码上每一处都要实现深复制. * @author jianan */ class Work implements Cloneable{ private String strText; private ArrayList<String> array = new ArrayList<String>(); @SuppressWarnings("unchecked") @Override protected Work clone(){ Work work; try { work = (Work)super.clone(); work.strText = this.strText; work.array = (ArrayList<String>) (this.array.clone()); //深克隆 return work; } catch (CloneNotSupportedException e) { e.printStackTrace(); } return null; } public void addImage(String imgName){ array.add(imgName); } public void setText(String strText){ this.strText = strText; } public void display(String str){ System.out.println(str); System.out.println("Text:" + strText); for(int i = 0; i < array.size(); i++){ System.out.println("Image:" + array.get(i)); } System.out.println(); } } //测试函数 public class Main { public static void main(String[] args) { Work work = new Work(); work.setText("111"); work.addImage("1.png"); work.addImage("2.png"); work.addImage("3.png"); work.display("111"); Work work2 = work.clone(); work2.setText("2"); work2.addImage("4.png"); work2.addImage("5.png"); work2.addImage("6.png"); work2.display("222"); work.display("111"); } }方法2.
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.ArrayList; /** * 1.实现Serializable接口即可.toString方法不用重写因为该接口里面本身就为空. * @author jianan */ //深克隆 工具 class DepthCloneUtil{ public static Object depthClone(Object srcObj){ Object cloneObj = null; try { ByteArrayOutputStream out = new ByteArrayOutputStream(); ObjectOutputStream oo = new ObjectOutputStream(out); oo.writeObject(srcObj); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); ObjectInputStream oi = new ObjectInputStream(in); cloneObj = oi.readObject(); } catch (IOException e) { e.printStackTrace(); }catch (ClassNotFoundException e) { e.printStackTrace(); } return cloneObj; } } // class Work implements Serializable{ private static final long serialVersionUID = -3219618174845671783L; //会自动补充的 private String strText; private ArrayList<String> array = new ArrayList<String>(); public void addImage(String imgName){ array.add(imgName); } public void setText(String strText){ this.strText = strText; } public void display(String str){ System.out.println(str); System.out.println("Text:" + strText); for(int i = 0; i < array.size(); i++){ System.out.println("Image:" + array.get(i)); } System.out.println(); } } //测试函数 public class Main { public static void main(String[] args) { Work work = new Work(); work.setText("111"); work.addImage("1.png"); work.addImage("2.png"); work.addImage("3.png"); work.display("111"); Work work2 = (Work)DepthCloneUtil.depthClone(work); //如果采用对象序列化的话, work2.setText("2"); work2.addImage("4.png"); work2.addImage("5.png"); work2.addImage("6.png"); work2.display("222"); work.display("111"); } }
方法3
直接写一个clone方法。
2种方式都实现了深度克隆,输出结果都是:
/* 111 Text:111 Image:1.png Image:2.png Image:3.png 222 Text:2 Image:1.png Image:2.png Image:3.png Image:4.png Image:5.png Image:6.png 111 Text:111 Image:1.png Image:2.png Image:3.png */
相关文章推荐
- Java——形参和实参的区别
- Java中匿名对象的使用
- MyEclipse安装Freemarker插件
- Java SE 第十六讲----面向对象特征之继承
- Java SE 第十六讲----方法重载
- 19e平台研发中心招聘---高级Java工程师
- Java 设计模式:Singleton
- intellij 配制 maven spring mvc
- 北京小易到家研发部招聘---高级java工程师
- Java设计模式之:代理模式Proxy或Surrogate
- Spring 4 学习笔记4:Java动态代理(Spring AOP原理)
- Java设计模式_结构型_享元模式_实现单元的共享
- Eclipses中嵌入API文档
- Eclipse中SVN的安装步骤(两种)和使用方法
- Java Client/Server 上传文件到服务器与保存文件到本地
- java IO流
- java a标签乱码
- DWR3.0框架入门 —— java页面推送
- 编程菜鸟关于硬件、OS、和JAVA的关系想法(初级)
- SpringMVC使用@ResponseBody输出字符串时遇到的乱码问题及解决办法