前言
一般情况下,常用的创建对象的方式有四种:
1、使用new关键字创建对象。
2、使用clone()方法创建关键字,需实现 Java .io.Cloneable接口。
3、使用反射方式创建对象,参考之前内容, 。
4、使用 序列化 ,再反序列化的方式,创建对象。
序列化&反序列化
序列化:将对象状态转化为可保持或传输的格式的过程,被序列化的对象必须实现java.io. Serializable接口 ;反序列化:将保持或传输的格式的内容转化成对象的过程。
代码案例
package com.what21.basic01.demo04;
import lombok.AllArgs Constructor ;
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 (CloneNotSupported Exception e) {
e.printStackTrace();
}
return user;
}
public User deep copy () {
User copyUser = null;
try {
String File name = 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 Object InputStream (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());
}
}