本文介绍了java.io.InvalidClassException:没有有效的构造函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当我在程序下面运行时,我会遇到异常,因为
When I run below program, I am getting exception as
java.io.InvalidClassException: Files.SerializationMain; Files.SerializationMain; no valid constructor
at java.io.ObjectStreamClass.checkDeserialize(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at Files.SerializationClass.main(SerializationClass.java:71)
Caused by: java.io.InvalidClassException: Files.SerializationMain; no valid constructor
at java.io.ObjectStreamClass.<init>(Unknown Source)
at java.io.ObjectStreamClass.lookup(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at Files.SerializationClass.main(SerializationClass.java:61)
我读到某个地方,当我们序列化任何子类时,它的基类构造函数被触发。
I read somewhere that when we serialize any child class then its base class constructor gets fired.
class Parent123
{
int age;
String name;
Parent123(int age,String name) {
System.out.println("We are in Parent123 Constructor");
this.age=age;
this.name=name;
}
}
class SerializationMain extends Parent123 implements Serializable {
int data1;
String data2;
SerializationMain(int data1,String data2)
{
super(20,"test");
this.data1=data1;
this.data2=data2;
}
public void setData1(int data1)
{
this.data1=data1;
}
public void setData2(String data2)
{
this.data2=data2;
}
public String getData2()
{
return data2;
}
public int getData1()
{
return data1;
}
}
public class SerializationClass {
public static void main(String args[])
{
System.out.println("Before Creating Object");
SerializationMain s1=new SerializationMain(10,"Anurag");
try
{
System.out.println("Serializing Object");
FileOutputStream fis=new FileOutputStream("Test.ser");
ObjectOutputStream ois=new ObjectOutputStream(fis);
ois.writeObject(s1);
} catch(Exception e1) {
e1.printStackTrace();
}
try
{
FileInputStream fis=new FileInputStream("Test.ser");
ObjectInputStream ois=new ObjectInputStream(fis);
Object o1=ois.readObject();
SerializationMain s2=(SerializationMain)o1;
}
catch(Exception e1)
{
e1.printStackTrace();
}
}
}//End of SerializationClass
推荐答案
将Serializable的实现添加到父类。
Add implementation of Serializable to parent class.
这篇关于java.io.InvalidClassException:没有有效的构造函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!