我有以下代码。
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类没有实现可序列化的接口。
为什么我的代码有用?
答案 0 :(得分:1)
程序会抛出异常,你只是找不到合适的位置。
方法e.printStackTrace()
打印到System.err
(STDERR)流, NOT 打印到标准控制台输出(STDOUT)。你很可能没有看到正确的流。大多数IDE会显示System.err
,但我不能代表你的。
修复方法是调用System.out.println(e.getMessage())
。这会将异常消息打印到STDOUT。如果要打印堆栈跟踪,应调用e.printStackTrace(System.out)
。
最好找一种查看System.err
(STDERR)流的方法,因为典型的System.out
用于正常程序输出,而不是错误。您可以调用System.err.println(e.getMessage())
来获取异常消息,并e.printStackTrace(System.err)
来获取堆栈跟踪。
答案 1 :(得分:-1)
首先,你不应该捕捉“例外”。不好的做法。
其次,如果要“查看”异常,请让main()方法抛出NotSerializableException(使用throws)。