title: java.io.InvalidClassException: no valid constructor
body: <p>When I run below program, I am getting exception as </p>
  
  <pre><code>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.&lt;init&gt;(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)
  </code></pre>
  
  <p>I read somewhere that when we serialize any child class then its base class constructor gets fired.</p>
  
  <pre><code>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
  </code></pre>