当前位置: 首页 > 知识库问答 >
问题:

正在获取InvalidClassException

胥博文
2023-03-14
import java.io.*;

public class StaticVariableTest {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        AC AC = new AC();
        AC.b = 25;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(AC);
        oos.flush();
        oos.close();
        bos.close();

        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
        ObjectInputStream ois = new ObjectInputStream(bis);
        AC na = (AC) ois.readObject();

        System.out.println(na.b);


    }
}

class AC implements Externalizable {
    private static final long serialVersionUID = 1L;
    int b = 20;

    @Override
    public void writeExternal(ObjectOutput objectOutput) throws IOException {
    }

    @Override
    public void readExternal(ObjectInput objectInput) throws IOException, ClassNotFoundException {
    }
}

为什么在上面的程序中我得到InvalidClassException?

线程“main”java.io.InvalidClassException中的异常:SerializationExamples.ac;java.base/java.io.ObjectStreamClass$ExceptionInfo.NewInvalidClassException(ObjectStreamClass.java:159)在java.base/java.io.ObjectStreamClass.CheckDeserialize(ObjectStreamClass.java:864)在java.base/java.io.ObjectStream.ReadOrdinaryObject(ObjectStreamClass.java:2061)在java.base/java.io.ObjectStream.java:2061)在java.base/java.io.ObjectStream.ReadObject0(ObjectInputStream.java:1594)在ableTest.java:18)

它说java不应该为类a提供有效的构造函数,而是提供一个缺省的无参数构造函数。

共有1个答案

刁璞
2023-03-14

从Javadoc:

重构可外部化对象时,使用公共无参数构造函数创建实例

您没有公共的无参数构造函数,因为类不是公共的。

缺省构造函数具有与类相同的访问修饰符,除非类缺少访问修饰符,在这种情况下缺省构造函数具有包访问(§6.6)。

 类似资料:
  • 我正在编写一个administrator类,我正在编写的所有其他类都要从它继承。在本例中,我希望类继承一个main方法,并且我还计划实现一个工厂。我必须编写一些sysouts,其中包括各种类名,如charcount、linecount等等。为此,我需要能够获得当前的类名,因为这个方法将被多个类继承。在Java中有没有办法做到这一点?您可以在下面找到我要做的sysout示例: 提前谢谢大家,任何帮助

  • 我创建了一个简单的REST服务(POST)。但是当我从postman@RequestBody调用这个服务时,它没有收到任何值。 我的java Bean对象如下: System.out.println将null打印为PolcyNumber的值。 请帮我解决这个问题。 我在请求体中传递的JSON是 我甚至在postman中设置了到

  • 我正在获取O并且从未进行成功的Hibernate连接测试,在学习了本教程“JasperReports with hibernate-module1”和JasperReports with hibernate-module2之后,弹出一个错误,说“Could not parse mapping document from resource com/report/mappings/department

  • 我想在浏览器中显示由控制器(使用Spring)返回的响应实体的主体: 返回新的响应实体 返回一个Date类型,我想以如下方式显示: 我怎样才能把它展示出来?

  • TypeError:Res.Status不是auth的函数(D:\Project\Web Application\Learning React\Mern Stack\Middleware\auth.js:17:9)。我得到了这个错误。代码如下所示。 错误截图