Dans les cas suivants, l'objet est créé sans utiliser le constructeur. ・ Lors du clonage ・ Lors de la désérialisation
Exécutez ce programme et assurez-vous que le "Constructeur" n'est affiché qu'une seule fois
Tips0013.java
package jp.avaj.lib.algo;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import jp.avaj.lib.test.L;
class Tips0013 {
public static void main(String[] args) throws CloneNotSupportedException, FileNotFoundException, IOException, ClassNotFoundException {
//
Data data = new Data();
//
L.p("Exécuter le clonage");
Data copyData = (Data)data.clone();
//
L.p("Exécuter la sérialisation");
String filename = "./Tips0013.txt";
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream(filename));
oos.writeObject(data);
}
finally {
oos.close();
}
L.p("Exécutez la désérialisation");
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new FileInputStream(filename));
Data newData = (Data)ois.readObject();
}
finally {
ois.close();
}
//Supprimer le fichier de travail
File workFile = new File(filename);
workFile.delete();
L.p("Sortie de traitement");
}
private static class Data implements Cloneable,Serializable {
private String v;
public Data() {
v = "aaaa";
L.p("constructeur");
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
}
Le résultat est le suivant.
tips0014.txt
constructeur
Exécuter le clonage
Exécuter la sérialisation
Exécutez la désérialisation
Sortie de traitement