/ / Java Import Verwirrung - Java, Import

Java Import Verwirrung - Java, Import

Was ist der Unterschied zwischen:

java.awt.*;

und:

java.awt.event.*;

Ich finde beides in vielen Programmen.

Antworten:

33 für die Antwort № 1

Pakete in Java sind nicht verschachtelt.

Wenn du import java.awt.*, Sie importieren nur alle Klassen und Schnittstellen, die im Paket enthalten sind java.awt - Sie sind nicht Importieren Sie alle Pakete, die unter sind java.awt, sowie java.awt.event.

Auch wenn es so aussieht, als ob Pakete verschachtelt sind (d. H. Es sieht so aus, als ob java.awt.event ist ein "Unterpaket" von java.awt), das ist nicht wirklich der Fall. Sie sollten beachten java.awt und java.awt.event als zwei verschiedene, nicht verwandte Pakete, die zufällig einen gemeinsamen Teil in ihren Namen haben.


5 für die Antwort № 2

Der erste importiert nur Typen aus dem Paket java.awt (aber nicht seine Unterpakete) und die anderen Importe nur aus java.awt.event (aber nicht aus anderen Paketen).

Während Pakete in Java können (und sollten)In einer Hierarchie organisiert, ist die Importanweisung eher "konservativ" - wenn Sie alle Typen aus diesem Paket importieren, erhalten Sie nur diejenigen, die spezifisch auf dieser Ebene sind, nicht auf einer niedrigeren Ebene in der Hierarchie.

Ich denke, dass das Grundprinzip dahinter ist zu vermeidenfalsche Importe. Es ist im Allgemeinen eine gute Idee, so wenig wie möglich zu importieren - nur das Notwendigste, um Kopplung, Abhängigkeiten und Ambiguitäten zu vermeiden (zB was passiert, wenn eine neue Klasse zum Paket hinzugefügt wird, deren Name mit einem Namen in Konflikt steht) ein anderes Paket?). Das ist der Grund, warum, wenn Sie Eclipse verwenden, um Ihre Importe zu organisieren, fügt es tatsächlich spezifische Importanweisungen innerhalb der Stern-Version hinzu, obwohl das zusätzliche Zeilen bedeutet. Alles in Unterpackages importieren wäre noch schlimmer, Sie werden wirklich alles bekommen.

Darüber hinaus ist eine gängige Praxis, etwas BesonderesZweckklassen und implementierungsspezifische Klassen in ihren eigenen Unterpaketen. Oft möchten Sie speziell vermeiden, sie zu importieren, es sei denn, entscheidend. Erneut würde der Import des gesamten Teilbaums damit in Konflikt geraten.


1 für die Antwort № 3

Wie viele schon gesagt haben.

import java.awt. * importiert keine Klassen in java.awt.event ...

Und der Unterschied zwischen diesen beiden Paketen ist, dass java.awt. * Klassen wie einen Frame, Button usw. enthält und das Paket java.awt.event. * Alle Event / Listener einschließt, die passieren können.

Beispiel: Um einen Button zu erstellen, benötigen Sie die Klassejava.awt.Button Wenn Sie jedoch möchten, dass eine Aktion ausgeführt wird, wenn Sie auf die Schaltfläche klicken, benötigen Sie einen java.awt.event.ActionListener, der auf den Klick "wartet" und dann ein java.awt.event.ActionEvent erzeugt.


0 für die Antwort № 4

java.awt.* ist nicht ein regelmäßiger Ausdruck, was ich denke, dass Sie erwarten / denken.

java.awt.* gibt Ihnen nur die Klassen in genau diesem Paket und nicht die verschachtelten Pakete. Stellen Sie sich die Namensraum-Kollisionen vor, die darunter involviert sind!

import com.*

Es sollte angemerkt werden, dass es als schlechte Praxis gilt zu verwenden *. Explicate-Klassennamenimporte werden bevorzugt.

Für weitere Informationen: Wikipedia: Namensraum (Informatik)