是否可以在不调用任何构造函数的情况下实例化一个类?

时间:2013-11-04 15:43:05

标签: java serialization reflection

我正在尝试对一些java对象进行序列化。为此,我想实例化(对我来说)未知的类,它们可能没有默认的构造函数。因为我不知道应该如何调用其他构造函数(我可以知道参数,是的,但这不是很有用),我想创建一个类的“空白”实例。

之后我会使用反射来设置它的属性。

这有可能吗?

2 个答案:

答案 0 :(得分:6)

可以使用Unsafe类。此外,有可能使用此sun.x类

获取“constructorForSerialization”

ReflectionFactory.getReflectionFactory()。newConstructorForSerialization(clazz,c);

答案 1 :(得分:1)

简而言之,没有。

但是,您可以通过多种方式调用构造函数。它可能是一个“默认”构造函数,或者在代码中实际没有表达的构造函数,或者是在执行其他项时的内部构造函数,如反序列化。

构造函数返回一个引用,它包含一些重要的内部步骤。

  1. JVM需要在堆上分配内存以保存Class的成员数据(以及对支持项的引用)。
  2. 该内部JVM数据结构的地址被赋予类型安全引用。
  3. 调用适当的<init>(...)方法(从编程方面来看,这是人们认为的构造方法,典型地编写public Object(...) { ... })。
  4. 引用返回执行上下文。
  5. 因此构造不仅仅是您调用的代码,它还是Object创建的实现。您可以通过各种方式避免提供init方法,但构造所需的内部操作实际上并不可跳过。如果是,那么你将缺少对象参考。