ich habe vor zwei Tagen begonnen, mich mit Java zu beschäftigen. Dazu habe ich mir das
Buch Java2 aus dem Markt+Technik Verlag gekauft.
Wie in dem Buch beschrieben, habe ich auch das Entwicklerpaket von der Sun-Internetseite
runtergeladen und installiert.
Im Kapitel 2 folgt dann das erste Java-Programm, daß ich auch gleich abgetippt habe. hier
der Code:
class VolcanoRobot {
String status;
int speed;
float temperatur;
void checkTemperatur() {
if(temperatur > 660) {
status = "returning home";
speed = 5;
}
}
void showAttributes() {
System.out.println("Status :" + status);
System.out.println("Speed :" + speed);
System.out.println("Temperatur:" + temperatur);
}
public static void main(String[] arguments) {
VolcanoRobot dante = new VolcanoRobot();
dante.status = "exploring";
dante.speed = 2;
dante.temperatur = 510;
dante.showAttributes();
System.out.println("Erhöhe Geschwindigkeit auf 3.");
dante.speed = 3;
dante.showAttributes();
System.out.println("Erhöhe Temperatur auf 670.");
dante.temperatur = 670;
dante.showAttributes();
System.out.println("Überprüfe Temperatur.");
dante.checkTemperatur();
dante.showAttributes();
}
}
Wenn ich jetzt das Programm compiliere, erscheint keine Fehlermeldung.
Beim Programmaufruf mit "java VolcanoRobot" erscheinen aber jede Menge an Fehlermeldungen:
Exception in thread "main" java.lang.NoClassDefFoundError: volcanorobot (wrong name:
VolcanoRobot)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:509)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:246)
at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
at java.lang.ClassLoader.loadClass(ClassLoader.java:262)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:322)
Was läuft hier schief? Ich denke, ich habe mich genau an die Anweisungen im Buch gehalten.
Hab auch den Code mindestens 6mal komplett mit verschiedenen Editoren abgetippt, jedoch
ohne durchschlagenden Erfolg.
Gruß Markus
[...]
> class VolcanoRobot {
[...]
> }
>
> Wenn ich jetzt das Programm compiliere, erscheint keine Fehlermeldung.
> Beim Programmaufruf mit "java VolcanoRobot" erscheinen aber jede Menge an Fehlermeldungen:
Keine Angst, das ist nur eine Meldung - mit der
genauen Angabe, wo sie passiert ist.
> Exception in thread "main" java.lang.NoClassDefFoundError: volcanorobot (wrong name:
> VolcanoRobot)
Das sieht so aus, als ob du
java volcanorobot
eingegeben hast, also nicht in der richtigen Groß-
und Kleinschreibung.
Paul
Wenn du eine Klasse starten willst, dann musst du sie als public
deklarieren.
public class VolcanoRobot {
String status;
...
Peter
Danke!
wenn die klasse keinen modifier hat ist sie implizit public
Wenn ich aber eine Klasse als Servlet laufen lasse und sie ist nicht public
bekomme ich die Meldung IllegalAccessException... vom Server.
Peter
> wenn die klasse keinen modifier hat ist sie implizit public
nein, ist sie nicht.
Zugriff auf die Klasse ist nur innerhalb des aktuellen Package möglich.
Sönke
> "Peter Zangerl" <pe...@dataoberland.com> wrote [...]
>
> > Wenn du eine Klasse starten willst, dann musst du sie als public
> > deklarieren.
>
> wenn die klasse keinen modifier hat ist sie implizit public
Schön.
Da kann ich gleich zwei Aussagen auf einmal korrigieren:
(1) Eine Klasse kann auch gestartet werden, wenn sie nicht
public ist.
(2) Eine Klasse, die keinen Modifier hat, hat implizit
Package-Zugriff.
(Übrigens ist public bei Top-Level-Klassen und -Interfaces
der einzige erlaubte Modifier.)
Paul