{"id":3476,"date":"2016-11-03T11:34:05","date_gmt":"2016-11-03T09:34:05","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=3476"},"modified":"2016-11-03T11:34:05","modified_gmt":"2016-11-03T09:34:05","slug":"statischer-import","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2016\/11\/statischer-import\/","title":{"rendered":"Statischer Import"},"content":{"rendered":"<p>Die import-Deklaration informiert den Compiler \u00fcber die Pakete, sodass ein Typ nicht mehr voll qualifiziert werden muss, wenn er im import-Teil explizit aufgef\u00fchrt wird oder wenn das Paket des Typs \u00fcber * genannt ist.<\/p>\n<p>Falls eine Klasse statische Methoden oder Konstanten vorschreibt, werden ihre Eigenschaften immer \u00fcber den Typnamen angesprochen. Java bietet mit dem statischen Import die M\u00f6glichkeit, die statischen Methoden oder Variablen ohne vorangestellten Typnamen sofort zu nutzen. W\u00e4hrend also das normale import dem Compiler Typen benennt, macht ein statisches import dem Compiler Klasseneigenschaften bekannt, geht also eine Ebene tiefer.<\/p>\n<p>Beispiel:\u00a0Binde f\u00fcr die Bildschirmausgabe die statische Variable out aus System statisch ein:<\/p>\n<pre>import\u00a0static\u00a0java.lang.System.out;<\/pre>\n<p>Bei der sonst \u00fcblichen Ausgabe \u00fcber System.out.printXXX(\u2026) kann nach dem statischen Import der Klassenname entfallen, und es bleibt beim out.printXXX(\u2026)<\/p>\n<p>Bilden wir in einem Beispiel mehrere statische Eigenschaften mit einem statischem import ein:<\/p>\n<pre> import\u00a0static\u00a0java.lang.System.out;\n import\u00a0static\u00a0javax.swing.JOptionPane.showInputDialog;\n import\u00a0static\u00a0java.lang.Integer.parseInt;\n import\u00a0static\u00a0java.lang.Math.max;\n import\u00a0static\u00a0java.lang.Math.min;\n \n class\u00a0StaticImport\u00a0{\n \n \u00a0\u00a0public\u00a0static\u00a0void\u00a0main(\u00a0String[]\u00a0args\u00a0)\u00a0{\n \u00a0\u00a0\u00a0\u00a0int\u00a0i\u00a0=\u00a0parseInt(\u00a0showInputDialog(\u00a0\"Erste\u00a0Zahl\"\u00a0)\u00a0);\n \u00a0\u00a0\u00a0\u00a0int\u00a0j\u00a0=\u00a0parseInt(\u00a0showInputDialog(\u00a0\"Zweite\u00a0Zahl\"\u00a0)\u00a0);\n \u00a0\u00a0\u00a0\u00a0out.printf(\u00a0\"%d\u00a0ist\u00a0gr\u00f6\u00dfer\u00a0oder\u00a0gleich\u00a0%d.%n\",\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0max(i,\u00a0j),\u00a0min(i,\u00a0j)\u00a0\u00a0);\n \u00a0\u00a0}\n }<\/pre>\n<h4>Mehrere Typen statisch importieren<\/h4>\n<p>Der statische Import<\/p>\n<pre>import\u00a0static\u00a0java.lang.Math.max;\nimport\u00a0static\u00a0java.lang.Math.min;<\/pre>\n<p>bindet die statische max(\u2026)\/min(\u2026)-Methode ein. Besteht Bedarf an weiteren statischen Methoden, gibt es neben der individuellen Aufz\u00e4hlung eine Wildcard-Variante:<\/p>\n<pre>import\u00a0static\u00a0java.lang.Math.*;<\/pre>\n<p>Best Practice:\u00a0Auch wenn Java diese M\u00f6glichkeit bietet, sollte der Einsatz ma\u00dfvoll erfolgen. Die M\u00f6glichkeit der statischen Importe ist n\u00fctzlich, wenn Klassen Konstanten nutzen wollen, allerdings besteht auch die Gefahr, dass durch den fehlenden Typnamen nicht mehr sichtbar ist, woher die Eigenschaft eigentlich kommt und welche Abh\u00e4ngigkeit sich damit aufbaut. Auch gibt es Probleme mit gleichlautenden Methoden: Eine Methode aus der eigenen Klasse \u00fcberdeckt statische importierte Methoden. Wenn also sp\u00e4ter in der eigenen Klasse \u2013 oder Oberklasse \u2013 eine Methode aufgenommen wird, die die gleiche Signatur hat wie eine statisch importierte Methode, wird das zu keinem Compilerfehler f\u00fchren, sondern sich die Semantik \u00e4ndern, weil jetzt die neue eigene Methode verwendet wird, und nicht mehr die statisch importierte.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die import-Deklaration informiert den Compiler \u00fcber die Pakete, sodass ein Typ nicht mehr voll qualifiziert werden muss, wenn er im import-Teil explizit aufgef\u00fchrt wird oder wenn das Paket des Typs \u00fcber * genannt ist. Falls eine Klasse statische Methoden oder Konstanten vorschreibt, werden ihre Eigenschaften immer \u00fcber den Typnamen angesprochen. Java bietet mit dem statischen [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[1],"tags":[],"class_list":["post-3476","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3476","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=3476"}],"version-history":[{"count":5,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3476\/revisions"}],"predecessor-version":[{"id":3481,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3476\/revisions\/3481"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=3476"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=3476"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=3476"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}