前言
一般情况下,常用的创建对象的方式有四种:
1、使用new关键字创建对象。
2、使用clone()方法创建关键字,需实现java.io.Cloneable接口。
3、使用反射方式创建对象,参考之前内容,反射机制,构造方法。
4、使用序列化,再反序列化的方式,创建对象。
序列化&反序列化
序列化:将对象状态转化为可保持或传输的格式的过程,被序列化的对象必须实现java.io.Serializable接口;反序列化:将保持或传输的格式的内容转化成对象的过程。
代码案例
package com.what21.basic01.demo04; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.io.*; import java.util.Date; @Data @AllArgsConstructor @NoArgsConstructor public class User implements Serializable, Cloneable { private Integer id; private String name; private Date createTime; public User clone() { User user = null; try { user = (User) super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return user; } public User deepCopy() { User copyUser = null; try { String filename = System.getProperty("java.io.tmpdir"); filename = filename + "/javaTemp"; File file = new File(filename); ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file)); out.writeObject(this); out.close(); ObjectInputStream in = new ObjectInputStream(new FileInputStream(file)); copyUser = (User) in.readObject(); in.close(); if (file.exists()) { file.deleteOnExit(); } } catch (Exception e) { e.printStackTrace(); } return copyUser; } }
package com.what21.basic01.demo04; import java.util.Date; public class CreateInstanceDemo { public static void main(String[] args) { // Java实例化对象的方式 // 1、使用关键字 new()创建对象,经常用 User user = new User(1, "张三", new Date()); System.out.println("创建对象方式1:" + user + " hashCode " + user.hashCode()); // 2、用clone方法创建 User user2 = (User) user.clone(); System.out.println("创建对象方式2:" + user2 + " hashCode " + user2.hashCode()); // 3、反射创建 User user3 = null; try { Class clazz = Class.forName("com.what21.basic01.demo04.User"); user3 = (User) clazz.newInstance(); } catch (Exception e) { e.printStackTrace(); } System.out.println("创建对象方式3:" + user3 + " hashCode " + user3.hashCode()); // 4、深度克隆 User user4 = (User) user.deepCopy(); System.out.println("创建对象方式4:" + user4 + " hashCode " + user4.hashCode()); } }
还没有评论,来说两句吧...