Java创建对象的方法(5种)

Java创建对象的方法(5种)

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);

}

}

}

相关风暴

安慕希、纯甄、莫斯利安,国产常温酸奶哪家强?
365bet电脑网站

安慕希、纯甄、莫斯利安,国产常温酸奶哪家强?

🌧️ 06-27 👁️ 5163
防窃听设备有哪些种类?如何选?
365彩票app安卓版下载

防窃听设备有哪些种类?如何选?

🌧️ 06-28 👁️ 8640
沉浸工程焦炉与高炉使用方法 - [IE]沉浸工程 (Immersive Engineering) - MC百科
Windows下C++调用系统软键盘及其需要注意的点
365bet电脑网站

Windows下C++调用系统软键盘及其需要注意的点

🌧️ 06-28 👁️ 5858