在 Java 中创建对象的不同方法
java programming java8object oriented programming
以下是在 Java 中创建对象的不同方法。
使用 new 关键字 − 最常用的方法。使用 new 关键字调用任何构造函数来创建对象。
Tester t = new Tester();
使用 Class.forName().newInstance() − 使用 Class.forName() 加载类,然后调用其 newInstance() 方法创建对象。
Tester t = Class.forName("Tester").newInstance();
使用 clone() 方法 −通过调用所需对象的 clone() 方法获取其克隆对象。
Tester t = new Tester(); Tester t1 = t.clone();
使用反序列化 − JVM 在反序列化时创建一个新对象。
Tester t = new Tester(); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); objectOutputStream.writeObject(t); objectOutputStream.flush(); objectInputStream = new ObjectInputStream(new ByteArrayInputStream(byteArrayOutputStream.toByteArray())); Tester t1= objectInputStream.readObject();
使用反射 − 使用 Constructor.newInstance() 方法,我们可以创建一个新对象。
Constructor<Tester> constructor = Tester.class.getDeclaredConstructor(); Tester r = constructor.newInstance();
示例
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; public class Tester implements Serializable, Cloneable { protected Object clone() throws CloneNotSupportedException { return super.clone(); } public static void main(String args[]) throws InstantiationException, IllegalAccessException , ClassNotFoundException, CloneNotSupportedException , IOException, NoSuchMethodException, SecurityException , IllegalArgumentException, InvocationTargetException { //场景 1:使用 new 关键字 Tester t = new Tester(); System.out.println(t); //场景 2:使用 Class.forName().newInstance() Tester t1 = (Tester) Class.forName("Tester").newInstance(); System.out.println(t1); //场景 3:使用 clone() 方法 Tester t3 = (Tester) t.clone(); System.out.println(t3); //场景四:使用反序列化方法 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); objectOutputStream.writeObject(t); objectOutputStream.flush(); ObjectInputStream objectInputStream = new ObjectInputStream( new ByteArrayInputStream(byteArrayOutputStream.toByteArray())); Tester t4 = (Tester) objectInputStream.readObject(); System.out.println(t4); //场景5:使用反射方法 Constructor<Tester> constructor = Tester.class.getDeclaredConstructor(); Tester t5 = constructor.newInstance(); System.out.println(t5); } }
输出
Tester@2a139a55 Tester@15db9742 Tester@6d06d69c Tester@55f96302 Tester@3d4eac69