Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Windows-Pfadangaben im Package- und import-Anweisungen

2 views
Skip to first unread message

Helmut Greschner

unread,
Apr 17, 2001, 4:40:41 AM4/17/01
to
Auf meinem (Windows)PC liegt mein java-Prog in folgendem Verzeichnis:

e:\java\demos\sparen.java
Meine Klassen-Sammlung soll in folgendem Verzeichnis sein:
e:\java\mc\
Der Package-Name ist: zins.java
Die einzubindende Klasse (in zins.java) heisst: euro.java

Meine Fragen:
Wie muss im Package zins.java die Anweisung lauten: "Package x;" ?
Wie muss in der Programmdatei sparen.java die import-Anweisung lauten:
"import y" ?

Was mir nicht klar ist, wie ich in java-Anweisungen Windows-Pfadangaben
formulieren soll; auf das Beispiel bezogen: was muss ich jeweils fuer x
bzw. y einsetzen?

Vielen Dank!
Helmut

Nico Seessle

unread,
Apr 17, 2001, 5:31:33 AM4/17/01
to
"Helmut Greschner" <HGres...@t-online.de> schrieb im Newsbeitrag
news:3ADC0188...@t-online.de...

> Auf meinem (Windows)PC liegt mein java-Prog in folgendem Verzeichnis:
>
> e:\java\demos\sparen.java
> Meine Klassen-Sammlung soll in folgendem Verzeichnis sein:
> e:\java\mc\
> Der Package-Name ist: zins.java

Heißen deine *Packages* wirklich irgendwas.java, oder ist das eine Datei in
deinem Dateisystem?

> Was mir nicht klar ist, wie ich in java-Anweisungen Windows-Pfadangaben
> formulieren soll

Gar nicht :-)

Nein, im ernst. Du hast ein Basis-Verzeichnis unterhalb dessen dein
Source-Code liegt. Wenn du nun deinen Source-Code "sauber" organisieren
willst kannst du ihn aufgrund logischer Zusammengehörigkeit in ein Package
packen. Alle Klassen in diesem Package haben dann als erste Code-Zeile
"package mein.package;". Um dies auch schön im Dateisystem abzubilden
ersetzt man einfach jeden Punkt in der Package-Anweisung durch den auf der
jeweiligen Plattform gültigen Pfadtrenner (Windows == Backslash (\)) und hat
dann unterhalb des Basis-Verzeichnis bei einem Package mit dem Namen
"mein.package" die Verzeichnis-Struktur

basis\
mein\
package\
MeineKlasse.java

Wenn da nun ein anderes Package hinzu kommt sieht es z.B. so aus:

basis\
mein\
package\
MeineKlasse.java
anderesPackage\
AndereKlasse.java

Und wenn nun MeineKlasse die Klasse AndereKlasse aus dem Package
"mein.anderesPackage" verwenden will schreibt man im Source-Code von
MeineKlasse "import mein.anderesPackage.*;".

Generell gilt - unabhängig von der Frage - noch folgendes:

- Klassennamen beginnen im allgemeinen mit einem großen Buchstaben (also
Sparen anstelle von sparen)
- Der Dateiname muß dem Klassennamen entsprechen (Klasse Sparen in Datei
Sparen.java, *nicht* zulässig ist sparen.java mit einem kleinen S)
- Packages sollten einem umgekehrten (eigenen) Domainnamen entsprechen um
nicht zu Duplikaten zu führen (Ausnahmen machen hier gerne größere Firmen
wie z.B. Oracle wo das Top-Level Package nur "oracle" heißt, aber das muß
man ja nicht nachmachen solange man nicht ebenso groß ist :-) )

Nico

Sascha Zepter

unread,
Apr 17, 2001, 5:34:15 AM4/17/01
to
Hmm,

folgendes:

Dein Classpath ist gesetzt auf "c:\classes".

Du hast ein folgenes Package definiert: "mypackage.rechner".
Demnach hast du im Verzeichnis "c:\classes" auch noch den Order
"mypackage\rechner\".
So in etwa: "c:\classes\mypackage\rechner\".

Nun, "mypackage.rechner" ist dein Package.
Mit "package mypackage.rechner" machst du also alle Klassen des Ordners
"c:\classes\mypackage\rechner\" innerhalb der neuen Klasse verfügbar.

Im Gegenzug macht die "import"-Anweisung das Ganze ein wenig anders.
Um alle Klassen des Ordners "mypackage\rechner" zu importieren müsstest du
dann schreiben "import mypackage.rechner.*;".
Damit wären dann alle Klassen des Ordners, genauso wie bei der
"package"-Anweisung, innerhalb der neuen Klasse verfügbar.

Anders kannst du mit "import" auch nur eine einzelne Klasse importieren, zum
Beispiel die Klasse "Zins" oder die Klasse "Rechner", nicht jedoch die
Klasse "Tilgung".
Dann schreibst du:
--- snip ---
import mypackage.rechner.Zins;
import mypackage.rechner.Rechner;
--- snip ---

Vorraussetzung ist, das die Klassen innerhalb des Classpathes liegen,
möglich wäre aber auch ein eigener Ordner, der in keiner Verbindung mit dem
Classpath steht. Hast du verschiedene Verzeichnisse im Classpath, dann ist
es auch möglich Dateien von Laufwerk E in einer Klasse, die auf Laufwerk C
liegt zu benutzen. Vorraussetzung ist, das die Verzeichnisse, aus denen du
Klassen nutzen möchtest im Classpath liegen. Klassennamen werden übrigens
nach Konventionen groß geschrieben.

Gruß,
Sascha

Mathias Konkol

unread,
Apr 17, 2001, 5:40:28 AM4/17/01
to
Hallo Nico!

Das hast Du wirklich gut erklärt. Ich will nur noch eins anfpügen was man nicht
vergessen sollte. Man muss einen Classpath für das Basis Verzeichnis setzen.
Entweder z.B. in der Autoexec.bat die Zeile SET CLASSPATH=C:\BASISVERZEICHNIS;
einfgügen oder beim
Übersetzen (javac.exe) und beim Ausführen (java.exe) den Classpath setzen, damit

das Java auch weis von wo aus es die Klassen suchen muss.

Bsp:
javac.exe -classpath c:\basisveerzeichnis; MeinJavaProgramm.java

Ich hoffe ich konnte auch ein wenig weiterhelfen. Das Erklären von
solchen Sachen ist meist schwieriger als das zu Verstehen.

c.u.

Mathias

mathias.konkol.vcf

Helmut Greschner

unread,
Apr 17, 2001, 10:36:17 AM4/17/01
to
Nico Seessle schrieb:

> "Helmut Greschner" <HGres...@t-online.de> schrieb im Newsbeitrag
> news:3ADC0188...@t-online.de...
> > Auf meinem (Windows)PC liegt mein java-Prog in folgendem Verzeichnis:

[...]

Herzlichen Dank für die profunde Aufklärung!

Helmut

Helmut Greschner

unread,
Apr 17, 2001, 10:42:14 AM4/17/01
to
Sascha Zepter schrieb:

[...]

> Du hast ein folgenes Package definiert:

[...]

Auch dir herzlichen Dank für deine ausführliche Erklärung!

Helmut

Helmut Greschner

unread,
Apr 17, 2001, 10:38:24 AM4/17/01
to
Mathias Konkol schrieb:

> Hallo Nico!
>
> Das hast Du wirklich gut erklärt. I

[...}

> Ich hoffe ich konnte auch ein wenig weiterhelfen.

Das tast es. Vielen Dank!

Helmut

0 new messages