Meistens erzeugt man Objekte in Java mit new. Es gibt aber noch ein paar andere Möglichkeiten.
Wir haben diese Farbe Testklasse:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | package de.wenzlaff.mqtt.client; import java.io.Serializable; /**  * Farben Klasse.  *   * @author Thomas Wenzlaff  *  */ public class Farbe implements Cloneable, Serializable { 	private static final long serialVersionUID = 8660877851154300583L; 	private String farbe = "rot"; 	public Farbe() { 		System.out.println("Konstruktor aufruf"); 	} 	public String getFarbe() { 		return farbe; 	} 	public void setFarbe(String farbe) { 		this.farbe = farbe; 	} 	@Override 	public String toString() { 		return "Farbe: " + farbe + " mit HashCode=" + hashCode() + "\n"; 	} 	@Override 	public int hashCode() { 		final int prime = 31; 		int result = 1; 		result = prime * result + ((farbe == null) ? 0 : farbe.hashCode()); 		return result; 	} 	@Override 	public boolean equals(Object obj) { 		if (this == obj) 			return true; 		if (obj == null) 			return false; 		if (getClass() != obj.getClass()) 			return false; 		Farbe other = (Farbe) obj; 		if (farbe == null) { 			if (other.farbe != null) 				return false; 		} else if (!farbe.equals(other.farbe)) 			return false; 		return true; 	} 	@Override 	protected Object clone() throws CloneNotSupportedException { 		return super.clone(); 	} } | 
und haben diese Möglichkeiten Objekte zu erzeugen.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | package de.wenzlaff.mqtt.client; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.lang.reflect.Constructor; /**  * Beispiel für die unterschiedlichen Möglichkeiten der Objekterzeugung.  *   * @author Thomas Wenzlaff  *  */ public class NeueObjekte { 	private static final String FARBE_DATEI = "farbe.obj"; 	public static void main(String[] args) throws Exception { 		// es wird ein neues Objekt erzeugt, und implizit der Konstruktor ohne 		// Parameter aufgerufen, das ist der normale Weg 		Farbe eins = new Farbe(); 		eins.setFarbe("erste Test Farbe"); 		System.out.println("1. Test: " + eins); 		// es geht aber auch über die newInstance der Class Klasse über 		// Reflections 		// hier kann es zu einer java.lang.ClassNotFoundException kommen 		Farbe zwei = (Farbe) Class.forName("de.wenzlaff.mqtt.client.Farbe").newInstance(); 		zwei.setFarbe("zweite Test Farbe"); 		System.out.println("2. Test: " + zwei); 		// 3. Möglichkeit 		Farbe drei = Farbe.class.newInstance(); 		drei.setFarbe("dritte Test Farbe"); 		System.out.println("3. Test: " + drei); 		// oder über newInstance mit getConstructor 		Constructor<Farbe> konstruktor = Farbe.class.getConstructor(); 		Farbe vier = konstruktor.newInstance(); 		vier.setFarbe("vierte Test Farbe"); 		System.out.println("4. Test: " + vier); 		// oder mit Clone, dann muss die Klasse aber Cloneable implementieren, 		// es wird aber kein Konstruktor aufgerufen! 		Farbe fuenf = (Farbe) vier.clone(); 		fuenf.setFarbe("fünfte Test Farbe"); 		System.out.println("5. Test: " + fuenf); 		// oder über Serialisation, dann muss die Klasse aber Serializable 		// implementieren sonst kommt eine java.io.NotSerializableException 		// zuerst mal ein Farb Objekt in eine Datei speichern 		ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(FARBE_DATEI)); 		eins.setFarbe("sechste Test Farbe"); 		out.writeObject(eins); 		out.close(); 		// und das Serialisierte Objekt, als Farbe einlesen, es wird auch kein 		// Konstruktor aufgerufen! 		ObjectInputStream in = new ObjectInputStream(new FileInputStream(FARBE_DATEI)); 		Farbe sechs = (Farbe) in.readObject(); 		in.close(); 		System.out.println("6. Test: " + sechs); 	} } | 
Das Ergebniss ist:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Konstruktor aufruf 1. Test: Farbe: erste Test Farbe mit HashCode=-1239076332 Konstruktor aufruf 2. Test: Farbe: zweite Test Farbe mit HashCode=-1601416519 Konstruktor aufruf 3. Test: Farbe: dritte Test Farbe mit HashCode=1712274465 Konstruktor aufruf 4. Test: Farbe: vierte Test Farbe mit HashCode=-122237158 5. Test: Farbe: fünfte Test Farbe mit HashCode=120364780 6. Test: Farbe: sechste Test Farbe mit HashCode=-1862501858 | 
Kennt Ihr noch andere Möglichkeiten? Dann bitte posten oder liken.

