ae pessoal lendo o livro da kathy pg 256/257 ela diz que a sintaxe abaixo lançaria em tempo de execucao uma exceção caso a class Collar nao fosse Serializada… porem ta rodando normal aqui… pq? mas teoricamente no deveria lançar?
import java.io.*;
public class SerializeDog {
public static void main(String[] args) {
Collar c = new Collar(3);
Dog d = new Dog(c,7);
System.out.println("before: collar " + d.getCollar().getCollarSize());
try{
FileOutputStream fp = new FileOutputStream("dog.ser");
ObjectOutputStream oo = new ObjectOutputStream(fp);
oo.writeObject(d);
oo.close();
}catch(Exception e){}
/*try{
FileInputStream a = new FileInputStream("dog.ser");
ObjectInputStream oi = new ObjectInputStream(a);
d=(Dog)oi.readObject();
oi.close();
}catch(Exception e){}
System.out.println("after : collar is " + d.getCollar().getCollarSize());*/
}
}
class Dog implements Serializable{
private Collar collar;
private int dogSize;
public Dog(Collar collar,int size){
this.collar=collar;
dogSize=size;
}
public Collar getCollar(){return collar;}
}
class Collar {
private int collarSize;
public Collar(int s){collarSize=s;}
public int getCollarSize(){return collarSize;}
}
Você deixou seu bloco catch sem nada. Por isso que nao apareceu nada.
Para resolver esse problema da serializacao marque a variavel Collar como transient e implemente os metodos writeObject e readObject na classe Dog.
Chamando o metodo printStackTrace() da exception:
before: collar 3
java.io.NotSerializableException: Collar
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1081)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1347)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
at SerializaDog.main(SerializaDog.java:11)
[code]import java.io.*;
public class SerializaDog {
public static void main(String[] args) {
Collar c = new Collar(3);
Dog d = new Dog(c,7);
System.out.println("before: collar " + d.getCollar().getCollarSize());
try{
FileOutputStream fp = new FileOutputStream("dog.ser");
ObjectOutputStream oo = new ObjectOutputStream(fp);
oo.writeObject(d);
oo.close();
}catch(Exception e){
e.printStackTrace();
}
/*try{
FileInputStream a = new FileInputStream("dog.ser");
ObjectInputStream oi = new ObjectInputStream(a);
d=(Dog)oi.readObject();
oi.close();
}catch(Exception e){}
System.out.println("after : collar is " + d.getCollar().getCollarSize());*/
}
}
class Dog implements Serializable{
private Collar collar;
private int dogSize;
public Dog(Collar collar,int size){
this.collar=collar;
dogSize=size;
}
public Collar getCollar(){return collar;}
}
class Collar {
private int collarSize;
public Collar(int s){collarSize=s;}