在 Java 中创建对象的不同方式

以下是在 Java 中创建对象的不同方法。

  • 使用新关键字- 最常用的方法。使用 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 {

      //场景一:使用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

以上是 在 Java 中创建对象的不同方式 的全部内容, 来源链接: utcz.com/z/347607.html

回到顶部