当前位置: 首页 > 面试题库 >

是否可以在Java中创建对象的实例而无需调用构造函数?

景书
2023-03-14
问题内容

我正在尝试修复我的一个程序中的错误,我认为这可能是由于Hibernate弄清楚了如何在不调用其默认(或任何其他)构造函数的情况下实例化对象的实例。


问题答案:

实际上,是的,如果使用objenesis为您实例化对象,则可以在实例化对象时绕过构造函数。它执行字节码操作来实现此目的。

反序列化对象也将绕过构造函数。

使用反射无法做到这一点。



 类似资料:
  • 我学到了两件事: -操作符创建一个新实例,然后执行声明的connstuctor来初始化该新实例 根据我的理解,这些说法互相反对。 例如,不会创建两个实例,因为-操作符创建一个实例,构造函数调用并创建另一个实例?当然不会,但现在到底是什么创建了一个实例。。。?

  • 问题内容: 在Java中,数组是AN对象。我的问题是…创建新数组时是否调用了Object构造函数?我们希望利用这一事实来为Object构造函数提供一些额外的字节码,以检查所构造数组的长度。那行得通吗? 问题答案: 就Java语言规范而言,尽管它们都使用关键字,但类实例创建表达式和数组创建表达式是不同的表达式形式,每种都有自己的规则。数组创建表达式的描述未提及调用构造函数。

  • 问题内容: 当我们创建扩展抽象类的Subclass对象时,抽象类构造函数也会运行。但是我们知道我们不能创建抽象类的对象。因此,这是否意味着即使构造函数无任何例外地完成运行,也不能保证是否创建了对象吗? 问题答案: 因此,这是否意味着即使构造函数无任何例外地完成运行,也不能保证是否创建了对象吗? 简而言之,a 不会创建对象。它只是 初始化 对象的 状态 。创建对象的是操作员。现在,让我们详细了解一下

  • 问题内容: 假设我有一个实现Runnable接口的抽象基类。 这是一些派生类之一。 关键是我希望我的基类做一些常规的事情,而不是每次都复制它。实际上,它运行良好,输出始终相同: 基本构造函数使用参数1创建的派生线程使用参数1运行派生 但是在JAVA中启动在构造函数中调用抽象方法的线程是否安全?因为据我所知,在大多数情况下,在C ++和C#中是不安全的。谢谢! 问题答案: 此代码演示了为什么你应该

  • 问题内容: 我有一个没有默认构造函数的类。我需要一种获取此类的“空白”实例的方法。“空白”表示实例化之后,所有类字段均应具有默认值,例如null,0等。 我问是因为我需要能够序列化/理想化大对象树。而且我无法访问此对象类的源,并且类既没有默认构造函数,也没有实现可序列化的类。尝试序列化这种结构可能不是一个很好的主意,但替代方法是将其转换为更易于序列化的内容。 问题答案: 使用标准反射时,不需要,但

  • 我正在从一个教程中重构下面的代码。当我< s >运行编译它时,我得到以下错误: Vierbeiner类中的构造函数Vierbeiner不能应用于给定类型;必需:java.lang.找到字符串:无参数原因:实际参数列表和正式参数列表长度不同 我的理解是,发生这个错误是因为父类Vierbeiner有一个需要字符串参数的构造函数,而没有一个不需要参数的构造函数。我不明白的是,为什么我在没有创建Hund类