在Java中创建对象的所有不同方法是什么?

2022-08-31 06:38:18

前几天和一位同事就此事进行了交谈。

使用构造函数是显而易见的,但是还有什么其他方法呢?


答案 1

在 java 中创建对象有四种不同的方法:

A. 使用关键字
这是在java中创建对象的最常见方法。几乎99%的对象都是以这种方式创建的。new

 MyObject object = new MyObject();

B.使用
如果我们知道类的名称,如果它有一个公共的默认构造函数,我们可以以这种方式创建一个对象。Class.forName()

MyObject object = (MyObject) Class.forName("subin.rnd.MyObject").newInstance();

C. 使用
clone() 可用于创建现有对象的副本。clone()

MyObject anotherObject = new MyObject();
MyObject object = (MyObject) anotherObject.clone();

D. 使用
对象反序列化只不过是从其序列化形式创建对象。object deserialization

ObjectInputStream inStream = new ObjectInputStream(anInputStream );
MyObject object = (MyObject) inStream.readObject();

您可以从这里阅读它们。


答案 2

有多种方法可以:

  • 通过。Class.newInstance
  • 通过。Constructor.newInstance
  • 通过反序列化(使用最派生的不可序列化基类的 no-args 构造函数)。
  • 通过(不调用构造函数)。Object.clone
  • 通过 JNI(应调用构造函数)。
  • 通过任何其他调用 a 的方法。new
  • 我想你可以将类加载描述为创建新对象(例如实习生)。String
  • 作为声明中初始化的一部分的文本数组(数组没有构造函数)。
  • “varargs” () 方法调用中的数组(数组没有构造函数)。...
  • 非编译时常量字符串串联(碰巧在典型实现上生成至少四个对象)。
  • 导致运行时创建并引发异常。例如 或 .throw null;"".toCharArray()[0]
  • 哦,当然还有原语的装箱(除非缓存)。
  • JDK8 应该有 lambda(本质上是简洁的匿名内部类),它们被隐式转换为对象。
  • 为了完整性(和Paŭlo Ebermann),关键字也有一些语法。new

推荐