{"id":7212,"date":"2016-07-17T02:39:02","date_gmt":"2016-07-17T00:39:02","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=7212"},"modified":"2018-09-07T16:26:41","modified_gmt":"2018-09-07T14:26:41","slug":"neue-objekte-erzeugen-java","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=7212","title":{"rendered":"Welche M\u00f6glichkeiten der Java Objekt-Erzeugung gibt es?"},"content":{"rendered":"<p>Meistens erzeugt man Objekte in Java mit <strong>new<\/strong>. Es gibt aber noch ein paar andere M\u00f6glichkeiten.<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2016\/07\/Urlaub.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2016\/07\/Urlaub-1024x598.png\" alt=\"Urlaub\" width=\"640\" height=\"374\" class=\"aligncenter size-large wp-image-7215\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2016\/07\/Urlaub-1024x598.png 1024w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2016\/07\/Urlaub-300x175.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2016\/07\/Urlaub-768x448.png 768w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p>Wir haben diese <strong>Farbe<\/strong> Testklasse:<\/p>\n<pre class=\"lang:java decode:true \" >package de.wenzlaff.mqtt.client;\r\n\r\nimport java.io.Serializable;\r\n\r\n\/**\r\n * Farben Klasse.\r\n * \r\n * @author Thomas Wenzlaff\r\n *\r\n *\/\r\npublic class Farbe implements Cloneable, Serializable {\r\n\r\n\tprivate static final long serialVersionUID = 8660877851154300583L;\r\n\r\n\tprivate String farbe = \"rot\";\r\n\r\n\tpublic Farbe() {\r\n\t\tSystem.out.println(\"Konstruktor aufruf\");\r\n\t}\r\n\r\n\tpublic String getFarbe() {\r\n\t\treturn farbe;\r\n\t}\r\n\r\n\tpublic void setFarbe(String farbe) {\r\n\t\tthis.farbe = farbe;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic String toString() {\r\n\t\treturn \"Farbe: \" + farbe + \" mit HashCode=\" + hashCode() + \"\\n\";\r\n\t}\r\n\r\n\t@Override\r\n\tpublic int hashCode() {\r\n\t\tfinal int prime = 31;\r\n\t\tint result = 1;\r\n\t\tresult = prime * result + ((farbe == null) ? 0 : farbe.hashCode());\r\n\t\treturn result;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic boolean equals(Object obj) {\r\n\t\tif (this == obj)\r\n\t\t\treturn true;\r\n\t\tif (obj == null)\r\n\t\t\treturn false;\r\n\t\tif (getClass() != obj.getClass())\r\n\t\t\treturn false;\r\n\t\tFarbe other = (Farbe) obj;\r\n\t\tif (farbe == null) {\r\n\t\t\tif (other.farbe != null)\r\n\t\t\t\treturn false;\r\n\t\t} else if (!farbe.equals(other.farbe))\r\n\t\t\treturn false;\r\n\t\treturn true;\r\n\t}\r\n\r\n\t@Override\r\n\tprotected Object clone() throws CloneNotSupportedException {\r\n\t\treturn super.clone();\r\n\t}\r\n\r\n}<\/pre>\n<p>und haben diese M\u00f6glichkeiten Objekte zu erzeugen. <!--more--><\/p>\n<pre class=\"lang:java decode:true \" >package de.wenzlaff.mqtt.client;\r\n\r\nimport java.io.FileInputStream;\r\nimport java.io.FileOutputStream;\r\nimport java.io.ObjectInputStream;\r\nimport java.io.ObjectOutputStream;\r\nimport java.lang.reflect.Constructor;\r\n\r\n\/**\r\n * Beispiel f\u00fcr die unterschiedlichen M\u00f6glichkeiten der Objekterzeugung.\r\n * \r\n * @author Thomas Wenzlaff\r\n *\r\n *\/\r\npublic class NeueObjekte {\r\n\r\n\tprivate static final String FARBE_DATEI = \"farbe.obj\";\r\n\r\n\tpublic static void main(String[] args) throws Exception {\r\n\r\n\t\t\/\/ es wird ein neues Objekt erzeugt, und implizit der Konstruktor ohne\r\n\t\t\/\/ Parameter aufgerufen, das ist der normale Weg\r\n\t\tFarbe eins = new Farbe();\r\n\t\teins.setFarbe(\"erste Test Farbe\");\r\n\r\n\t\tSystem.out.println(\"1. Test: \" + eins);\r\n\r\n\t\t\/\/ es geht aber auch \u00fcber die newInstance der Class Klasse \u00fcber\r\n\t\t\/\/ Reflections\r\n\t\t\/\/ hier kann es zu einer java.lang.ClassNotFoundException kommen\r\n\t\tFarbe zwei = (Farbe) Class.forName(\"de.wenzlaff.mqtt.client.Farbe\").newInstance();\r\n\t\tzwei.setFarbe(\"zweite Test Farbe\");\r\n\r\n\t\tSystem.out.println(\"2. Test: \" + zwei);\r\n\r\n\t\t\/\/ 3. M\u00f6glichkeit\r\n\t\tFarbe drei = Farbe.class.newInstance();\r\n\t\tdrei.setFarbe(\"dritte Test Farbe\");\r\n\r\n\t\tSystem.out.println(\"3. Test: \" + drei);\r\n\r\n\t\t\/\/ oder \u00fcber newInstance mit getConstructor\r\n\t\tConstructor&lt;Farbe&gt; konstruktor = Farbe.class.getConstructor();\r\n\t\tFarbe vier = konstruktor.newInstance();\r\n\t\tvier.setFarbe(\"vierte Test Farbe\");\r\n\r\n\t\tSystem.out.println(\"4. Test: \" + vier);\r\n\r\n\t\t\/\/ oder mit Clone, dann muss die Klasse aber Cloneable implementieren,\r\n\t\t\/\/ es wird aber kein Konstruktor aufgerufen!\r\n\t\tFarbe fuenf = (Farbe) vier.clone();\r\n\t\tfuenf.setFarbe(\"f\u00fcnfte Test Farbe\");\r\n\r\n\t\tSystem.out.println(\"5. Test: \" + fuenf);\r\n\r\n\t\t\/\/ oder \u00fcber Serialisation, dann muss die Klasse aber Serializable\r\n\t\t\/\/ implementieren sonst kommt eine java.io.NotSerializableException\r\n\r\n\t\t\/\/ zuerst mal ein Farb Objekt in eine Datei speichern\r\n\t\tObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(FARBE_DATEI));\r\n\t\teins.setFarbe(\"sechste Test Farbe\");\r\n\t\tout.writeObject(eins);\r\n\t\tout.close();\r\n\r\n\t\t\/\/ und das Serialisierte Objekt, als Farbe einlesen, es wird auch kein\r\n\t\t\/\/ Konstruktor aufgerufen!\r\n\t\tObjectInputStream in = new ObjectInputStream(new FileInputStream(FARBE_DATEI));\r\n\t\tFarbe sechs = (Farbe) in.readObject();\r\n\t\tin.close();\r\n\r\n\t\tSystem.out.println(\"6. Test: \" + sechs);\r\n\t}\r\n\r\n}\r\n<\/pre>\n<p>Das Ergebniss ist:<\/p>\n<pre class=\"lang:default decode:true \" >Konstruktor aufruf\r\n1. Test: Farbe: erste Test Farbe mit HashCode=-1239076332\r\n\r\nKonstruktor aufruf\r\n2. Test: Farbe: zweite Test Farbe mit HashCode=-1601416519\r\n\r\nKonstruktor aufruf\r\n3. Test: Farbe: dritte Test Farbe mit HashCode=1712274465\r\n\r\nKonstruktor aufruf\r\n4. Test: Farbe: vierte Test Farbe mit HashCode=-122237158\r\n\r\n5. Test: Farbe: f\u00fcnfte Test Farbe mit HashCode=120364780\r\n\r\n6. Test: Farbe: sechste Test Farbe mit HashCode=-1862501858<\/pre>\n<p>Kennt Ihr noch andere M\u00f6glichkeiten? Dann bitte posten oder liken.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Meistens erzeugt man Objekte in Java mit new. Es gibt aber noch ein paar andere M\u00f6glichkeiten. Wir haben diese Farbe Testklasse: 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 = &#8222;rot&#8220;; &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=7212\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eWelche M\u00f6glichkeiten der Java Objekt-Erzeugung gibt es?\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[220,5,79],"tags":[2178,2553,2552,2555,2554],"class_list":["post-7212","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-java","category-programmierung","tag-java","tag-new","tag-objekt-erzeugung","tag-reflection","tag-serialisieren"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/7212","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7212"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/7212\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7212"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7212"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7212"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}