2012-08-26 9 views
7

Studieren von Java, habe ich über eine, für mich eher verwirrend Eigenschaft vieler Tutorials gedacht. Betrachten Sie die folgenden zwei Importen aus einer Probe Tutorial:Sollte "foo. * Nicht importieren" auch das Unterpaket "foo.bar. *" Enthalten?

import java.awt.*; 
import java.awt.event.*; 

Die erste Zeile offensichtlich importiert das Paket java.awt, und die zweite AWTs subpackage. Aber sollte der Asterix nicht alle Unterpakete enthalten? Daher sollte Zeile eins den Trick machen - Zeile zwei sollte nicht benötigt werden? Wenn nicht: Was ist der wahre Zweck/die Verwendung des Asterix?

Zum Beispiel mit SELECT * FROM foo in MySQL wählt alle Felder aus einer Tabelle, vielleicht bin ich dumm anzunehmen, dass dies natürlich der Fall ist.

+1

Es wird verwendet, um alle Klassen im angegebenen Paket (d. H. Alle Klassen in 'java.awt') zu importieren, nicht die Unterpakete und ihre Klassen. – Baz

Antwort

13

Nein, Pakete werden als Ganzes genommen. Auch wenn es oft nützlich ist, sie hierarchisch zu denken, gibt es in der Java-Sprache oder Compilation, die besagt, dass java.awt.eventzujava.awt gehört, keine Vorstellung.

Ihr Vergleich mit SQL-Tabellen ist nicht ganz richtig, weil es in SQL-Datenbanken keine Untertabelle gibt. Stattdessen stellen Sie sich einen Tisch hatten alle Klassen vertreten, mit den folgenden Einträgen:

ID | Package | Name 
-------------------------- 
1 | awt  | SomeClassName1 
2 | awt.event | SomeClassName2 

Nun, wenn Sie AWT Klassen erhalten wollte, würde man sagen:

SELECT * FROM MyTable WHERE Package = 'awt' 

würden Sie nicht erwarte, dass dies Ihnen beide Einträge gibt, nur weil der Paketname mitawt beginnt, würden Sie?

+0

Wirklich, wirklich gute Antwort! Danke vielmals! – Zar

0

Siehe meine Antwort here (und mein Kommentar). Ein Platzhalter geht nur 1 Ebene tief, nicht in Unterpakete

0

Jeder Paketname ("a.b.c") ist ein eigenständiges Paket. Zwei Pakete mit ähnlichem Benennungs-Präfix (zum Beispiel "a.b.c" und "a.b.d") sind separate Pakete für die Sprache, sowohl für Namespaces als auch für die Zugriffskontrolle.

Für den Menschen stellt dies natürlich eine mögliche Beziehung zwischen den Paketen.

Verwandte Themen