Einf - PowerPoint PPT Presentation

1 / 38
About This Presentation
Title:

Einf

Description:

Einf hrung in die Programmierung mit Java 12. Vorlesung WS 04/05 – PowerPoint PPT presentation

Number of Views:103
Avg rating:3.0/5.0
Slides: 39
Provided by: Dirk155
Category:

less

Transcript and Presenter's Notes

Title: Einf


1
Einführung in dieProgrammierung mit Java
  • 12. Vorlesung WS 04/05

2
Übersicht
  • Fehlerbehandlung
  • Schreiben in Dateien
  • Lesen aus (Text-)Dateien
  • zeilenweise
  • Lesen von Token ("Parsen")

3
Laufzeitfehler in Java
  • Viele Fehler werden vom Compiler aufgedeckt (z.B.
    fehlendes Semikolon, nicht deklarierte Variable)
  • Andere Art von Fehler Laufzeitfehler
  • tritt während der Ausführung des Programms auf
  • unterbricht den normalen Fluss der Befehle
    (Programm stützt ab)
  • Name dieser Fehler Ausnahme (engl. Exception)
  • Beispiele für Ausnahmesituationen
  • bei Berechnungen Division durch Null
  • Mangel an Speicherplatz
  • Zugriff auf Array-Elemente über die Obergrenze
    hinaus
  • Schreib-/Lesefehler bei Ein- und
    Ausgabeoperationen
  • Diskette defekt
  • Netzwerkverbindung zusammengebrochen
  • Festplatte voll
  • zu öffnende Datei nicht vorhanden usw.

4
Fehler während des Ablaufs- Beispiel -
public class Polygon private Punkt
eckpunkt public Polygon() super() pub
lic void leeres_Polygon( int anzahl_eckpunkte)
eckpunkt new Punkt anzahl_eckpunkte publ
ic void punkt_einfuegen( int position, Punkt
punkt) eckpunkt position punkt
mögliche Fehler
negative Anzahl
Position außerhalb des Arrays
Array noch nicht angelegt
5
Laufzeitfehler Beispiel
  • ................................
  • int a
  • a new int2
  • a0 5
  • a1 6
  • a2 6 //Fehler

6
Abfangen des Fehlers try-catch
  • ................................
  • try
  • int a
  • a new int2
  • a0 5
  • a1 6
  • a2 6
  • catch(java.lang.Exception e)
  • System.out.println("Fehler Arraygrenze
    überschritten")

Anweisungen, bei denen ein Fehler auftreten kann.
Anweisungen, die ausgeführt werden, sobald ein
Fehler aufgetreten ist
hier geht es in jedem Fall weiter
7
Ausnahmebehandlung in Java
  • Vorteile der Java-Ausnahmebehandlung
  • Programm stürzt nicht ab
  • Programm macht an genau definierter Stelle weiter
  • systematische und übersichtliche Trennung von
    normalem und fehlerbehandelndem Code
  • Im Falle einer Ausnahme wird ein sog.
    Exception-Objekt erzeugt und weitergeleitet
  • Instanz der Klasse Exception oder von Unterklasse
  • Exception-Objekt erhält Information über Ausnahme
  • Exception-Objekt wird mit catch gefangen
    (Fehlerbehandlung)

8
Exceptions Klassen-Hierarchie
Throwable
(from lang)
Exception
(from lang)
ArrayIndexOutOfBoundsException
ArithmeticException
IOException
(from lang)
(from lang)
(from io)
FileNotFoundException
(from io)
9
Exception-Klassen I/II
Exception Der universelle Vater aller
Fehlermeldungen. Von dieser Klasse sind alle
anderen abgeleitet.
NullPointerException ( extends Exception) Tritt
auf, wenn ein Objekt benutzt werden soll, obwohl
es noch nicht angelegt wurde.
Beispiel
Student student student.drucke_ausweis()
10
Exception-Klassen II/II
ArrayIndexOutOfBoundsException ( extends
Exception) Tritt auf, wenn auf ein Arrayelement
zugegriffen wird, das nicht existiert.
Beispiel
Student student new Student2 Student
student3 new Student(Dirk,Dörschlag)
11
Differenzierte Fehlerbehandlung
  • in try-Block können verschiedene Arten von
    Fehlern auftreten
  • differenzierte Behandlung sinnvoll
  • Lösung
  • mehrere catch-Anweisungen, eine für jeden
    Fehlertyp
  • Unterscheidung anhand des Namens des Fehlers (der
    Exception)

12
Fang den Fehler und handle- Differenzierung nach
Fehlertyp -
Anweisungen, bei denen ein Fehler auftreten kann.
Syntax
try anweisung(en) catch( Fehlertyp_1
f1) anweisung(en) catch( Fehlertyp_2
f2) anweisung(en)
Anweisungen, die ausgeführt werden, sobald ein
Fehlertyp_1 aufgetreten ist
Anweisungen, die ausgeführt werden, sobald ein
Fehlertyp_2 aufgetreten ist
13
Fang den Fehler und handle- try anweisung
catch ( fehler ) warnung -
public class Polygon public void
punkt_einfuegen( int position, Punkt
punkt) try eckpunkt position
punkt catch( NullPointerException
npe) System.out.println(Polygon.punkt_einfueg
en()
Eckpunkte nicht angelegt!) catch(
Exception e) System.out.println(Polygon.punkt
_einfuegen()
Ein Fehler wurde
erkannt!)
14
Mehrere Catch-Klauseln
  • die in der Reihenfolge erste catch-Klausel, die
    passt, wird verwendet
  • dann ist try-catch beendet
  • Beispiel
  • try
  • eckpunkt position punkt
  • catch( Exception e).....
  • catch( NullPointerException npe)....
  • //Zweite catch-Klausel wird nie erreicht
  • Daher Zuerst die speziellere, dann die
    allgemeinere Exception

15
Weiterleiten von Exceptions
  • Bisher Fehler in try... wurde in
    catch(..)... abgefangen und behandelt
  • Alternative Weiterleiten des Fehlers in einer
    Methode m nach oben an die Methode, die m aufruft
  • dort muss Fehler mit try-catch behandelt werden
    oder wiederum an die aufrufende Methode
    weitergeleitet werden
  • die Methode m muss dies durch throws-Klausel
    kenntlich machen. Beispiel
  • public void leeres_Polygon( int
    anzahl_eckpunkte)
  • throws Exception
  • eckpunkt new Punkt anzahl_eckpunkte

16
Fehlermeldungen weiterleiten- Syntax -
Syntax
modifier class Klassenname ... modifier
rueckgabetyp methodenname( parameter) throws
Fehlertyp_1(, Fehlertyp_2, ...)
anweisung(en) ...
die Methode wird an der Stelle abgebrochen, an
der der Fehler auftritt !
17
Fehlermeldungen weiterleiten- Beispiel -
public class Polygon private Punkt
eckpunkt ... public void leeres_Polygon(
int anzahl_eckpunkte) throws Exception eckpunk
t new Punkt anzahl_eckpunkte ...
18
Übung im GIS-Labor
  • Macht das folgende Programm mittels try ...
    catch (Exception e) ... absturzsicher und gebt
    bei einem Fehler eine Fehlermeldung aus (Tip
    nutzt die Methode printStackTrace() von Exception)

class Ereignis1 public static void main
(String args) int a int b 0
a 10/b System.out.println("Programmende
wurde erreicht!")
19
Schreiben in/Lesen aus Text-Dateien
Messwerte
Mein Programm
Ergebnisse
PNR
X
Y
Z
20
Schreiben in Datei Beispiel I
  • import java.io.
  • ........
  • try
  • FileWriter fr new FileWriter("d\\tmp\\log.txt"
    )
  • fr.write("Dieser Text steht in der ersten Zeile
    der ")
  • fr.write("Datei log.txt.\n")
  • fr.write("Und dieser in der zweiten.")
  • fr.close()
  • catch(Exception e)

21
Schreiben in Datei
  • Öffnen der Datei Erzeugen einer Instanz der
    Klasse "FileWriter"
  • Dateiname als Parameter des Konstruktors
  • Scheiben Aufruf der Methode write(...) für
    Instanz von FileWriter (Analog zu
    System.out.println)
  • wenn fertig mit schreiben Aufruf der Methode
    close() für Instanz von FileWriter
  • alles muss in try .. stehen (da fehleranfällig)
  • Package "java.io" muss importiert werden

22
Schreiben in Datei Beispiel II
  • import java.io.
  • ........
  • try
  • //der folgende Konstruktor ermöglicht das
    Anfügen von
  • // Text am Ende der Datei (falls diese vorhanden
    ist)
  • FileWriter fr new FileWriter("d\\tmp\\log.txt"
    ,true)
  • fr.write("....")
  • fr.close()
  • catch(Exception e)

23
Gepuffertes Schreiben
  • Datei zum schreiben öffnen
  • BufferedWriter bw new BufferedWriter (new
    FileWriter(Dateiname))
  • FileWriter ermöglicht das Schreiben von
    Dateiinhalten.
  • BufferedWriter puffert das Schreiben. Es wird nur
    noch in die Datei geschrieben, wenn die Methode
    flush() oder close() aufgerufen wird. ? bessere
    Performance !

24
Lesen von Dateien
  • allgemein Lesen von Streams
  • Stream Abstraktion der Information, die von
    Gerät geliefert bzw. an Gerät geschickt wird
  • hier nur Lesen aus (Text-)Dateien
  • Unterschiede hinsichtlich der Menge der Zeichen,
    die in einem Schritt gelesen werden
  • ein Buchstabe FileReader
  • eine Zeichenkette einer bestimmten Länge
  • eine Zeile BufferedReader
  • eine Token (Zeichenkette, die von bestimmten
    Zeichen abgegrenzt werden) StreamTokenizer

25
Zeichenweises Lesen aus Dateien
  • Datei zum lesen öffnen FileReader fr new
    FileReader(Dateiname)
  • FileReader ermöglicht das zeichenweise Lesen von
    Dateiinhalten
  • unpraktisch für ASCII-Dateien mit Messwerten oder
    Texten
  • besser Erzeugen eines BufferedReader aus
    FileReader

26
Zeilenweises Lesen aus Dateien
  • Datei öffnen BufferedReader br new
    BufferedReader(new FileReader(Dateiname))
  • BufferedReader fasst die Zeichen aus dem
    FileReader zu Zeichenketten zusammen
  • Der BufferedReader verfügt u.a. über die Methoden
  • readLine() auslesen der nächsten Zeile (bis zum
    nächsten Zeilenumbruch) in einen String
  • close() schließen der Datei
  • Weitere Methoden JavaDoc

27
Java und ASCII-Dateien- öffnen und (ein-)lesen -
Beispiel import java.io. .............
.................... BufferedReader
br String line int i 0 try br
new BufferedReader(new FileReader("c\\Koordinat
en.txt")) while( (line br.readLine()) !
null) //für jede Zeile wird Konstruktor von
von Punkt aufgerufen punkti new Punkt(
line) i i1 br.close()
catch( FileNotFoundException fnfe) System.o
ut.println(The file filename does not
exist) catch( IOException
ioe) ioe.printStackTrace()
28
Lesen von Token aus Textdatei
Token
Delimiter
Delimiter
Token
29
Lesen von Token aus Textdatei
  • Token Teil eines Strings (Stream), der von
    Delimitern begrenzt wird
  • Beispiel
  • String "abc de,f 66,z-2"
  • Delimiter " " //Leerzeichen
  • 3 Token abc de,f 66,z-2
  • Delimiter " ","," //Leerzeichen und Komma
  • 5 Token abc de f 66 z-2
  • Ziel Extraktion der Token aus String, die
    bestimmte Bedeutung haben (Parsen)
  • Abhängig von Menge der Delimiter

30
Extraktion von Token Klasse StreamTokenizer
  • Standard-Delimiter Leerzeichen, Zeilenende,
    Dateiende, ... (können ergänzt werden)
  • Methoden von StreamTokenizer
  • StreamTokenizer(Reader) Konstruktor
  • int nextToken() schaltet auf nächstes Token um
  • Attribute eines Token
  • int ttype Typ des Token
  • TT_EOF Dateiende
  • TT_EOL Zeilenende
  • TT_NUMBER Zahl
  • TT_WORD String
  • double nval Token als double
  • String sval Token als String

31
Beispiel Lesen von Token aus Textdatei
  • import java.io.
  • ................
  • try
  • FileReader fr new FileReader("M\\Java\\Beispie
    l.txt")
  • StreamTokenizer st new StreamTokenizer(fr)
  • double d String s
  • while(st.nextToken() ! StreamTokenizer.TT_EOF)
  • switch (st.ttype)
  • case StreamTokenizer.TT_NUMBER
  • d st.nval break
  • case StreamTokenizer.TT_WORD
  • s st.sval break
  • default break
  • //hier kann mit d und s etwas gemacht werden
  • fr.close()
  • catch(Exception e)

32
Extraktion von Token Klasse StringTokenizer
  • ähnlich zu StreamTokenizer
  • arbeitet auf Strings (z.B. Zeile aus Textdatei)
  • Konstruktor (zu parsender String und
    Delimiter)StringTokenizer st new
    StringTokenizer(str,"")
  • Methoden
  • boolean hasMoreTokens()
  • String nextToken()
  • importieren des Package java.util

33
StringTokenizer Beispiel
  • try
  • StringTokenizer st new StringTokenizer("ABCDEF
    GH","")
  • while(st.hasMoreTokens())
  • System.out.println(st.nextToken())
  • catch(Exception e) e.printStackTrace()
  • //Ausgabe
  • //ABC
  • //DEF
  • //GH

34
Exkurs Konvertieren von Strings
  • Konvertieren von Strings in double
    Double.parseDouble. Beispiel String s
    "4.6566" double d Double.parseDouble(s) //nu
    n steht in d die Zahl 4.6566

35
ENDE
FRAGEN ?
36
Hausaufgabe
Lest aus der Datei "zahlen.txt" die 6 Zahlen ein
und gebt die Summe dieser 6 Zahlen in eine Datei
"ergebnis.txt" aus. Datei "zahlen.txt" 7.99 4.98
2.77 2.0 22.99 43.98
37
Fortgeschrittene Übungsaufgabe (1/2)
Ergänze die Klasse Polygon (Vorlesung 11) um eine
Methode, die die Datei "polygon.txt" (nächste
Folie) einliest und daraus ein Polygon mit 5
Punkten erzeugt. In einer Zeile dieser Datei
steht die Punktnummer, die x-Koordinate und die
y-Koordinate eines Punktes. Teste die
Funktionen in einer Klasse Test_Main.
38
Fortgeschrittene Übungsaufgabe (2/2)
Datei polygon.txt
1 2.0 3.0 2 4.0 3.0 3 8.0 9.0 4 7.0
10.0 5 1.0 6.0
Write a Comment
User Comments (0)
About PowerShow.com