02.01.2006, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/2006 1 Aufzählungstypen.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Objektorientierte Programmierung
der Universität Oldenburg
10 Streams JavaHS Merseburg WS 05/06 E/A - Ströme (Streams) in Java.
Ausnahmen HS Merseburg (FH) WS 06/07.
Threads Richard Göbel.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Java: Grundlagen der Objektorientierung
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
SWITCH - Anweisung.
Ein Beispiel in Java.
Exceptions. import java.sql.*; public class MyException{ boolean b; Statement stat; public MyException(){ b = stat.execute("xyz"); } Beim Übersetzen dieses.
Java-AG Ausnahmebehandlung Gerhard Gröger.
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: Benutztes Objekt kennt den Kontext seiner Nutzung nicht. Daher kann es in besonderen Situationen keine Entscheidung.
Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
DVG Ausnahmen. DVG Was sind Programmfehler? 4 Programm erzielt gar kein Ergebnis. 4 Berechnetes Ergebnis stimmt nicht mit dem erwarteten.
1DVG3 - anonyme Klassen Anonyme Klassen. DVG3 - anonyme Klassen 2 Syntax new BasisKlasse(Parameterliste) { Modifikationen und Erweiterungen der Basisklasse.
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
DVG Ausnahmen1 Ausnahmen. DVG Ausnahmen 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht.
DVG Einführung in Java1 Einführung in JAVA.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
Das Roboterprojekt Einführung Der erste Entwurf Das Thread-Konzept Hindernisse Website.
Java Threads Sebastian Werler
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Klassendefinitionen in Java
CuP - Java Elfte Vorlesung Montag, 11. November 2002.
Grundlagen der Programmierung
Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik I Thema 16: Ausnahmebehandlung.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Variablenkonzept Klassisch, in Java Basistyp
Learning By Doing Ausnahmebehandlung Exceptions (Ausnahmebehandlung) Typische Fehlverhalten zur Laufzeit: s. Buch S. 287ff -Verwendung von null-Objekten.
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
Parallelisierung für Multiprozessor-Maschinen Teil 2.
Threads in Java Wiederholung der BS Grundlagen Alois Schütte AOSD1.
Robuste Programme durch Ausnahmebehandlung
Prof. Dr. Alois Schütte Advanced System Programming 1 Das concurrent Paket 1 Überblick 2 Lock 3 Condition 4 Queue 5 Executors.
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Java-Kurs Übung Besprechung der Hausaufgabe
Threads in Java Threads  Sprachumfang von Java Der Java-Standard fordert nur die Unterstützung von Thread-Prioritäten. Es gibt keine Forderung bzgl.:
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 11. Vorlesung WS 2001/2002.
IT2 – WS 2005/20061Nov 14, 2005 Visibility  public: Sichtbar in allen Paketen  protected: Sichtbar innerhalb des Pakets und in den Unterklassen  (default,
Programmierkurs JavaUE 4 Anweisungen und ProgrammeDietrich BolesSeite 1 Programmierkurs Java Dr. Dietrich Boles Teil Imperative Programmierung Unterrichtseinheit.
Abteilung für Telekooperation Softwareentwicklung 2 UE WS 2008/09 SE2UE_ Ausnahmen (Exceptions)
1 VE 11 Kruskal-Realisierung Listen. 2 Auf dem Weg zur Kruskal-Realisierung Vorüberlegungen: Der Graph könnte dargestellt werden als Menge von Knoten,
OOP mit Java Oder: Java in 5 Tagen. 1. Tag Klassen und Methoden Hello World in Variationen Von Menschen und Geschlechtern Horden (Schlange stehen)
Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Thread-Konzept in objektorientierten.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/06 1 Beispiel class SpreadSheet { int cellA1, cellA2, cellA3; synchronized.
Java Programme nur ein bisschen objektorientiert.
Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Generisches Programmieren.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/06 Generische Programmierung in Java.
Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Auflösung von Konflikten bei Mehrfachvererbung Umbenennung mehrdeutiger Methoden.
1 Grundsätze objektorientierter Programmierung. Dr. Wolfram Amme, Grundsätze objektorientierter Programmierung, Informatik II, FSU Jena, SS Objektorientierte.
1 Eine Einführung in die objektorientierte Programmierung.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Arithmetik in Java Ganzzahl-Division Nulldivision führt zu einer ArithmeticException.
, PD Dr. Wolfram Amme, Tutorium zum Programmierpraktikum, FSU Jena, WS 2006/07 1 Objekte in Java.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Kapselung von Daten I Gründe für die Datenkapselung Datenkonsistenz leichtere.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Exceptions in der Programmiersprache Java.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Synchronisation mit Monitoren Threads können in Java parallel ablaufen, oft.
Praktische Informatik 1
Raphael Fischer Informatik II - Übung 06 Raphael Fischer
Ausnahmen Exceptions Definition Ausnahmen erzeugen Ausnahmen abfangen
«Delegierter» Methoden Schablone Funktionszeiger
1. Die rekursive Datenstruktur Liste 1
9. Vererbung und Polymorphie
Implementieren von Klassen
 Präsentation transkript:

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Aufzählungstypen

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Aufzählungstypen (Enumerations) Definition von Aufzählungstypen enum Color { Red, Green, Blue, Yellow } Color c = Color.Red; Aufzählungstypen stehen intern für von der Spezialklasse Enum abgeleitete Klassen, für die gilt: keine Unterklassen können abgeleitet werden Elemente des Aufzählungstyps werden durch konstante, statische Objektdefinitionen beschrieben, die zusätzlich durch eine Ordnungszahl benannt werden keine neuen Objekte können von einer solchen Klasse erzeugt werden Aufzählungstypen können Variablendeklarationen, sowie Konstruktor- und Methodendefinitionen enthalten

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Beispiel: Interne Klassenbeschreibung class Color extends Enum { public static final Red = new Color(´´Red´´,0); public static final Green = new Color(´´Green´´,1); public static final Blue = new Color(´´Blue´´,2); public static final Yellow = new Color(´´Yellow´´,3); Color (String s, int i){ super(s,i); }. }

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Vordefinierte Methoden auf Enum-Objekten int ordinal() Abfrage der Ordnungszahl, die durch die Reihenfolge der Definition gegeben ist String name() liefert den Namen der Konstanten, toString() ruft lediglich name() auf int compareTo(E o)Vergleich von Enum-Objekten des gleichen Typs anhand der Ordnungszahlen boolean equals(Objekt e) von Objekt geerbte Vergleichsmethode static E valueOf(String s) liefert Enum-Objekt zu einem Namen s für eine Aufzählung E static E[] values() liefert eine Reihung mit allen Aufzählungselementen

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Definition von Methoden enum Day { Mon, Tue, Wed, Thu, Fri, Sat, Sun; boolean isWeekend() { return this == Sat || this == Sun; } Day d = …. ; if( d.isWeekend() )....

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Definition von Datenelementen und Konstruktoren enum Day { Mon(false), Tue(false), Wed(false), Thu(false), Fri(false), Sat(true), Sun(true); Day( boolean w){ weekend = w; } private boolean weekend; boolean isWeekend() { return weekend; }

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Enum-Konstanten in switch-Anweisungen Color farbe = Color.Red; switch ( farbe ){ case Color.Red: case Color.Green: System.out.println(´´Die Farbe ist rot oder grün´´); break; default: System.out.println(´´Die Farbe ist blau oder gelb´´); }

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Ausnahmebehandlung und Zusicherungen in der Programmiersprache Java

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ 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

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ 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.....

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ 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

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ 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

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ 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´´); }

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ 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; }

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ 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; }

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ 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

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Zusicherungen (Assertions) Zusicherungen stehen für boolesche Aussagen, die zur Garantie einer fehlerfreien Programmausführung immer eintreten müssen Zusicherungen in Java sind Anweisungen der Form assert boolean-expression[:message-string] Zusicherungen werden von der JVM während der Programmausführung ausgewertet liefert die Auswertung true wird mit der Programmausführung normal fortgefahren scheitert die Auswertung der Zusicherung, dann stoppt das Programm mit einem AssertionError Zusicherungen zielen ausschließlich auf die Fehlerfindung während der Entwicklungs- und Testphase eines Programms

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Beispiel: Zusicherungen class Game {... int throwDie(){ int result;... assert (result >= 1) && (result <= 6) : ´´I am cheating´´; return result; }... }

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Aktivieren und Stilllegen von Zusicherungen Zusicherungen können beim Aufruf der JVM mit Schaltern aktiviert und deaktiviert werden -eaalle Zusicherungen sind aktiviert und werden von der JVM überwacht -daalle Zusicherungen sind ausgeblendet und werden von der JVM ignoriert (Default-Einstellung) Auswertung von Zusicherung lässt sich auf Klassen – und Package-Ebene einschränken - ea:classname nur Zusicherungen in der Klasse classname werden von der JVM überwacht - ea:package… nur Zusicherungen in Klassen des Package package werden von der JVM überwacht

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Was zusichern (und was nicht)? Zusicherungen sollten Bedingungen an Zustandsvariablen (sogenannte Klasseninvarianten) überprüfen bei konsequenter Datenkapselung reicht es aus, zur Überprüfung von Klasseninvarianten entsprechende Zusicherungen vor den Rücksprung aus schreibenden Methode einzufügen Klasseninvarianten sind oftmals sehr groß, so dass sich eine Verwendung von privaten Invarianten-Test-Methoden anbietet Zusicherungen sollten zur Überprüfung von Schleifeninvarianten und Nachbedingungen eines Methodenaufrufs verwendet werden Vorbedingungen an Methodenaufruf können im eigentlichen Sinne nicht zugesichert werden und sollten deshalb Ausnahmen überprüft werden

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Threads in der Programmiersprache Java

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ 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 man unterscheidet zwei Arten der Parallelität: –pseudoparallele Abarbeitung auf Einprozessorsystemen –echte parallele Abarbeitung auf Mehrprozessorsystemen

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ 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

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ 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();

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ 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();

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Zustände eines Threads run() zu Ende start() new Scheduler yield() CPU-Zeit beendet blockiert erzeugt rechenwillig beendet rechnend notify notifyAll join beendet sleep beendet I/O beendet wait() join() sleep() I/O-Zugriff

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Methoden zur Thread-Steuerung public void start() überführt einen Thread vom Zustand ´´erzeugt´´ in den Zustand ´´rechenwillig´´ public static void yield() aufrufender Thread gibt die CPU freiwillig ab public final void join() public final void join(long millis) public final void join(long millis, int nanos) ausführender Thread wartet auf das Ende des Threads für den die Methode aufgerufen wurde public final void sleep(long millis) public final void sleep(long millis, int nanos) aufrufender Thread wird für eine bestimmte Zeit in den blockierten Zustand überführt

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Scheduling von Threads Prioritätengesteuerte Rechnerkernvergabe MIN_PRIORITY = 0; MAX_PRIORITY = 10; NORM_PRIORITY = 5, public final void setPriority(int newPriority) public final int getPriority() Java Spezifikation: Threads mit höherer Priorität sollen im Schnitt mehr Rechenzeit erhalten als Threads mit niedriger Priorität es existieren JVM´s bei denen Threads mit gleicher Priorität nicht im Round- Robin-Verfahren abgearbeitet werden deshalb sollten bei Verwendung von Threads: bei rechenintensiven Threads gezielt die yield() und sleep()-Methoden aufgerufen werden rechenintensive Threads mit einer niedrigeren Priorität als I/O-intensive Threads ausgestattet werden

, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Daemon-Threads keine User-Threads mehr im System => Programmende 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 ){ }; }