Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我不';我还可以序列化一个对象吗?_Java_Serializable - Fatal编程技术网

Java 为什么我不';我还可以序列化一个对象吗?

Java 为什么我不';我还可以序列化一个对象吗?,java,serializable,Java,Serializable,我读过一本书,书中说如果不实现Serializable,就不能序列化给定的对象。但我在没有实施的情况下尝试了它,而且效果很好。下面是一些代码: import java.io.*; class SerializerTest { private int a; private int b; public SerializerTest(int a, int b) { this.a = a; this.b = b; } publ

我读过一本书,书中说如果不实现Serializable,就不能序列化给定的对象。但我在没有实施的情况下尝试了它,而且效果很好。下面是一些代码:

import java.io.*;

class SerializerTest {
    private int a;
    private int b;

    public SerializerTest(int a, int b) {
        this.a = a;
        this.b = b;
    }

    public static void main(String[] args) {
        try {
            SerializerTest st = new SerializerTest(10, 20);
            FileOutputStream fs = new FileOutputStream("st.ser");
            ObjectOutputStream os = new ObjectOutputStream(fs);
            os.writeObject(st);
        } catch (Exception e) {}
    }
}

但我注意到,如果实现Serializable,则
st.ser
文件将变小10倍。那么,为什么我可以序列化没有实现Serializable的东西,为什么如果我实现它,文件会变短?

方法
ObjectOutputStream.writeObject
接受类型为
对象的参数,而不是
Serializable
。这就是为什么编译器不会抱怨,而是编译程序

但是,在运行时,方法
writeObject
失败并抛出
NotSerializableException
。在您的程序中,异常被捕获并忽略。只需尝试添加到
catch
e.printStackTrace()
即可查看

(或者更好的方法是,根本不要将代码包装为
try-catch
,只需将方法声明更改为
publicstaticvoidmain(String[]args)抛出IOException