0

以下のコードを実行した後、出力される値は文字列に対して null です。なんで?(もちろん、オブジェクトをファイルに書き込んでいます)。この点で誰かが私を助けることができますか?

class Demo {
    protected String name;
    protected String address;
}

class Demo1 extends Demo implements Serializable 
{
    transient int age;
    Demo1(String name,String address,int age)
    {
        this.name=name;
        this.address=address;
        this.age=age;
    }
}
public class FileRead
{
    public static void main(String args[])
    {
        Demo1 ob=new Demo1("Rose","Rohini",23);
        try
        {
            FileInputStream fileIn = new FileInputStream("Demo.ser");
            ObjectInputStream in = new ObjectInputStream(fileIn);
            ob = (Demo1) in.readObject();
            in.close();
            fileIn.close();
        }catch(IOException i)
        {
            i.printStackTrace();
            return;
        }
        catch(ClassNotFoundException c)
        {
            System.out.println("Demo class not found");
            c.printStackTrace();
            return;
        }
        System.out.println("Deserialized Details...");
        System.out.println("Name: " + ob.name);
        System.out.println("Address: " + ob.address);
        System.out.println("age " + ob.age);
    }
}
4

4 に答える 4

1

フィールドを「TRANSIENT」として宣言しました。一時フィールドはシリアル化されません。オブジェクトの再構築中、デフォルト値が設定されます。スティングの場合はnullです

デモクラスのコードを貼り付けた後に更新が行われました

修正: デモ クラスは

class Demo implements Serializable  {
    protected String name;
    protected String address;
}

age もシリアル化する場合は、transient int age を変更します。-- > 整数年齢;

于 2013-09-11T07:12:59.757 に答える
0

この場合、スーパークラス「Demo」に Serializable を実装します。したがって、コードが正常に機能するようにします。

于 2013-09-12T10:01:43.570 に答える