网站维护的工作内容,专业建设质量报告,常州教育建设装备中心网站,网站优化培训其实所有的java对象都可以具备克隆能力#xff0c;只是因为在基础类Object中被设定成了一个保留方法#xff08;protected),要想真正拥有克隆的能力#xff0c; 就需要实现Cloneable接口#xff0c;重写clone方法。通过克隆方法得到的对象是一个本地的副本。 1、实现Clonea…其实所有的java对象都可以具备克隆能力只是因为在基础类Object中被设定成了一个保留方法protected),要想真正拥有克隆的能力 就需要实现Cloneable接口重写clone方法。通过克隆方法得到的对象是一个本地的副本。 1、实现Cloneable接口 具体看代码 class User implements Cloneable{ int age; public User(int age){ //用this关键字不至于类成员变量与形参混淆 this.ageage; } //这里可加Override也可不加加了会自动提示是否正确 Override public Object clone{ Object onull; try{ osuper.clone(); }catch(CloneNotSupportedException e){ e.printStackTrace(); } } public String toString(){ return Integer.toString(this.age); } } 2、自己手动写一个CloneUtil 工具类不是实现Cloneable这种方式但是能达到效果。 package cn.com.util;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;/** * 对象clone 工具类 * author * */public class CloneUtil { public static Object clone(Serializable obj) { Object clone cloneObject(obj); if (clone null) { clone cloneObject(obj); } return clone; } public static Object cloneObject(Serializable obj) { Object anotherObj null; ByteArrayOutputStream baos new ByteArrayOutputStream(); ObjectOutputStream oos null; ObjectInputStream ois null; try { oos new ObjectOutputStream(baos); oos.writeObject(obj); byte[] bytes baos.toByteArray(); ByteArrayInputStream bais new ByteArrayInputStream(bytes); ois new ObjectInputStream(bais); anotherObj ois.readObject(); } catch (IOException ex) { throw new RuntimeException(ex.getMessage(), ex); } catch (ClassNotFoundException ex) { throw new RuntimeException(ex.getMessage(), ex); } catch (StackOverflowError error) { System.out.println(stack length error.getStackTrace().length); error.printStackTrace(); return null; } finally { if (oos ! null) try { oos.close(); } catch (IOException localIOException3) { } if (ois ! null) try { ois.close(); } catch (IOException localIOException4) { } } return anotherObj; } public static int getObjectSize(Serializable obj) { ByteArrayOutputStream bs new ByteArrayOutputStream(); try { ObjectOutputStream os new ObjectOutputStream(bs); os.writeObject(obj); os.flush(); } catch (Exception e) { throw new RuntimeException(e.getMessage(), e); } return bs.size(); }}