import java.*; vs import java.awt.TextArea

SNB1998

Mitglied
Hallo Leute,

ich arbeite Zuhause mit Eclipse, bei welches die Imports ja alle gespeichert hat.

In der Schule haben sie aber nur BlueJ, was nicht die Funktion zum automatischen Importieren hat. Das Internet ist auch aus, weshalb ich den Import nicht googlen kann.

Ich kenne nur diese beiden Import-gruppen:

Java:
import java.*;
import javax.*;

Gibt es noch andere "Gruppen"?

Was sind Vor- und Nachteile von
Java:
import javax.*;
gegenüber
Java:
import javax.swing.JFrame;
?

Danke im Voraus
SNB1998

(PS: Ich weiß das über dieses Thema viel diskutiert wird, deshalb bitte ich euch höflich zu bleiben.)
 
Es gab dazu mal eine sehr detaillierte Antwort von einem User, die ich leider nicht mehr finde.

Ich denke das kann jeder machen wie er möchte. Letztendlich ist es ja nichts anderes wie das importieren von bestimmten Ordnern. Ob es hierbei Vor- und Nachteile wie zum Beispiel Geschwindigkeit gibt, denke ich nicht.

Wenn man die Imports sehr konkret hinschreibt und nicht gleich den Überordner importiert könnte man von diesen zum Beispiel gleich mal sehen welche Klassen den ungefähr verwendet werden. Könnte bei undokumentiertem Code hilfreich sein.

Natürlich gibt es noch weitere und nicht nur Java und Javax. Um dies zu lesen reicht ein einfacher Blick in die API ( Java Platform SE 6 ) welche von eurem Lehrer zur Verfügung gestellt werden sollte. Wenn noch nicht geschehen, dann gleich mal protestieren. 🙂

Des Weiteren hat jede Bibliothek wiederum ihre eigenen Klassen und somit auch importe. Also wie du siehst, es gibt sehr viele ...
 
danke für deine antwort. 🙂 ich hoffe zwar es kommen noch mehr antworten, aber das reicht mir vorerst.

welche von eurem Lehrer zur Verfügung gestellt werden sollte. Wenn noch nicht geschehen, dann gleich mal protestieren.
Ich bin mir sicher, dass so was noch kommt, allerdings haben wir dieses Fach erst seit 1 Woche (spricht 5 Stunden bis jetzt) und wir haben heute erst angefangen BlueJ zu benutzen und eine ganz einfache while-schleife gemacht.
Mir haben noch nicht mal über die main-methode bis jetzt geredet.
 
Ich schätze dann will euer Lehrer erstmal einfach einsteigen. Daher schreibt ihr einfach java.* / javax.*
Du kannst auch zum Beispiel java.swing.* oder java.util.* oder so schreiben um dann halt die jeweiligen Klasse aus diesen packages zu importieren.

Ich nutze immer gerne den direkten import von den Klassen, die ich wirklich brauche.
Eclipse ist bei mir eigentlich Standard und da habe ich es mir so eingestellt. Ohne den Formatter und den CleanUp von Eclipse will ich eigentlich gar nicht mehr programmieren (zumindest in Java).
Natürlich macht es aber Sinn mit BlueJ anzufangen, eben weil man nicht viel vorgekaut bekommt. Zum Lernen ist das besser.
Ich schätze mal, dass ihr auch irgendwann Eclipse oder Netbeans im Unterricht nutzt oder ihr euch das selber aussuchen könnt.
Ansonsten kannst du doch auch Eclipse auf nen USB Stick ziehen oder habt ihr keine USB Ports?

Was bei der Arbeit mit BlueJ aber wirklich Pflicht wäre, sind die JavaDocs von der Standardbibliothek. Die sollte euer Lehrer euch wirklich zur Verfügung stellen...
 
Ich finde import java.* ein bisschen extrem. Klar sieht man im Programm dann was verwendet wird, aber ein Argument fürs ausschreiben der Importe finde ich dass man sieht wenn man eine eigene Klasse verwendet ob man nicht schon eine Klasse mit gleichem Namen importiert hat, vor allem wenn man diese Klasse gar nicht braucht. Ich importiere gerne nur die Dinge die ich wirklich brauche. Vor allem wenn man externe libraries verwendet kann man versehentliche Konflikte zwischen Namen von Klassen bekommen, und bei ausschreiben der Importe sieht man das schneller.
 
Wenn ich etwas importiere. Wird dann nicht der Import auch in der fertigen .jar Datei zu finden sein? Auch wenn ich ihn nicht benutzt habe? Ich denke durch das genaue angeben wird einfach das fertige Programm kleiner.
 
In der fertigen Jar, existiert dein Code ja als kompilierter Bytecode.
Die Imports werden beim Kompilieren aufgelöst und es werden nur die wirklich benutzten Imports überhaupt genutzt/gebraucht.
Der Rest wird ignoriert und wird auch niemals im Bytecode landen.

Im Bytecode sind alle package-Pfade absolut/ausgeschrieben.
Heißt so etwas wie String (was ja per standard importiert ist) ist in Bytecode "Ljava/lang/String;".

Angenommen du importierst javax.swing.* und nutzt aber NUR javax.swing.JFrame, dann wird im Bytecode nur an jeder Stelle, an der du JFrame nutzt "Ljava/swing/JFrame;" stehen. Mehr nicht. Das ursprünglich mal javax.swing.* importiert wurde, kann über den Bytecode nichtmehr rausgefunden werden.
Im Prinzip kann man ja auch im Quellcode alle Klassen mit packages ohne import ... verwenden. Also zum Beispiel auch
Code:
new javax.swing.JFrame("Hello World");
schreiben.

Beim kompilieren wird im Prinzip nur jeder import durchgeschaut, bis der Klassenname gefunden wird. Das hat sogar bei größeren Projekten eher einen Nachteil wenn man etwas wie java.* schreibt, weil jedes importiere package durchgeschaut werden muss, bis die Klasse gefunden wird, die gerade an der Reihe ist.
Ansich sollte das aber selbst bei großen Projekten nur im Millisekundenbereich bleiben (Die Dauer Eclipse zu kompilieren ist vielleicht dann eine oder zwei Sekunden länger, als wenn man nur explizit die Klassen importiert, die man auch nutzt. Aber das ist dann auch egal).
 
Also ist das eigentlich egal und das genaue Angeben des Pfades ist nur Kosmetik und dient sonst nur der besseren Übersicht. Ok. Wieder was gelernt. 😀
 

Zurück
Oben