# Java – 创建不带“ new”关键字的对象

> 原文： [https://howtodoinjava.com/puzzles/how-to-create-an-instance-of-any-class-without-using-new-keyword/](https://howtodoinjava.com/puzzles/how-to-create-an-instance-of-any-class-without-using-new-keyword/)

我们都知道如何创建任何类的对象。 在 Java 中创建对象的最简单方法是使用**新的**关键字。 让我们探讨一下 Java 中无需使用`new`新关键字即可创建对象的其他方法。

```java
Table of contents

Using Class.forName() and Class.newInstance()
ClassLoader loadClass()
Using Object.clone()
Deserialization
Using reflection

```

> **注意：**在给定的示例中，我仅在编写伪代码。 要构建完整的，可以正常工作的示例代码，请阅读相关功能。

## 使用 Class.newInstance()创建对象

```java
Class ref = Class.forName("DemoClass");
DemoClass obj = (DemoClass) ref.newInstance();
```

`Class.forName()`将类加载到内存中。 要创建此类的实例，我们需要使用`newInstance()`。

## 使用类加载器的 loadClass()创建对象

就像上述方法一样，类加载器的`loadClass()`方法执行相同的操作。 它使用相同类的现有实例创建类的新实例。

```java
instance.getClass().getClassLoader().loadClass("NewClass").newInstance();
```

## 使用 Object.clone()创建对象

这也是拥有新的类的独立实例的方法。

```java
NewClass obj = new NewClass();
NewClass obj2 = (NewClass) obj.clone();
```

## 使用序列化和反序列化创建新对象

如果您已经阅读了本文 [](//howtodoinjava.com/java/serialization/how-to-do-deep-cloning-using-in-memory-serialization-in-java/ "How to do deep cloning using in memory serialization in java") ，则可以理解，序列化和反序列化也是在系统中拥有类的另一个实例的一种方式。

```java
ObjectInputStream objStream = new ObjectInputStream(inputStream);
 NewClass obj = (NewClass ) inStream.readObject();
```

## 使用反射创建新对象

反射也是在大多数可用框架中创建新实例的流行方法。

builder.newInstance(); 或
class.newInstance();

如果您认为我没有其他可能的方法，请告诉我。

学习愉快！