Beruflich Dokumente
Kultur Dokumente
Name: SCHRÖDER
Vorname: ALEXEY
Matrikel‐Nr.: 193971
Informatik (B.Sc.)
Name: SUKHAREVSKYY
Vertiefung Programmieren (Java) Vorname:
YEVHENIY
Übungsblatt 04 SS2008 Matrikel‐Nr.:
194009
Name: DERHO
Vorname:
VICTOR
Matrikel‐Nr.:
194246
Aufgabe 1.
Geben Sie für die folgenden Throwable‐Klassen jeweils ein kurzes Beispiel in wenigen Codezeilen an,
das die jeweilige Fehlermeldung erzeugt. Erläutern Sie kurz wann bzw. warum die Fehlermeldung
auftritt.
Fehlermeldung Code Beispiel Erläuterung
public class Exception {
Exception wird ausgelöst, wenn
public static void main (String ein mathematischer Fehler
args[]){
auftritt, z.B. beim Versuch eine
ArithmeticException System.out.println(5/0); Zahl durch Null zu teilen oder
} den Logarithmus einer
} negativen Zahl zu berechnen.
public class Exception {
Exception wird geworfen, wenn
public static void main (String versucht wird ein Array mit
args[]){
einem ungültigen Index
ArrayIndexOutOfBoundexException int a[] = new int[3]; anzusprechen, also wenn gilt:
System.out.println(a[3]); index > array.length().
}
}
public class Exception {
Exception wird geworfen, wenn
public static void main (String ein TypCast auf ein Objekt
args[]){
angewendet wird, während die
Object a = new Integer(1); Typen der jeweiligen Objekte
ClassCastException System.out.println((String)a); inkompatibel sind.
}
}
public class Exception {
Exception wird geworfen, wenn
public static void main (String versucht wird über eine
args[]){
Referenz, die den Wert = null
Object a = null; hat, ein Datenelement, Methode
NullPointerException System.out.println(a.toString()); oder Array anzusprechen.
}
}
Exception wird geworfen, wenn
public class Exception {
ein Stacküberlauf während der
public static void main (String Laufzeit auftritt. Exception wird
args[]){
invokeExc(1); von der JVM gesteuert.
StackOverFlowError }
public static int invokeExc(int a){
return invokeExc(a+1);
}
}
Aufgabe 2.
Die hier angegebene Klasse DotFilter soll als Filter Strom für Zeichen auf der Eingabeseite
eingesetzt werden können und dabei jedes gelesene Komma durch einen Punkt ersetzen. Allerdings
enthält diese Lösung fünf Fehler.
Original Quelltext: Fehler:
import java.io.*;
public class DotFilter extends Reader { //Es handelt sich um einen Filter Fehler 1: Signatur der Klasse
public DotFilter( ) {//es muss ein Eingabestrom von Typ Reader Fehler 2: C’tor Fehler (DotFilter);
übergeben werden. C’tor Fehler (super());
super( ); //Undefinierter C’tor
}
public int read( ) { //Methode hinterlässt eine unbehandelte IOException Fehler 3: Signatur der Methode
diese muss behandelt oder an den
Aufrufer weitergereicht werden.
int ch = super.read( );
Fehler 4: Operand Fehler
if ( ch == "," ) //Typen sind inkompatibel int ≠ String, Operand „==“
für den Typ String nicht definiert.
ch = "."; //Typen sind inkompatibel int ≠ String Typ kann nicht Fehler 5: Kompatibilität Fehler
konvertiert werden.
return ch;
}
// Die read Methode für einen Block
// read(char[] buf, int off, int len) sei ebenfalls implementiert
// und rufe read( ) für jedes Zeichen auf.
}
Wie müsste der abgebildete Teil der Klasse korrekt aussehen?
Abgewandelter Quelltext (ohne Fehler)
import java.io.*;
public class DotFilter extends FilterReader {
public DotFilter( Reader in ) {
super( in );
}
if ( ch == ‘,’)
ch = ‘.’;
return ch;
}
// Die read Methode für einen Block
// read(char[] buf, int off, int len) sei ebenfalls implementiert
// und rufe read( ) für jedes Zeichen auf.
}