Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

Javakurs/Übungsaufgaben/Errors: Unterschied zwischen den Versionen

(LaufzeitFehler)
(CompilerFehler)
Zeile 3: Zeile 3:
 
== CompilerFehler ==
 
== CompilerFehler ==
  
* '''Klammer fehlt'''
+
'''Klammer fehlt'''
  
 
  bruja shabanov 10 (Desktop/JavaKurs): javac Errors.java
 
  bruja shabanov 10 (Desktop/JavaKurs): javac Errors.java
Zeile 17: Zeile 17:
  
  
* '''Doppelte Definition'''
+
'''Doppelte Deklaration'''
 
  bruja shabanov 11 (Desktop/JavaKurs): javac Errors.java Errors.java:5: i is already defined in main(java.lang.String[])
 
  bruja shabanov 11 (Desktop/JavaKurs): javac Errors.java Errors.java:5: i is already defined in main(java.lang.String[])
 
                 for( int i = 0 ; i < 10 ; i++ ){
 
                 for( int i = 0 ; i < 10 ; i++ ){
Zeile 29: Zeile 29:
  
 
----
 
----
 +
 +
'''Definition fehlt'''
 +
bruja shabanov 5 (Desktop/JavaKurs): javac Errors.java
 +
Errors.java:15: variable ret might not have been initialized
 +
                return ret;
 +
                        ^
 +
1 error
 +
* Ihr habt eine Variable nicht richtig initialisiert, das passiert oft wenn ihr einer Variable innerhalb einer if-Anweisung Werte zuweist, wie in diesem Code ( der zudem obigen Fehler führt ):
 +
public static String someMethod( int x ){
 +
String ret;
 +
if( x ==  4711 ){
 +
ret = "foobar";
 +
}
 +
return ret;
 +
}
 +
* Die Variable ret bekommt nur dann einen Wert zugeordnet wenn x == 4711 gilt, da dies nicht immer der Fall sein muss, könnte der Fall auftreten, dass ret gar keinen Wert zugeordnet bekommt.
 +
* Fügt einen default Wert für ret hinzu um diesen Fehler zu beheben, z.B. so:
 +
  String ret = "";
 +
 +
 +
----
 +
 +
'''Missing return statement'''
 +
bruja shabanov 6 (Desktop/JavaKurs): javac Errors.java
 +
Errors.java:17: missing return statement
 +
        }
 +
        ^
 +
1 error
 +
* Ihr habt in einer Methode, die etwas zurückgeben soll entweder das return vergessen, oder das return steht nur innerhalb von if Anweisungen, wie hier:
 +
public static boolean isPositive( int num ){
 +
if( num > 0 ){
 +
return true;
 +
}else if( num < 0 ){
 +
return false;
 +
}
 +
}
 +
* Da alle returns in einem if Block stehen, könnte es theoretisch sein, dass keiner der Blöcke ausgeführt wird und Java somit nicht weiss was es zurück geben soll.
 +
* Fügt um das Problem zu Lösen ein return am Ende euerer Mthode ein, oder ändert ein else if in ein else.
 +
        public static boolean isPositive( int num ){
 +
if( num > 0 ){
 +
return true;
 +
}else if( num < 0 ){
 +
return false;
 +
}
 +
'''return false;'''
 +
}
  
 
== LaufzeitFehler ==  
 
== LaufzeitFehler ==  

Version vom 12. April 2007, 11:48 Uhr

Häufige Java Fehler mit Hilfe

CompilerFehler

Klammer fehlt

bruja shabanov 10 (Desktop/JavaKurs): javac Errors.java
Errors.java:7: '}' expected
^
1 error
  • Es fehlt einfach eine geschweifte Klammer.
  • Jedes mal wenn ihr eine geschweifte Klammer aufmacht, macht sie gleich wieder zu, damit ihrs später nicht vergesst.
  • Bei Klammerfehlern solltet ihr nach jedem korrigierten Fehler neukompilieren, da es normalerweise zu sehr vielen Folgefehlern kommt.




Doppelte Deklaration

bruja shabanov 11 (Desktop/JavaKurs): javac Errors.java Errors.java:5: i is already defined in main(java.lang.String[])
                for( int i = 0 ; i < 10 ; i++ ){
                         ^
1 error
  • Die Variable i ist irgendwo bereits definiert gewesen. Sucht also vor dieser Zeile nach einem:
int i = ..
  • Ihr müsst dann den Variablennamen in der Schleife z.B. ändern.



Definition fehlt

bruja shabanov 5 (Desktop/JavaKurs): javac Errors.java
Errors.java:15: variable ret might not have been initialized
                return ret;
                       ^
1 error
  • Ihr habt eine Variable nicht richtig initialisiert, das passiert oft wenn ihr einer Variable innerhalb einer if-Anweisung Werte zuweist, wie in diesem Code ( der zudem obigen Fehler führt ):
	public static String someMethod( int x ){
		String ret;
		if( x ==  4711 ){
			ret = "foobar";
		}
		return ret;
	}
  • Die Variable ret bekommt nur dann einen Wert zugeordnet wenn x == 4711 gilt, da dies nicht immer der Fall sein muss, könnte der Fall auftreten, dass ret gar keinen Wert zugeordnet bekommt.
  • Fügt einen default Wert für ret hinzu um diesen Fehler zu beheben, z.B. so:
 		String ret = "";



Missing return statement

bruja shabanov 6 (Desktop/JavaKurs): javac Errors.java
Errors.java:17: missing return statement
        }
        ^
1 error
  • Ihr habt in einer Methode, die etwas zurückgeben soll entweder das return vergessen, oder das return steht nur innerhalb von if Anweisungen, wie hier:
	public static boolean isPositive( int num ){
		if( num > 0 ){
			return true;
		}else if( num < 0 ){
			return false;
		}			
	}
  • Da alle returns in einem if Block stehen, könnte es theoretisch sein, dass keiner der Blöcke ausgeführt wird und Java somit nicht weiss was es zurück geben soll.
  • Fügt um das Problem zu Lösen ein return am Ende euerer Mthode ein, oder ändert ein else if in ein else.
       public static boolean isPositive( int num ){
		if( num > 0 ){
			return true;
		}else if( num < 0 ){
			return false;
		}			
		return false;
	}

LaufzeitFehler

  • java.lang.NoClassDefFoundError
bruja shabanov 7 (Desktop/JavaKurs): java Errors
Exception in thread "main" java.lang.NoClassDefFoundError: Errors
  • Heisst Java kann die Klasse nicht finden, die ihr ausführen wollt.
  • Schaut genau nach ob der Dateiname und der Klassennamme gleich sind. Dabei ist auch wichtig die Groß/Klein Schreibung zu beachten. Ausserdem achtet darauf ob ihr in die Konsole die richtigen Namen eingetippt habt.




  • java.lang.NoSuchMethodError
bruja shabanov 9 (Desktop/JavaKurs): java Errors
Exception in thread "main" java.lang.NoSuchMethodError: main
  • Java Findet eine Methode nicht ( hier speziell die main Methode )
  • Schaut ob ihr beim Aufruf den Methodennamen richtig geschrieben habt.