Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.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_Serialization_Exception Handling - Fatal编程技术网

Java对象序列化而不实现可序列化接口

Java对象序列化而不实现可序列化接口,java,serialization,exception-handling,Java,Serialization,Exception Handling,我有以下代码 Animal.java public class Animal{ String name; int age; public Animal(){ name="default name"; age=0; } } Cat.java public class Cat extends Animal{ int legs; pub

我有以下代码

Animal.java

   public class Animal{
        String name;
        int age;

        public Animal(){
            name="default name";
            age=0;
        }

    }
Cat.java

  public class Cat extends Animal{
        int legs;
        public Cat(){
            super();
            this.legs=10;
        }
    }
Test.java

import java.io.*;

public class Test{

    public static void main(String[] args){

        try{
            Cat c1 = new Cat();
            FileOutputStream fileStream = new FileOutputStream("myobjects.ser");
            ObjectOutputStream objectStream = new ObjectOutputStream(fileStream);
            objectStream.writeObject(c1);
        }catch(Exception e){
            e.printStackTrace();
        }   

    }
}
这段代码没有任何问题。没有抛出异常。我希望出现异常,因为cat类尚未实现可序列化接口


为什么我的代码可以工作?

首先,您不应该捕获“异常”。坏习惯


其次,如果您想“查看”异常,让main()方法抛出NotSerializableException(使用throws)。

如果程序确实抛出异常,您只是找不到正确的位置

方法
e.printStackTrace()
打印到
System.err
(STDERR)流,而不是标准控制台输出(STDOUT)。很可能您没有看到正确的流。大多数IDE都会显示
System.err
,但我不能代表你说

修复程序将调用
System.out.println(e.getMessage())
。这将把异常消息打印到标准输出。如果要打印堆栈跟踪,应调用
e.printStackTrace(System.out)


更好的做法是找到查看
系统.err
(STDERR)流的方法,因为典型的
系统.out
用于正常程序输出,而不是错误。您可以调用
System.err.println(e.getMessage())
来获取异常消息,调用
e.printStackTrace(System.err)
来获取堆栈跟踪。

I获取异常。重新编译并重新运行你的代码。我没有得到任何。使用open-jdk7I获得java.io.NotSerializableException。选中welle.printStackTrace()将其打印到您可能看不到的错误流。这就是为什么您认为代码在无声完成时工作。System.out.println(e)这个答案是不正确的。。。(第一句是,但这并不能回答问题)我宁愿使用
System.out.println(e.getMessage())
System.err.println(e.getMessage())。对于堆栈跟踪,
e.printStackTrace(System.out)
将它打印到STDOUT,并且
e.printStackTrace(System.err)将打印到STDERRYou是正确的。写我的答案时有点心烦意乱!我将稍后编辑。我已编辑了您的答案,以包含我的观察结果。希望对你有帮助