"Olá, Amigo! Gostaria de contar mais um pequeno detalhe sobre a serialização."

Suponha que nossa classe contenha uma referência a algum InputStream . Então não pode ser serializado, certo?

"Certo. Você mesmo disse que os fluxos não podem ser serializados. E você não pode serializar um objeto que tenha dados não serializáveis."

"Certo. Exatamente. Mas e se a classe armazenar dados que não desempenham um papel significativo em seu estado e ainda impedir que a classe seja considerada uma classe serializável? Não importa que uma classe possa armazenar coisas desnecessárias. Isso pode ser descartado dados a qualquer momento e talvez até o faça - o tempo todo."

Para esses casos, os criadores do Java criaram a palavra-chave transient . Se escrevermos esta palavra-chave antes de uma variável de membro, ela será ignorada durante a serialização. Seu estado não será salvo ou reconstruído. Como se não existisse. Esta é a coisa certa para as situações que acabamos de considerar.

Lembra do cache e do modificador volátil ? Não há regras sem exceções .

Aqui está um exemplo dessa felicidade:

Um exemplo «cat» com uma variável que é invisível para serialização:

Código
class Cat implements Serializable
{
 public String name;
 public int age;
 public int weight;

 transient public InputStream in = System.in; 
}