# Befehl import



## Xell1986 (12. Aug 2009)

Hallöchen Leute,
bin gerade dabei den Befehl import zu verstehen und das folgende problem taucht immer wieder auf: ich hab alles so abgetippt wie es sein soll aber leider bekomme ich die folgende fehlermeldung 

Compiliere D:\Java Dateien\Zinsen\CSparbuchNutzen2.java mit Java-Compiler
CSparbuchNutzen2.java:3:17: '.' expected
import CSparbuch;
                ^
CSparbuchNutzen2.java:3:18: ';' expected
import CSparbuch;
                 ^
2 errors

folgende zwei quelltexte hab ich woraus ich aus der einen eine klasse in die andere importieren möchte.


```
// Datei CSparbuchNutzen1.java

class CSparbuch
 {
 double kapital;
 double zinssatz;

 CSparbuch(double kap, double zins)
  {
  kapital = kap;
  zinssatz = zins;
  }

 void einzahlen(double betrag)
  {
  kapital += betrag;
  }

 void abheben(double betrag)
  {
  kapital -= betrag;
  }

 double ertragZ(double laufzeit)
  {
  return kapital * Math.pow((1 + zinssatz/100),laufzeit);
  }

 double ertrag(double laufzeit)
  {
  return kapital * (1 + zinssatz/100 * laufzeit);
  } 
 }

//Hauptklasse des Programms
class CSparbuchNutzen1
 {
 public static void main(String[] args)
  {
  CSparbuch meinSparbuch = new CSparbuch(0,3);
  meinSparbuch.einzahlen(10000);

  System.out.println("Ertrag nach 5 Jahren:");
  System.out.println("\t ohne Zinseszins: " + (int) meinSparbuch.ertrag(5));
  System.out.println("\t mit Zinseszins: " + (int) meinSparbuch.ertragZ(5));
  }
 }
```


```
// Datei CSparbuchNutzen2.java

import CSparbuch;

public class CSparbuchNutzen2
 {
 public static void main(String[] args)
  {
  CSparbuch meinSparbuch = new CSparbuch(0,3);
  meinSparbuch.einzahlen(10000);

  System.out.println("Ertrag nach 5 Jahren:");
  System.out.println("\t ohne Zinssatz: " + (int) meinSparbuch.ertrag(5));
  System.out.println("\t mit Zinssatz: " + (int) meinSparbuch.ertragZ(5));
  }
 }
```

aus sparbuchnutzen1 möchte ich die klasse sparbuch nach sparbuchnutzen2 importieren.

kann mir jemand sagen was ich falsch mache?


----------



## SlaterB (12. Aug 2009)

ein import lautet immer

import packageName[.weiterePackageName].Klassenname;

Klassen im gleichen package muss man nicht importieren,

Klassen aus dem DefaultPackage sind automatisch überall sichtbar,
daher kann 
import Klassenname;
niemals funktionieren


----------



## Xell1986 (12. Aug 2009)

ich hab alles im ordner D:\Java Dateien\Zinsen gespeichert.
heißt das dass jetztm ich kann den import befehl weglassen und dann müsste es klappen?

edit: hab gerade den befehl weggelassen und es hat geklappt.

wo müsste ich die beiden dateien denn abspeichern damit der importbefehl seinen sinn hat.
soll ich die CSparbuch.class datei im gleichen ordner lassen oder irgendwo anders speichern und wenn ja, wie findet der compiler von sparbuchnutzen2 denn diese .class datei?


----------



## SlaterB (12. Aug 2009)

in unterschiedlichen Ordern und in der Klassen passende package-Anweisungen, dann brauchst du imports,
die class-Dateien sind standardmäßig am Ende im gleichen Ordner, der Compiler kann einiges durchaus selber


----------



## bygones (12. Aug 2009)

Xell1986 hat gesagt.:


> ich hab alles im ordner D:\Java Dateien\Zinsen gespeichert.
> heißt das dass jetztm ich kann den import befehl weglassen und dann müsste es klappen?
> 
> edit: hab gerade den befehl weggelassen und es hat geklappt.
> ...


Java nutzt fuer packages die bekannte Ordner struktur, d.h. liegt eine Datei in dem Ordner "geld/finanzen/Sparbuch", so muss in der Datei angegeben werden "package geld.finanzen.Sparbuch".

Alle Dateien, die nicht in diesem Ordner liegen muessen ueber "import geld.finanzen.Sparbuch" die Klasse importieren.

der compiler findet die Klassen dann dadurch dass man diese Information ueber den classpath mitgibt


----------



## Xell1986 (12. Aug 2009)

ok verstanden.
also muss ich folgendes angeben wenn die klasse nicht im gleichen ordner ist:
import andererOrdner.CSparbuch
???


----------



## bygones (12. Aug 2009)

Xell1986 hat gesagt.:


> ok verstanden.
> also muss ich folgendes angeben wenn die klasse nicht im gleichen ordner ist:
> import andererOrdner.CSparbuch
> ???


ja 

und CSparbuch muss auch [c]package andererOrder[/c] stehen haben


----------



## Xell1986 (12. Aug 2009)

hmmm. ich habs jetzt  CSparbuch.class direkt auf die festplatte D abgespeichert.
das heißt der pfad zum ordner wäre d:\
wie muss dann meine importzeile heißen?


----------



## SlaterB (12. Aug 2009)

das Grundverzeichnis ist ganz egal, wichtig ist die package-Angabe im Programm,
du hattest doch alles schon am laufen, was willst du noch ändern?

Erklärungen hier im Forum scheinen gar nix zu bringen, 
sowas steht auch in Lehrbüchern, hier kannst du es nochmal versuchen:
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 3.9 Compilationseinheiten und eigene Pakete schnüren
aber es ist zu befürchen, dass das zu schwierig für dich ist


----------



## Xell1986 (12. Aug 2009)

es geht doch nicht dadrum ob ich die kleine zinsrechenaufgabe gerechnet bekomme, sondern dadrum ob ich den befehl package udn import verstanden hab. 
klar steht das in büchern, ich hab eins vormir liegen dass jedoch in meinen augen nicht klar erklärt wird. also dachte ich dass mir jemand hier helfen kann.


----------



## Xell1986 (12. Aug 2009)

kann mir denn jemand sagen was die fehlermeldung zu beudeten hat?
excepted heißt auf deutsch erwarten.
was erwartet er denn?
simikolon und punkt oder was?


----------



## SlaterB (12. Aug 2009)

was genau der Fehler bedeutet, weiß ich selber auch nicht, 
der Punkt macht noch etwas Sinn, wenn man das von mir bereits erwähnte Format bedenkt:

import packageName[.weiterePackageName].Klassenname;

da muss zwingend ein Punkt drin sein,
warum nun noch Semikolon bemeckert wird, kann ich nicht sagen


----------



## Shulyn (12. Aug 2009)

// EDIT --- OK ich sollte erst alles Lesen und dann Antworten 


schreib folgendes in die java datein und packe alle javadatein in den Ordner [sparbuchprojekt] auf deiner Festplatte.

```
package sparbuchprojekt;
 
class CSparbuch
 {
// -- 2. class
package sparbuchprojekt;

class CSparbuchNutzen1
 {

//-- 3. class
package sparbuchprojekt;

class CSparbuchNutzen2
 {
```

MfG Shu!


----------



## Schandro (12. Aug 2009)

package-Namen sollte man komplett klein schreiben.


----------



## Xell1986 (12. Aug 2009)

wenn ich ein punkt vor das CSparbuch schreibe, also:

import .CSparbuch;
dann meckert er mit folgendem:

Compiliere D:\Java Dateien\Zinsen\CSparbuchNutzen2.java mit Java-Compiler
CSparbuchNutzen2.java:3:7: <identifier> expected
import .CSparbuch;
      ^
1 error


----------



## SlaterB (12. Aug 2009)

korrekt, da ja
import .CSparbuch;
nichts mit 
import packageName[.weiterePackageName].Klassenname;
zu tun hat?!

nochmal als Beispiel:

import package1.Klassenname;
import package1.package2.Klassenname;
import package1.package2.[..].package4893578.Klassenname;

alles andere gibts nicht


----------



## Xell1986 (12. Aug 2009)

wie soll ich die datei nennen die die erste zeile 
package sparbuchprojekt 
hat?


----------



## Schandro (12. Aug 2009)

Weiterhin
[Klassenname].java

die package-Struktur ändert nix am Dateinnamen


----------



## SlaterB (12. Aug 2009)

der Dateiname ist vom Packagenamen unabhängig,
und da diese Frage wieder zeigt, dass noch gar nix verstanden ist, war das meine letzte Antwort

für manche Dinge braucht es einen persönlichen Lehrer, Live-Vorführungen usw.


----------



## Xell1986 (12. Aug 2009)

also in meinem fall CSparbuch.java

muss ich diese datei dann noch kompilieren oder lass ich einfach die java datei alleine im ordner?


----------



## 0din (12. Aug 2009)

Ich häng mal das programm an
dabei sind nu drei packages
in Sparbuch/src/sp3/ liegt ne Startup.java die das ganze ausführt,
im code stehn die imports un package notationen, damit sollts deutlich werden


----------



## Xell1986 (12. Aug 2009)

leute, vielen dank.
es hat geklappt.


----------

