[java] Come vengono chiamati i costruttori durante la serializzazione e la deserializzazione?



2 Answers

Durante la deserializzazione, il costruttore predefinito accessibile viene chiamato per la prima classe nella gerarchia dell'ereditarietà che non implementa Serializable.

> Una classe Serializable deve avere accesso al costruttore no-arg della sua prima superclasse non serializzabile

Question

Come vengono chiamati i costruttori durante la serializzazione e la deserializzazione

  1. Quando c'è una classe che implementa serializzabile?
  2. Quando c'è una relazione genitore / figlio e solo le implementazioni figlio serializzabili?
  3. Quando c'è una relazione genitore / figlio e sia l'implementazione genitore che quella secondaria sono serializzabili?



Come vengono chiamati i costruttori durante la serializzazione e la deserializzazione

  1. Quando c'è una classe che implementa serializzabile?

  2. Quando c'è una relazione genitore / figlio e solo le implementazioni figlio serializzabili?

  3. Quando c'è una relazione genitore / figlio e sia l'implementazione genitore che quella secondaria sono serializzabili?

Secondo me la risposta alla tua domanda è:

1) Se una classe sta implementando serializzabile e solo quella classe non esiste alcuna classe genitore. il flusso del costruttore è come il costruttore predefinito sarà chiamato della classe genitore che non è implementato serializzabile. in questo caso è una classe Object. quindi il costruttore No-arg della classe Object verrà eseguito e creerà un oggetto fittizio e mentre chiama il campo readObject () verrà impostato per riflessione e dati che verranno salvati nella memoria o nel file.

2) se solo il figlio implementa serializzabile, il flusso andrà fino alla classe base che non è serializzabile. se dierect la classe base non è serializzata allora (quella classe dovrebbe avere il costruttore NO-Arg) in questo caso il costruttore NO-Arg verrà eseguito per la classe base.

3) se tutti i genitori sono serializzati, il flusso andrà alla classe Object e il costruttore No-Arg eseguirà la classe Object.

Nota: ma è possibile serializzare implementando l'interfaccia esternalizzabile, quindi il costruttore predefinito (NO-ARG) verrà chiamato di quella classe solo non della classe genitore sul processo di deserializzazione.




Il processo di deserializzazione non utilizza il costruttore dell'oggetto: l'oggetto viene istanziato senza un costruttore e inizializzato utilizzando i dati dell'istanza serializzata. L'unico requisito per il costruttore per una classe che implementa Serializable è che la prima superclasse non serializzabile nella sua gerarchia di ereditarietà deve avere un costruttore senza argomenti.






Related