ava有5种方式来创建对象:
- 使用 new 关键字(最常用):
ObjectName obj = new ObjectName();
- 使用反射的Class类的newInstance()方法:
ObjectName obj = ObjectName.class.newInstance();
- 使用反射的Constructor类的newInstance()方法:
ObjectName obj = ObjectName.class.getConstructor.newInstance();
- 使用对象克隆clone()方法:
ObjectName obj = obj.clone();
- 使用反序列化(ObjectInputStream)的readObject()方法:
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))) {
ObjectName obj = ois.readObject();
}
示例
创建类
package object;
import java.io.Serializable;
import java.util.Objects;
public class Employee implements Serializable, Cloneable {
private static final long serializableUID = 1L;
private String name;
public Employee() {
System.out.println("Employee Constructor Called...");
}
public String getName() { return name; }
public void setName(String name) { this.name = name; }
@Override
public Employee clone() {
Employee clone = null;
try {
clone = (Employee) super.clone();
} catch (CloneNotSupportedException e) {
}
return clone;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Employee employee = (Employee) o;
return Objects.equals(name, employee.name);
}
@Override
public int hashCode() { return Objects.hash(name); }
@Override
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
'}';
}
}
创建类对象
-
package object; import java.io.*; import java.lang.reflect.Constructor; public class ObjectCreate { private static final String FILE_NAME = "employee.obj"; public static void main(String[] args) throws Exception { // 使用 new关键字 创建对象 Employee employee = new Employee(); employee.setName("张三"); // 使用 Class类的 newInstance()方法 // Employee employee2 = (Employee) Class.forName("Employee").newInstance(); Employee employee2 = Employee.class.newInstance(); employee2.setName("xxx2"); System.out.println("Class类的newInstance()方法:" + employee2); // 使用 Constructor类的newInstance()方法 Employee employee3 = Employee.class.getConstructor().newInstance(); employee3.setName("xxx3"); System.out.println("Constructor类的newInstance()方法:" + employee3); // 使用 clone()方法:类必须实现Cloneable接口,并重写其clone()方法 Employee employee4 = (Employee) employee.clone(); // employee4.setName("xxx4"); System.out.println("对象clone()方法:" + employee4); // 使用 反序列化ObjectInputStream 的readObject()方法:类必须实现 Serializable接口 // 序列化 try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE_NAME))) { oos.writeObject(employee); } // 反序列化 try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))) { Employee employee5 = (Employee) ois.readObject(); System.out.println("反序列化:" + employee5); } } }