Java有5种方式来创建对象:
1、使用 new 关键字:
- ObjectName obj = new ObjectName();
2、使用反射的Class类的newInstance()方法:
- ObjectName obj = ObjectName.class.newInstance();
3、使用反射的Constructor类的newInstance()方法:
- ObjectName obj = ObjectName.class.getConstructor.newInstance();
4、使用对象克隆clone()方法:
- ObjectName obj = obj.clone();
5、使用反序列化(ObjectInputStream)的readObject()方法:
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))) {
ObjectName obj = ois.readObject();
}
User类:
import java.io.Serializable;
import java.util.Objects;
public class User implements Serializable, Cloneable {
private static final long serializableUID = 1L;
private String name;
private String pass;
public User() {
System.out.println("User Constructor...");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
@Override
public User clone() {
User clone = null;
try {
clone = (User) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return clone;
}
@Override
public String toString() {
return "User [name=" + name + ", pass=" + pass + "]";
}
}
测试创建对象的5种方法:
import java.io.*;
import java.lang.reflect.Constructor;
public class CreateTest {
private static final String FILE_NAME = "employee.obj";
public static void main(String[] args) throws Exception {
// 1.使用 new关键字 创建对象
System.out.println("-----1.用new语句创建对象,是最常见的创建对象的方法。");
User user = new User();
user.setName("王1");
// 2.使用 Class类的 newInstance()方法
System.out.println("-----2.调用java.lang.Class类的newInstance()实例方法");
User user2 = User.class.newInstance();
System.out.println("2.1对User类实例设置姓名:王2");
user2.setName("王2");
System.out.println("2.2Class类的newInstance()方法:" + user2);
//3.使用 Constructor类的newInstance()方法
System.out.println("-----3.调用java.lang.reflect.Constructor类的newInstance()实例方法");
User user3 = User.class.getConstructor().newInstance();
user3.setName("王3");
System.out.println("Constructor类的newInstance()方法:" + user3);
//4.调用对象的clone()方法。:类必须实现Cloneable接口,并重写其clone()方法
System.out.println("-----4.调用对象的clone()方法");
User user4 = (User) user.clone();
System.out.println("对象clone()方法:" + user4);
// 5.使用反序列化ObjectInputStream 的readObject()方法:类必须实现 Serializable接口
// 5.1序列化
System.out.println("-----5.运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。");
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE_NAME))) {
System.out.println("5.1序列化--->user is running...");
oos.writeObject(user);
}
// 5.2反序列化
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))) {
System.out.println("5.2反序列化user--->user5 is running...");
User user5 = (User) ois.readObject();
System.out.println("5.3 user5 = " + user5);
}
}
}
打印:
-----1.用new语句创建对象,是最常见的创建对象的方法。
User Constructor...
-----2.调用java.lang.Class类的newInstance()实例方法
User Constructor...
2.1对User类实例设置姓名:王2
2.2Class类的newInstance()方法:User [name=王2, pass=null]
-----3.调用java.lang.reflect.Constructor类的newInstance()实例方法
User Constructor...
Constructor类的newInstance()方法:User [name=王3, pass=null]
-----4.调用对象的clone()方法
对象clone()方法:User [name=王1, pass=null]
-----5.运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。
5.1序列化--->user is running...
5.2反序列化user--->user5 is running...
5.3 user5 = User [name=王1, pass=null]