Como é que a variável estática é serializada?

Aparentemente, as variáveis ​​estáticas podem ser serializadas (mas você não deve fazer isso), pois a serialização é o processo de salvar o estado de uma instância de uma classe e as variáveis ​​estáticas são comuns a todas as instâncias. Eles não dizem nada sobre o estado da instância, portanto, não faria sentido.

Suponha que você tenha permissão para serializar uma variável estática. Então, ao desserializar a instância, você receberá uma cópia antiga dessa variável, que pode ter sido alterada desde então. Como a variável estática é compartilhada entre todas as instâncias da classe, uma alteração na variável de qualquer instância deve ser refletida nessa instância.

Portanto, eles não devem ser serializados, porque a variável nessas condições pode violar seu contrato como variável estática.

Serialização : -

  • Não deve serializar as variáveis ​​estáticas.

Desserialização : -

  • A instância obterá os campos estáticos que foram carregados com a classe. Portanto, quaisquer alterações que possam ter sido feitas para essa variável também serão responsáveis ​​por essa instância.
Resposta 1

A saída atual da classe MySerializable está abaixo

x : 8, y :9
x : 0, y :9

Nesse caso, a variável estática está sendo impressa após a chamada do método toString () ; nesse momento, ela lê o valor da variável no nível da classe.

Tente o seguinte:

Adicione esta linha de código na classe MySerializable após o //Serializebloco

AnotherClass.y = 5;

a saída é:

x : 8, y :9
x : 0, y :5

isso significa que a variável estática não está armazenando no arquivo, ela será lida dinamicamente pelo método toString ().

Resposta: 2

- Serialization é usado para salvar o estado do objeto durante a serialização; portanto, durante a desserialização, o estado salvo pode ser usado para ressuscitar um objeto idêntico no heap.

- Sim static variável pode ser, serializedmas não faz sentido .....

Resposta: 3

Variáveis ​​estáticas não podem ser e não são serializadas.

Sua pergunta parece se basear no fato de que você está vendo o mesmo valor da variável estática após a serialização e antes da serialização, mas isso não se deve ao fato de o valor ser serializado e restaurado.

Esse comportamento ocorre porque o inicializador estático para essa variável estática o define como 9 e nunca é alterado.

Para verificar se as variáveis ​​estáticas não são serializadas, você pode executar a alteração sugerida pelo NPKR, modificar o campo estático entre serialização e desserialização ou fazer o seguinte:

Execute este programa e, em seguida, comente o bit que executa a serialização. Como resultado, você terá a versão serializada antiga em disco.

Em seguida, altere o inicializador estático do campo estático para y = 5e execute o programa novamente: você obterá 'x: 0 y: 5 as the output, because the value9' do campo estático não foi restaurado.

Resposta: 4

Eu poderia jurar que, há alguns meses, baixei uma cópia do Java 1.5 SE JDK e não precisei fornecer informações sobre meu primeiro filho. Hoje, eu tive que passar pelo registro e nós ...

Obtendo esse erro ao executar um teste simples. > versão do java -version java "1.8.0_102"> versão do compilador javac -version javac 1.8.0_102 Exceção no encadeamento "main" java.lang ....

Estou tentando obter imagens do facebook graph api. O link fornecido para imagens no arquivo JSON fornece imagens do tamanho 130x130.eg aqui, quero extrair tamanhos maiores, digamos 600x600. Como faço isso? ...

Se eu quiser suporte ao EJB 3.0 e quiser executar o Java 7, preciso do Java EE ou posso continuar com o SE? No passado (muitas versões do JDK atrás), era necessário a versão "J2EE" do JDK para executar o EJB. Apareceria ...