Em um determinado livro lemos: “Um construtor ou qualquer inicialização não são chamados durante
a desserialização do objeto. Os campos transient são associados a valores padrão para cada tipo de dado”
O seguinte código imprime “catName” duas vezes. Mas “Um construtor ou qualquer inicialização não são chamados durante
a desserialização do objeto”.
Alguem pode elucidar esse problema de inicialização de um objeto serializado?
O que acontece é quando o objeto é serializado ele serializa também o seu atributo catName.
Explicando, quando ele cria o objeto e imprime ele, a class Cat sobrescreve o método toString que imprime a variável catName com o conteúdo “catName”. Quando vc deserializa o objeto é recuperado com os mesmos dados com que foram gravados, por isso quando vc imprime o objeto cat2 ele imprime “catName”, também.
Dica: tente alterar o valor da variável catName antes da seriailzação para ver o que acontece…
O que acontece felipe.sales é que quando vc serializa um objeto ele guarda seus valores no seu arquivo, até ai tudo bem. Agora quando vc des-serializa o objeto o contrutor não será chamado pois o que irá acontecer no lugar do contrutor é a leitura dos valores que estão no arquivo e colocados nas variáveis da classe. Agora referente a variaveis transient o que ocorre é o seguinte. Elas não são serializadas junto com as outras variáveis não transient, por isso quando vc des-serializar um objeto as variaveis transient sempre retornarão com o valor padrão (null/0). Tente fazer um exemplo colocando no contrutor de uma classe e depois imprima seu valor. Perdoe-me se estou errado.
private int v1 = 0;
transient int v2;
public Construtor() {
v2 = 7;
}