2012-04-08 73 views
-1

我正在阅读一篇文章说明..如果一个类的超类已经在Java中实现了Serializable接口,那么它已经可以在Java中进行序列化,因为你不能实现一个接口,所以它不可能使它不可序列化但是有一种方法可以避免新类的序列化。为了避免Java序列化,你需要在你的类中实现writeObject()和readObject()方法,并且需要从这些方法中抛出NotSerializableException异常。这是定制java序列化过程的另一个好处,正如上面提到的问题所描述的那样,并且通常会在面试过程中作为后续问题提出。控制序列化

为前..还有..超

class Animal implements Serializable 
{ 
int weight = 42; 
} 

and there is a subclass... 

class Dog extends Animal 
{ 
    private void writeObject(ObjectOutputStream o) 
          throws IOException, ClassNotFoundException 
    { 
     //throw nonserializable exception 
    } 

    private void readObject(ObjectInputStream o) 
     throws IOException, ClassNotFoundException 
    { 
      //throw nonserializable exception 
    } 

} 

可否请你从上面可以看出在狗类中的readObject()和writeObject()告诉我,我怎么能写指示代码抛出nonserilizable异常..它像投掷非seriliable异常...请告知..

回答

1
class Dog extends Animal 
{ 
    private void writeObject(ObjectOutputStream o) 
          throws IOException, ClassNotFoundException 
    { 
     throw new NotSerializableException(); 
    } 

    private void readObject(ObjectInputStream o) 
     throws IOException, ClassNotFoundException 
    { 
     throw new NotSerializableException(); 
    } 

} 
+0

鉴于问题的存在,我建议阅读异常和异常处理。 – trutheality 2012-04-08 04:52:59

+0

非常感谢,请指教我们是否需要一个catch块.. !! – Neera 2012-04-08 04:54:36

+1

不在这里。在这里抛出一个异常点是为了使序列化Dog不可能。它是试图序列化需要捕获异常的对象的代码。 – trutheality 2012-04-08 05:00:21