Dies ist eine einfache Frage, aber ich bin wirklich davon abgehört. Ich versuchte ein Duplikat zu finden und googelte es, aber ich war mehr überrascht, als ich keine befriedigende Antwort finden konnte.
%Vor% In dieser Anweisung ist .Scanner
die Klasse
.util
ist der Name des Pakets
Was ist java
oder javax
oder was würde vor der ersten Periode generell stehen?
UPDATE:
Ich habe auch dieses Bild gefunden:
Stimmt es?
Nach dem JLS 7.1 :
Die Mitglieder eines Pakets sind seine Unterpakete und alle Klassen der obersten Ebene (§7.6, §8) und die Oberflächentypen der obersten Ebene (§9), die in allen Kompilierungseinheiten (§7.3) des Pakets deklariert sind.
Zum Beispiel in der Java SE-Plattform-API:
Das Paket java hat die Unterpakete awt, applet, io, lang, net und util, aber keine Kompilierungseinheiten.
Das Paket java.awt hat ein Unterpaket namens image sowie eine Anzahl von Kompilierungseinheiten, die Deklarationen von Klassen- und Schnittstellentypen enthalten.
Wenn der vollständig qualifizierte Name (§6.7) eines Pakets P ist und Q ein Unterpaket von P ist, dann ist P.Q der vollständig qualifizierte Name des Unterpakets und bezeichnet außerdem ein Paket.
So können Sie daraus entnehmen:
java
ist ein Paket ohne Klassen, nur Unterpakete. util
ist ein Unterpaket von java
, dessen vollständig qualifizierter Name java.util
ist. util
bezeichnet kein Paket, java.util
. "Ich habe auch dieses Bild gefunden: ... Stimmt es?"
Ja, util
ist ein Unterpaket von java
. % Co_de% ist jedoch kein Paket. util
ist ein Paket.
Sie können Pakete als Verzeichnisstruktur betrachten, wenn Sie möchten, wobei jedes Unterpaket ein Ordner in seinem äußeren Paket ist. So würde es einen "Ordner" Java geben, und darin einen anderen "Ordner" util. Ein Paket wird mit seinem vollständig qualifizierten Namen ("vollständiger Pfad") bezeichnet, sodass java.util
ein Paket und java
ein Paket ist. java/util
ist kein Paket. Aber Pakete, die durch eine Verzeichnisstruktur dargestellt werden, sind keine Spezifikationen. Es ist nur eine übliche Implementierung. Es hängt vom Host-System ab, wie Pakete gespeichert werden ( JLS 7.2 ).
Klassen in Java werden durch einen vollständig qualifizierten Namen identifiziert, der aus einer Verkettung des Pakets der Klasse und dem Namen der Klasse (und eventueller äußerer Klassen) besteht. Im Allgemeinen in einer Importanweisung wie:
%Vor% Alles außer dem letzten Punkt-getrennten Feld ist der Paketname ( foo.bar.baz
) und das letzte Feld ist der Klassenname ( MyClass
). In Ihrem Beispiel ist java.util
der Paketname und Scanner
ist der Klassenname.
Der Prozess ist eigentlich ein bisschen komplizierter, da interne / verschachtelte Klassen und Schnittstellen beteiligt sein können, aber Sie bekommen die Idee.
import java.util.Scanner
sagt.
Scanner s = new Scanner()
), wird die vom Import gefundene Klasse verwendet. Alternativ könntest du den Import nicht machen und java.util.Scanner s = new java.util.Scanner()
machen, aber du kannst sehen, wie das schnell unhandlich wird, besonders wenn du es an vielen Stellen innerhalb deiner Datei verwendest. Importe sind nur eine praktische Möglichkeit, die Anzahl der Versionen Scanner
, die Sie meinen, wenn Sie auf Scanner
verweisen, immer wieder zu reduzieren.
Einige Punkte:
java.util
, nicht util
. "Java" ist nur ein Teil des Paketnamens. AbC123.XYZ.foo
ist ein gültiger Paketname java
beginnen, Teil des JDK (plus Erweiterungen). Es gibt nichts in der Sprache, das dies spezifiziert oder erzwingt java
und util
sind Namen verschachtelter Pakete. java.util
ist ein Pfad zum endgültigen Paket.
Sie sind Verzeichnisse in rt.jar
file.
rt.jar
Datei ist ein zip
Archiv, Sie können es mit 7-zip
Programm ansehen.
Scanner
ist eine Scanner.class
Datei innerhalb java/util
Verzeichnis innerhalb rt.jar
import java.util.Scanner
-Direktive erlaubt nur die Verwendung von Scanner
-Klassennamen im Code, ohne den vollständigen Pfad anzugeben.
import java.util.*
erlaubt Ihnen, ALLE Klassennamen in java.util
ohne Pfad zu verwenden.
import static java.util.Scanner.*
erlaubt Ihnen, ALLE statischen Member in Scanner
ohne Pfade zu verwenden. Aber es gibt keine.
Liste aller Pakete in JRE sind hier: Ссылка
1) Java ist ein Paket. (stellt auch einen Ordner im Dateisystem dar).
Es befindet sich direkt im Klassenpfad, daher wird es von Ihrem Programm als 'Java' referenziert. (Unterordner im Java-Ordner)
2) util ist ein Paket innerhalb eines Java-Pakets (daher als 'java.util' bezeichnet).
3) Der Scanner ist eine Klasse im util-Paket (daher 'java.util.Scanner')
Sie können so viele verschachtelte Pakete haben wie 'mypackage1.mypackage2.mypackage3. ... und so weiter, solange mein Paket1 im Klassenpfad ist.
Hoffe, das hilft
Die import-Anweisung repräsentiert eine Hierarchie
importieren Sie java.util.Scanner;
Java ist das Paket
util ist das Unterpaket (innerhalb von Java)
Scanner ist die Klasse (inside util)
importieren Sie java.util. *;
Der Klassenname könnte mit einem Sternchen,
belegt werden
und das bedeutet, dass ALLE Klassen in das erwähnte Unterpaket importiert werden.