R
Roar
Gast
Die häufigsten Compiler Errors, Runtime Exceptions, Runtime Errors, Warnungen und der Stacktrace:
Der Unterschied zwischen Exception uns Errors
Exceptions sind Ausnahmefehler, die während der Laufzeit des Programms "repariert" werden können. Sie werden im weiteren Programmverlauf behandelt und vermeiden so z.B. einen Absturz des Programms. Das Programm bleibt meist normal weiter ausführbar.
Errors sind schwere Ausnahmefehler, die zur Laufzeit des Programms nicht behandelt werden können. Meist führen sie zum abrupten Programmende (Absturz).
Oft tauchen Probleme auf, weil man nicht weiß was eine Compiler Fehlermeldung bedeutet, oder weil man nicht weiß, was diese ellenlange komische Konsolenausgabe bedeutet (besonders bei Anfängern). Hier folgen also die häufigsten Errors und RuntimeExceptions:
Alles was in Spitzklammern (<>) steht sind variable Namen die von dem jeweiligen Problem abhängen.
Compiler-Errors:
- cannot read <filename>
Die Datei konnte nicht gelesen werden. Ist sie im CLASSPATH? Wurde der Dateiname richtig geschrieben?
- cannot resolve symbol <symbol>
Das Symbol (Methode, Klasse, Feld, Variable, Konstruktor) konnte nicht gefunden werden, d.h. es gibt dieses "Symbol" nicht. Ist es richtig geschrieben? ist evtl. die Parameterübergabe falsch gemacht? Es ist immer ein Parameter "Location"
bei der Fehlermeldung mit angegeben. An der kann man erkennen wo überhaupt nach dem Symbol gesucht wurde.
Wenn als Location die gleiche Klasse angegeben wurde und sie eigentlich in einer anderen Klasse ist dann wurde
wahrscheinlich vergessen das Paket/die Klasse zu importieren.
- <something> expected
Es wird irgendein syntaktisches Symbol erwartet. Meist ist das Semikolon oder eine Klammer. Bsp.:
Hier müssste nach der Instantiierung des ersten Strings ein Semikolon stehen. Der Compiler zeigt mit seinem '^' auf den Anfang der zweiten String Instantiierung, also nicht verwirren lassen.
- <variable> is already definded in ...
Das bedeutet dass man eine Variable zweimal in der selben Methode/Klasse deklariert hat; das darf man natürlich
nicht weil sich die Variablen sonst in die Quere kommen. Bsp:
- <class> is not abstract and does not override abstract method <methode> in <interface>
Es müssen alle Methoden eines implementierten Interfaces überschrieben werden, wenn die Klasse nicht abstrakt ist. Beispiel:
Damit dies funktioniert muss noch die Methode actionPerformed(ActionEvent e) (in dem Beispiel) überschrieben werden.
Variable <variable> might not have been intialized
Das ist eine Warnung an den Programmierer dass eine Variable die im späteren Programmverlauf nicht initialisiert worden ist. Der Fehler tritt nur bei lokalen variablen auf. Eine Lösung ist z.B. der Variable bei de deklarierung den Wert null zuzuweisen.
unreported exception <exception>; must be caught or declared to be thrown
In der angegebenen Zeile wird eine Methode aufgerufen die eine Exception wirft. Diese Exception muss abgefangen werden, oder mit "throws <exception>" in der methodensignatur weitergeleitet werden.
- Missing methode body
Ein typischer Anfängerfehler. Höchstwahrscheinlich wurde nach der Methodendeklaration ein Semikolon gesetzt.
- possible loss of precision
Wenn du 5.03 schreibst meint der Copmiler das ist ein double. In einer Methode in der float verlang wird, wird er deshalb diesen Error ausgeben, weil ein double nicht so einfach in ein float konvertiert werden kann. Wenn du 5.03f schreibst, kann der bereits der Compiler überprüfen ob das ein double wert ist. Dieser meldet dann z.B.: var (float) cannot be applied to (double)
danke an Illuvatar
- unclosed string literal
Bedeutet, dass ein String nicht geschlossen wurde (mit Anführungszeichen). Darauf muss man aufpassen wenn man mehrere Variablen in einen String einbaut.
- incompatible types
Hier wird versucht einer Variable den Wert einer anderen Variable zuzuweisen, aber diese beiden Typen sind nicht
kompatibel. Bsp.:
- <symbol> has private access in <class>
Das angesprochene Symbol, also Variable oder Methode ist als privat deklariert, d.h. man kann von der aktuellen
Klasse nicht darauf zugreifen.
Im Anschluss nun noch Kurzerklärungen zu den am häufigsten auftretenden Exceptions und Errors in Java
Der Unterschied zwischen Exception uns Errors
Exceptions sind Ausnahmefehler, die während der Laufzeit des Programms "repariert" werden können. Sie werden im weiteren Programmverlauf behandelt und vermeiden so z.B. einen Absturz des Programms. Das Programm bleibt meist normal weiter ausführbar.
Errors sind schwere Ausnahmefehler, die zur Laufzeit des Programms nicht behandelt werden können. Meist führen sie zum abrupten Programmende (Absturz).
Oft tauchen Probleme auf, weil man nicht weiß was eine Compiler Fehlermeldung bedeutet, oder weil man nicht weiß, was diese ellenlange komische Konsolenausgabe bedeutet (besonders bei Anfängern). Hier folgen also die häufigsten Errors und RuntimeExceptions:
Alles was in Spitzklammern (<>) steht sind variable Namen die von dem jeweiligen Problem abhängen.
Compiler-Errors:
- cannot read <filename>
Die Datei konnte nicht gelesen werden. Ist sie im CLASSPATH? Wurde der Dateiname richtig geschrieben?
- cannot resolve symbol <symbol>
Das Symbol (Methode, Klasse, Feld, Variable, Konstruktor) konnte nicht gefunden werden, d.h. es gibt dieses "Symbol" nicht. Ist es richtig geschrieben? ist evtl. die Parameterübergabe falsch gemacht? Es ist immer ein Parameter "Location"
bei der Fehlermeldung mit angegeben. An der kann man erkennen wo überhaupt nach dem Symbol gesucht wurde.
Wenn als Location die gleiche Klasse angegeben wurde und sie eigentlich in einer anderen Klasse ist dann wurde
wahrscheinlich vergessen das Paket/die Klasse zu importieren.
- <something> expected
Es wird irgendein syntaktisches Symbol erwartet. Meist ist das Semikolon oder eine Klammer. Bsp.:
Java:
String s1 = "Hallo Welt"
String s2 = "Hallo Duke";
- <variable> is already definded in ...
Das bedeutet dass man eine Variable zweimal in der selben Methode/Klasse deklariert hat; das darf man natürlich
nicht weil sich die Variablen sonst in die Quere kommen. Bsp:
Java:
// falsch!!
class Test {
String aString;
String aString = "Hello World";
//...
}
// falsch!!
class Test {
//...
void test() {
String aString;
String aString = "Hello World";
}
}
// funktioniert:
class Test {
String aString = "Hello World";
//..
void test() {
String aString = "Hello Duke";
System.out.println(this.aString);
System.out.println();
System.out.println(aString);
// Ausgabe:
// Hello World
// Hello Duke
}
}
- <class> is not abstract and does not override abstract method <methode> in <interface>
Es müssen alle Methoden eines implementierten Interfaces überschrieben werden, wenn die Klasse nicht abstrakt ist. Beispiel:
Java:
class MyProgram extends JFrame implements ActionListener {
public MyProgram() {
super("Huhu");
JButton button = new JButton("Klick mich!");
button.addActionListener(this);
add(button);
}
}
Damit dies funktioniert muss noch die Methode actionPerformed(ActionEvent e) (in dem Beispiel) überschrieben werden.
Variable <variable> might not have been intialized
Das ist eine Warnung an den Programmierer dass eine Variable die im späteren Programmverlauf nicht initialisiert worden ist. Der Fehler tritt nur bei lokalen variablen auf. Eine Lösung ist z.B. der Variable bei de deklarierung den Wert null zuzuweisen.
unreported exception <exception>; must be caught or declared to be thrown
In der angegebenen Zeile wird eine Methode aufgerufen die eine Exception wirft. Diese Exception muss abgefangen werden, oder mit "throws <exception>" in der methodensignatur weitergeleitet werden.
- Missing methode body
Ein typischer Anfängerfehler. Höchstwahrscheinlich wurde nach der Methodendeklaration ein Semikolon gesetzt.
- possible loss of precision
Wenn du 5.03 schreibst meint der Copmiler das ist ein double. In einer Methode in der float verlang wird, wird er deshalb diesen Error ausgeben, weil ein double nicht so einfach in ein float konvertiert werden kann. Wenn du 5.03f schreibst, kann der bereits der Compiler überprüfen ob das ein double wert ist. Dieser meldet dann z.B.: var (float) cannot be applied to (double)
danke an Illuvatar
- unclosed string literal
Bedeutet, dass ein String nicht geschlossen wurde (mit Anführungszeichen). Darauf muss man aufpassen wenn man mehrere Variablen in einen String einbaut.
- incompatible types
Hier wird versucht einer Variable den Wert einer anderen Variable zuzuweisen, aber diese beiden Typen sind nicht
kompatibel. Bsp.:
Java:
String s = "Hello World";
int i = s; // falsch!!
- <symbol> has private access in <class>
Das angesprochene Symbol, also Variable oder Methode ist als privat deklariert, d.h. man kann von der aktuellen
Klasse nicht darauf zugreifen.
Im Anschluss nun noch Kurzerklärungen zu den am häufigsten auftretenden Exceptions und Errors in Java
Zuletzt bearbeitet von einem Moderator: