Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

25.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 1 Exceptions in der Programmiersprache Java.

Ähnliche Präsentationen


Präsentation zum Thema: "25.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 1 Exceptions in der Programmiersprache Java."—  Präsentation transkript:

1 25.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 1 Exceptions in der Programmiersprache Java

2 25.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 2 Konzept der Exceptionbehandlung Auftreten einer Exception signalisiert eine bestimmte Ausnahme- oder Fehlersituation Exceptions versus Errors Exceptions sind vergleichsweise ´´leichte´´ Fehler Errors sind schwerwiegende ´´nicht behebbare´´ Fehler Exceptions und Errors sind Unterklassen der Klasse Throwable Konstruktion eigener Exceptions durch Erweiterung vorhandener IndexOutOfBoundsException ArrayIndexOutOfBoundsException Exception-Klassen enthalten zwei Arten von Konstruktoren Erzeugung einer Exception ohne Fehlermeldung Erzeugung einer Exception mit Fehlermeldung

3 25.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 3 Typen von Ausnahmen Error enthält System- und Übersetzungszeit-Fehler IO-Exception enthält Fehler, die abgefangen werden müssen RuntimeException enthält Fehler, die zur Laufzeit innerhalb der JVM auftreten. Sie müssen nicht abgefangen werden. Throwable Exception Error RuntimeException IOException OutOfMemoryError LinkageError SecurityException FileNotFoundException NullPointerException.....

4 25.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 4 Abfangen einer Exception Genereller Ablauf beim Abfangen einer Exception try{ // Anweisungsblock der eine Exception auslösen kann } catch( FirstException e){ // Anweisungen, die bei einem FirstException ausgeführt werden } catch( SecondException e){ // Anweisungen, die bei einem SecondException ausgeführt werden } finally{ // Abschlußaktionen, die grundsätzlich ausgeführt werden } Exceptions wandern die Aufrufhierarchie hinauf, bis sie abgefangen werden

5 25.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 5 Beispiel einer catch-Anweisung int a, b, c; // Eingabe von b und c... try{ a = b / c; } catch (ArithmeticException e){ System.out.println(´´Bitte anderen Divisor eingeben!´´); System.out.println(´´Meldung: ´´ + e.getMessage()); } // Ausgabe:Bitte anderen Divisor eingeben! Meldung: / by zero

6 25.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 6 Abfangen mehrerer Exceptions beim Abfangen mehrerer Exceptions ist die Reihenfolge zu beachten int [] intArray = {1, 2, 3, 4}; int arrayIndex = -1; try{ intArray[arrayIndex] = 0; } catch (IndexOutOfBoundException e){ System.out.println(´´Ungültiger Index´´); } catch (ArrayIndexOutOfBoundException e){ // Diese Stelle wird nie erreicht ==> Fehler zur Übersetzungszeit System.out.println(´´Warten auf Godot´´); }

7 25.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 7 finally-Anweisung finally-Anweisung enthält Aufräumarbeiten, die auch nach Auslösung einer Exception ausgeführt werden müssen public void convertStr(String[] src, int[] dst){ int [] temp = new int[src.length]; try{ for(int i = 0; i < src.length; i++) temp[i] = Integer.parseInt(src[i]); System.arraycopy(temp, 0, dst, 0, temp.length); } finally{ // temporären Puffer freigeben temp = null; }

8 25.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 8 Auslösung einer Exception Unter dem Auslösen einer Exception versteht man die Erkennung und anschließende Fehlersignalisierung die throw-Anweisung erwartet als Argument ein Objekt der Klasse Throwable oder einer ihrer Unterklassen Integer value;... public void setValue(Integer value){ if(value == null) throw new IllegalArgumentException(´´null value´´); this.value = value; }

9 25.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 9 Die throws-Klausel alle Exceptions, die nicht von der Klasse RuntimeException abgeleitet werden, erwarten eine Fehlerbehandlung die throws-Klausel signalisiert, daß eine Methode Exceptions nicht explizit abfängt, sondern dem Aufrufer überläßt Angabe mehrerer Exceptions in der throws-Klausel möglich FileInputStream stream; public void openFile(String name) throws FileNotFoundException{ stream = new FileInputStream(name); } beim Überschreiben einer Methode dürfen der throws-Klausel keine neuen Exceptions hinzugefügt werden, hingegen ist das Weglassen von Exceptions zulässig

10 25.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 10 Threads in der Programmiersprache Java

11 25.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 11 Threads ein Thread ist ein eigenständiges Programmfragment, das parallel zu anderen Teilen eines Programmes ablaufen kann alle Threads eines Programmes teilen sich einen gemeinsamen Adressraum (leichtgewichtiger Prozeß) in einem Multithreading-System verwaltet die Rechnerkern- vergabe (Scheduler) die zur Ausführung anstehenden Threads pseudoparallele Abarbeitung von Threads auf Einprozessorsystemen parallele Abarbeitung von Threads auf Mehrprozessorsystemen Synchronisation von Threads Synchronisation mit Monitoren Synchronisation durch Ereignisse Synchronisation auf das Ende von anderen Threads

12 25.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 12 Threads in Java Threads werden in der Virtuellen Maschine durch Objekte der Klasse java.lang.Thread repräsentiert Virtuelle Maschine verwendet Thread-Objekte zum Starten, Starten oder Suspendieren von Threads ein Thread beginnt die Ausführung mit dem Aufruf der run()- Methode des Thread-Objektes Deklaration eines Threads Konstruktion einer Unterklasse der Klasse Thread Implementierung des Interfaces Runnable Erzeugen eines Threads Erzeugen eines Objektes einer Unterklasse der Klasse der Thread Erzeugen eines Thread-Objektes unter Angabe eines Objektes einer Klasse, welches das Interface Runnable implementiert

13 25.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 13 Deklaration und Erzeugen eines Threads class TextThread extends Thread { String text; public TextThread(String text){ this.text = text; } public void run() { for(int i = 0; i< 10; i++) System.out.println(text); }... TextThread java = new TextThread(´´Java´´); java.start(); TextThread expresso = new TextThread(´´Expresso´´); expresso.start();

14 25.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 14 Deklaration und Erzeugen eines Threads class TextThread implements Runnable { String text; public TextThread(String text){ this.text = text; } public void run() { while( true ) System.out.println(text); }... TextThread java = new TextThread(´´Java´´); Thread thread = new Thread(java); thread.start();

15 25.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 15 Zustände eines Threads seit JDK 1.2 verworfen resume() suspend() resume() suspend() interrupt() sleep() notify(), interrupt() wait(), join() run() zu Ende stop() start() new Scheduler yield() schlafend suspendiert blockiert erzeugt rechenwillig beendet rechnend

16 25.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 16 Steuerung eines Threads Starten eines Threads java.start(); Beenden eines Threads java.stop(); Unterbrechen eines Threads java.suspend(); Fortsetzen eines Threads java.resume(); Pausieren eines Programmes try { java.sleep(1000) // 1000 ms } catch ( InterruptedException e) { }

17 25.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 17 Steuerung eines Threads interrupt() - Wecken von schlafenden bzw. blockierten Threads yield() - der aufrufende Thread gibt freiwillig die CPU ab isAlive() - true, falls der Thread gestartet, aber nicht beendet ist join() - wartet auf das Ende des Threads, für den die Methode aufgerufen wurde setName(String) - ändert den Namen des Threads getName() - gibt den Namen des Threads aus setPriority(int) - ändert die Priorität des Threads Thread.MIN_PRIORITY = 0 Thread.MAX_PRIORITY = 10 (Standard - Thread.NORM_PRIORITY = 5) getPriority() - gibt die Priorität des Threads aus

18 25.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 18 Daemon-Threads keine User-Threads mehr im System => Programmende 4 public LogThread(String fileName) throws IOException { buffer = new Vector(); logStream = new PrintWriter(new fileWriter( fileName )); setPriority( Thread.MIN_PRIORITY ); setDaemon( true ); } public void run(){ while( true ){ try{ sleep( INTERVAL ); // Meldungen in die Datei schreiben } catch ( InterruptedException e ){ }; }


Herunterladen ppt "25.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 1 Exceptions in der Programmiersprache Java."

Ähnliche Präsentationen


Google-Anzeigen