Dúvida <=> Serialização

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?

[code]import java.io.*;

class Cat implements Serializable {
private String catName = “catName”; //<----------- INICIALIZAÇÃO
public String toString() { return catName;}
}

public class Teste {
public static void main(String[] args) {
Cat cat1 = new Cat();

	System.out.println("cat..: " + cat1); //<----------- IMPRIME "catName"
	
	try {
		FileOutputStream fo = new FileOutputStream("teste.do");
		ObjectOutputStream os = new ObjectOutputStream(fo);
		os.writeObject(cat1);
		os.close();
		
		FileInputStream fi = new FileInputStream("teste.do");
		ObjectInputStream oi = new ObjectInputStream(fi);
		Cat cat2 = (Cat) oi.readObject();
		
		System.out.println("cat..: " + cat2); //<----------- IMPRIME "catName"
		
	} catch(Exception e) {
		e.printStackTrace();
	}
}

}[/code]

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; }