我知道,如果类A
实现了外部化,它应该有无参数的构造函数,但是如果类没有任何构造函数(就像我的A
类),java会为它提供空的无参数的构造函数。那为什么我有个错误呢?如果将无参数构造函数(public A(){}
)显式添加到A
类,则一切都将正常。
错误:
线程“main”java.io.InvalidClassException中的异常:a;java.base/java.io.ObjectStreamClass$ExceptionInfo.NewInvalidClassException(ObjectStreamClass.java:159)在java.base/java.io.ObjectStreamClass.CheckDeserialize(ObjectStreamClass.java:864)在java.base/java.io.ObjectTinputStream.ReadOrdinaryObject(ObjectTinputStream.java:2061)在java.base/java.io.ObjectTinputStream.ReadObject0(ObjectTinputStream.java:1594)在test.main(test.java:19)在
import java.io.*;
public class Test implements Serializable
{
public static void main(String[] args) throws IOException, ClassNotFoundException
{
// initiaizing
A a1 = new A();
// serializing
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(a1);
oos.close();
// deserializing
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));
A a2 = (A) ois.readObject();
}
}
class A implements Externalizable
{
@Override
public void writeExternal(ObjectOutput objectOutput) throws IOException {}
@Override
public void readExternal(ObjectInput objectInput) throws IOException, ClassNotFoundException {}
}
Externalizable需要public
无参数构造函数,但如果无参数构造函数具有默认访问修饰符(也称为package private),请尝试以下操作:public class a(){}
问题内容: 除了* 使用如下所示的反射检查 之外 ,是否有任何方法 要求 类具有默认(无参数)构造函数?(以下方法可以工作,但是很hacky,反射速度很慢) * 问题答案: 您可以为此构建一个注释处理器。注释处理器是在编译时运行的编译器插件。它们的错误显示为编译器错误,甚至可能停止构建。 这是一个示例代码(尽管我没有运行它): 如果引入注释(例如RequiresDefaultAnnotation)
问题内容: 可以这么说,我有一个扩展超类的子类。在什么情况下我需要显式键入以使超类构造函数运行? 我正在看一本书中有关抽象类的示例,当它们使用非抽象子类对其进行扩展时,该子类的默认构造函数为空,并且有一条评论说将调用超类的默认构造函数。同时,我还在这里看到有人未明确致电问题的实例。 与从子类的默认/非默认构造函数调用超类的默认/非默认构造函数有区别吗? 问题答案: 你 永远都不 需要 如果您不指定
问题内容: 默认构造函数到底是什么?你能告诉我以下哪个是默认构造函数,它与其他构造函数有何不同? 问题答案: 他们都不是。如果定义,则不是默认值。 除非你定义另一个构造函数,否则默认构造函数是自动生成的无参数构造函数。任何未初始化的字段都将设置为其默认值。对于你的榜样,它看起来像这样假设的类型String,int以及int,那类本身是公共的: 这与 完全没有构造函数。但是,如果定义至少一个构造函数
问题内容: 当未定义构造函数时,它工作正常,但如果我定义了一个参数化的构造函数而不是默认的构造函数, 并且在创建对象时未传递任何值, 则会出错。我认为构造函数是预定义的。 如果定义了参数化构造函数,为什么需要定义默认构造函数?默认构造函数不是预定义的吗? 问题答案: 仅 当您自己未定义任何构造函数时, 才会 自动创建默认(无参数)构造函数。 如果需要两个构造函数,一个带有参数,另一个不带参数,则需
问题内容: 我遇到这个错误: 不知道为什么我得到那个例外 我正在运行 主要 这是我的 课 当我保存,更新和删除它时,它可以正常工作,所以我不知道我在做什么错 EDIT1 在这里是principal.Cliente 问题答案: 我可以说缺少默认构造函数,
问题内容: 我知道我在这里问一些严重的101问题… 我有一些课,还有一个延伸课。在我有一个构造函数,它接受一组参数,并对其字段进行设置。派生类(例如)通常不需要进行修改。现在我的IDE给我 “ Foo中没有默认的构造函数” 。从一点点谷歌搜索,这似乎是因为“构造函数没有继承”。因此,一切都很好,但是我现在如何使它工作而不在每个派生类中复制此构造函数?我假设有一个更合理的方法? 问题答案: 使用构造