Marcar classes para serializar com Serializable é obrigatório ou não?
9 respostas
S
subgiu
Olá pessoal,
No cap. 6 do livro da kathy para a certificação 5 diz que se tentar serializar uma classe (ou se essa classe tiver uma variavel de instancia pra outra classe) que não está implementando Serializable receberá a exceção: java.io.NotSerializableException.
Porém criei duas classes, sendo que nem uma esta implementando Serializable, e onde uma classe tem uma variavel de instancia da outra e consegui serializar e desserializar sem problemas, num dá erro algum, quanto menos a exceção. Diante disso fiquei na dúvida, é obrigatório ou não marcar com Serializable?
Obs: Estou usando o compilador 6, porém compilei com a opção -source 5…
Esse código roda,cria o arquivo "serdog" e exibe:
3
3
O que axa?
B
breno500as
Para serializar objetos é obrigatório que eles implementem a interface Serializable se você não o fizer terá uma exceção em tempo de execução(NotSerializableException).Por padrão qualquer objeto estende da classe Object que não implementa Serializable por isso é necessário implementar a interface.
Faltou o e.printStackTrace() pra te mostrar que exceção o código lançou e perceber que na verdade não estava serializando coisa nenhuma.
E ele exibe o mesmo resultado, simplesmente porque o que acontece é isso aqui:
System.out.println(d.getColar().getSize());//um monte de código que não vai dá certo porque a classe não implementa SerializableSystem.out.println(d.getColar().getSize());
Ou seja, imprime as informações do mesmo objeto d, pois não aconteceu nada desde a sua criação, se você adicionasse um novo objeto Dog entre os blocos trycatch, também veria que não funcionou.
Faltou o e.printStackTrace() pra te mostrar que exceção o código lançou e perceber que na verdade não estava serializando coisa nenhuma.
E ele exibe o mesmo resultado, simplesmente porque o que acontece é isso aqui:
System.out.println(d.getColar().getSize());//um monte de código que não vai dá certo porque a classe não implementa SerializableSystem.out.println(d.getColar().getSize());
Ou seja, imprime as informações do mesmo objeto d, pois não aconteceu nada desde a sua criação, se você adicionasse um novo objeto Dog entre os blocos trycatch, também veria que não funcionou.
PERFECT!!!
E agora eu me pergunto…
quando vou chegar nesse nivel e tentar a certificação?
S
subgiu
Valew!! java.lang.JJunior, matou a charada… e aprendi que nunca se deve deixar de colocar o rastreamento da pilha e talvez ganhei uma pergunta do exame…
Valew pela ajuda.
Jairo_Junior1
subgiu:
Valew!! java.lang.JJunior, matou a charada… e aprendi que nunca se deve deixar de colocar o rastreamento da pilha e talvez ganhei uma pergunta do exame…
Valew pela ajuda.
Nada, o importante é você acreditar na Kathy, SEMPRE. hahahaha
S
subgiu
[/quote]Nada, o importante é você acreditar na Kathy, SEMPRE. hahahaha[/quote]
Ehh, claro… por isso que postei essa pergunta, pois o código não estava se comportando de acordo com o que ela disse, e isso é muuuito ruim… heheh
Acredito que para ser um bom scjp não basta acreditar na Kathy e ficar com dúvidas, e era o que tinha acontecido comigo… Vlw
Jairo_Junior1
Ehh, claro… por isso que postei essa pergunta, pois o código não estava se comportando de acordo com o que ela disse, e isso é muuuito ruim… heheh
Acredito que para ser um bom scjp não basta acreditar na Kathy e ficar com dúvidas, e era o que tinha acontecido comigo… Vlw
Sim, o problema é que você tentou criar um código para provar que tava errado e não o contrário, mais ou menos por aí ;D