Transcript PowerPoint

Entwicklung von Java

 Forschungsprojekt zur Entwicklung einer Programmiersprache für vernetzte und eingebettete Anwendungen (OAK)  konzeptuelle Basis: OOP-Sprachen (C++, SmallTalk, Eiffel)  Java Development Kit 1.2: ca. 2000 vordefinierte Klassen  JDK 1.0: 1995, 1.1: 1996, 1.2: 1999 (Java 2-Plattform)  „killer application“: Java Applets im WWW  Nachteile höherer Programmiersprachen:  Hardwareinkompatibiliät, mangelnde Portabilität  unzureichende oder nicht implementierte Standards  Bedeutung des Internet über den akademischen Bereich hinaus Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 1

Grundkonzepte

         Einfachheit Objektorientierung Robustheit Portabilität und Architekturneutralität:  plattformneutraler Bytecode  virtuelle Java-Maschine (JVM) als Interpreter auf jeder Plattform Interpretierte Sprache Multithreading (nebenläufige Programmierung als genuines Sprachkonstrukt) Leistungsfähigkeit (?) automatische Speicherverwaltung Sicherheit Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 2

Einfachheit

     Wesentlicher Anspruch: Einfachheit verglichen mit den Nachteilen von C++. Reduzierte Sprachdefinition gegenüber C++, typische Charakteristika von C++ fehlen Einfache Migration, da syntaktisch eng an C++ angelehnt:

class HelloWorld { public static void main(String args[]) { System.out.println(„Hello, world!"); } }

Deklaration der Klasse HelloWorld Verwenden einer Methode main(), die wiederum eine vordefinierte Methode der System-Klasse (Eigenschaft an die Konsole) out der Klasse System vom Typ Printwriter - Ausgabe Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 3

Objektorientierung in Java

 Umsetzung der Objektorientierung analog zu C++ mit Vereinfachungen  Datenkapselung (Modularität, data hiding and abstraction)  Polymorphismus  Vererbung  dynamisches Binden von Klassen nach Bedarf  Objekte: Zustand definiert durch Instanzenvariablen, Instanzenvariablen und Methoden werden in einer Klassendefinition festgelegt; Objekte werden unter Verwendung des Klassennamens instantiiert.

Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 4

Objektorientierung in Java II

 Wie in C++: unterschiedliche Konstruktoren für eine Klasse  Bildung von Unterklassen (subclassing) im wesentlichen wie in C++  Wie in C++ Bildung abstrakter Superklassen, die nicht unmittelbar zu Objekten instantiiert werden: Effizienzsteigerung durch einmalige Definition abstrakter Methoden in der abstrakten Oberklasse, die dann von allen „konkreten" Objekten der Unterklassen benutzt werden können (Beispiel:

Graphical

-

Rectangle

,

Circle

etc) Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 5

Besonderheiten von Java im Vergleich zu C++

 Syntax: eng an C/C++ angelehnt (Operatoren, Aufbau von Ausdrücken, Datentypen ...)  Unterschiede:  kein Präprozessor  kein Typedef  kein Define  keine Records und Unions („nur Klassen !“)  keine Funktionen (  Methoden !)  keine Mehrfachvererbung  kein Goto Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 6

Besonderheiten von Java im Vergleich zu C++, II

         kein Überladen von Operatoren keine Templates keine automatische Typumwandlung keine Zeiger/Pointer Speicherung in Unicode Packages (Pakete zusammengehörender Klassen) für den Import von Klassen statt #include über Headerdateien verschiedene Typen von Kommentaren automatische Speicherverwaltung synchronisierte Threads werden unterstützt Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 7

Sprachbeschreibung von Java

lexikalische Struktur

Datentypen

Programmstruktur

Objektorientierung

Syntax (Ausdrücke, Anweisungen, Operatoren)

Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 8

Zeichenkodierung

Zeichenkodierung

 Kodierung von Zeichen in UNICODE  Übersetzung eines Unicode-Zeichenstroms in Java-Tokens  Zusätzlich Mapping von ASCII nach UNICODE, um auch Source-Code auf nicht-UNICODE-Systemen zu unterstützen (UNICODE als Obermenge von ASCII) Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 9

Lexikalische Struktur von Java II

Quelltext Leerzeichen ::== ::== Sprachelement ::== { Kommentar | Leerzeichen | Sprachelement } ASCII-SP | ASCII-HT | ASCII-FF | Zeilenendezeichen Schlüsselwort | Identifikator | Literal | Separator | Operator Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 10

Schlüsselwörter von Java

abstract boolean break byte case cast catch char class const continue default do Ch. Wolff double else extends final finally float for if implements import instanceof int interface long native new null operator outer package private protected public rest return short static super Digitale Informationsverarbeitung, Kap. 26 switch sychronized this throw throws transient try var void while 11

Programmstruktur

Quelltextdatei ::== [Paketfestlegung] {Import} {Typdeklaration} Paketfestlegung ::== package Paketname; Import = Typimport | Paketimport; Typdeklaration = Klassendeklaration | Schnittstellendeklaration Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 12

Beispiel Programmaufbau

package NeuesPaket; import java.applet.Applet; class Test extends Applet { int EineEigenschaft = 0; int EineMethode(int EinFormalerParameter) { return (EinFormalerParameter + EineEigenschaft) * 5; } } Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 13

Datentypen

einfache/primitive Datentypen

 Zeichen: char  Ganzzahlen: byte short int long  Gleitkommazahlen: float double  Wahrheitswerte: boolean

Referenzdatentypen

 Arrays  Klassen-Datentypen  Interface-Datentypen (Schnittstellen) Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 14

Klassen- und Interface-Typdeklarationen

 Eine Klassendeklaration führt einen Referenztyp ein, dessen Implementierung von der Implementierung einer anderen Klassen abgeleitet sein kann (Vererbung)  Eine Klasse kann unmittelbare oder mittelbare Superklasse einer anderen sein  interface-Deklaration: neuer Referenztyp, der eine Menge von Methoden und/oder Namen spezifiziert, ohne

unmittelbare Implementierung

Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 15

Klassendeklarationen

 Aufbau: [public] [Klassenmodifikator (abstract, final)]

class

Bezeichner [extends Klassentyp ] [implements Schnittstellentyp Klassenrumpf {, Schnittstellentyp }] Beispiele: public class Test {...} abstract class Test2 {...} public final class Test3 implements InterfaceExmpl {...} Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 16

Klassenrumpf

  Klassenrumpf = { Komponentendeklaration | Initialisierung } Der Klassenrumpf besteht aus einer oder mehrerer Komponentendeklarationen, d.h. Variablen- und Methodenvereinbarungen sowie aus Initialisierungen

public class test { int test; //Deklaration int test2 = 0 //Deklaration und Initialisierung { test = 5; } // Initialisierung in speparatem Block } int quadriere(int einWert) { // Methodendeklaration return einWert * einWert; }

Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 17

Sichtbarkeit

 Das Schlüsselwort

public

in der Klassendeklaration einer (Toplevel-)Klasse regelt deren Sichtbarkeit:  Ist die Klasse sichtbar,

public

, ist sie auch außerhalb ihres Paketes  ansonsten ist sie nur in dem Paket sichtbar, in dem sie deklariert wurde. Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 18

Vererbung: Grundprinzipien

 In Java existiert zwischen Klassen nur die Einfachvererbung, d.h. eine Klasse kann immer nur von einer Oberklasse abgeleitet sein:

class

Unterklasse

extends

Oberklasse

{  //...

} Damit ist die sog.

diamond inheritance

ausgeschlossen Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 19

Vererbung: Sonderfälle

   Von einer Klasse, die als final gekennzeichnet ist, kann man keine Unterklasse ableiten:

final class

Unterklasse

extends

// geht nicht: class

Oberklasse Unterklasse2

extends

Unterklasse

  Umgekehrt muß man von einer als abstract gekennzeichenten Klasse eine Unterklasse ableiten, um sie verwenden zu können Mehrfachvererbung ist nur

indirekt

, d.h. über die einmalige oder mehrfache Implementierung von Schnittstellen durch eine Klasse möglich (zusätzlich zur Einfachvererbung) Digitale Informationsverarbeitung, Ch. Wolff Kap. 26 20

Methodendeklaration

 Vollständige Syntax der Methodendeklaration: [public | protected | private] [static] [abstract | final] [native] [synchronized] Sichtbarkeit der Methode Zuordnung Klasse/Objekt Vererbbarkeit/Abstraktionsgrad Zugriff auf Plattformspezifisches Synchronisation von threads Resulttattyp Methodenname {[]} ([ÜbergabeParameter]) [Ausnahmen] Methodenrumpf Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 21

Methodendeklaration

 Die Methodendeklaration mußwenigstens folgende Bestandteile aufweisen:  

Resulttattyp MethodenName () { //Rumpf }

z.B.

void eineMethode() { int x = 5; } Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 22

Sichtbarkeit von Methoden und Eigenschaften

public: Methode kann von anderen Klassen benutzt werden, auch außerhalb ihres Pakets bzw. der Klassenhierarchie   protected: Methode kann nur innerhalb der Klassenhierarchie und des Pakets der Klasse benutzt werden

default

sichtbar (kein Modifikator): Methode ist nur im gleichen Paket  private: Methode kann nur von Objekten der Klasse, in der sie definiert ist, benutzt werden Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 23

Konstruktoren

  Konstrukten die dienen der Initialisierung von Objekten Ein Konstruktor einer Klasse hat denselben Bezeichner selbst, aber keinen Rückgabewert wie die Klasse  Für eine Klasse kann es Parametern geben ( mehrere Konstruktoren Polymorphismus ) class Konstrukt { int einWert; Konstrukt(int W) { einWert = W; } } Digitale Informationsverarbeitung, mit unterschiedlichen Ch. Wolff Kap. 26 24

Konstruktoren: Beispiel

 Für die vordefinierte Klasse String existieren zahlreiche verschiedene Konstruktoren, u. a.:  public String()  public String(String value)  public String(char[] value)  public String(char[] value, int offset, int count)  public String(byte[] ascii, int hibyte, int offset, int count)  public String(byte[] ascii, int hibyte)  public String(StringBuffer, buffer) Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 25

Schnittstellen

  Mit einer Schnittstelle gibt eine man Menge von Methoden und Eigenschaften vor, die von einer Klasse implementiert werden sollen. Alle Methoden einer Schnittstelle sind abstrakt, d.h. ohne Implementierung Eine Schnittstelle liefert eine

Funktionsschablone

, die von unterschiedlichen Klassen implementiert werden kann Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 26

Aufbau von Schnittstellen

 Syntax: [public] [abstract] interface [extends

Schnittstellenname Schnittstellenname

{,

Schnittstellenname

}] Schnittstellenrumpf Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 27

Schnittstellen: Beispiel

public interface Darstellbar { int Groesse = 2000; int Flaeche = 500; void stelleDar(); }

Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 28

Methoden und Variablen in Schnittstellen

 Alle Methoden einer Schnittstelle sind abstrakt; sie sind öffentlich (public), falls die Schnittstelle öffentlich ist  Die Variablen (Eigenschaften) einer Schnittstelle dienen zur Bestimmung von

Konstantenwerten

Schnittstellenrumpf initialisiert werden; ihr Wert kann nicht mehr geändert werde.

, d.h. sie müssen im Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 29

OO-Modellierung mit Java: Klassen

UML-Beispiel

Auto

Hubraum : int Gewicht : int beschleunigen(int) : boolean bremsen(int) : void Ch. Wolff } {

Umsetzung in Java

class Auto int Hubraum; int Gewicht; { boolean beschleunigen(int umWieviel) // Implementierung ...

} { return true; } void bremsen(int umWieviel) // Implementierung ...

Digitale Informationsverarbeitung, Kap. 26 30

OO-Modellierung mit Java: Objekte

UML-Beispiel

einAuto : Auto Hubraum = 1800 Gewicht = 1100 Ch. Wolff } {

Umsetzung in Java

class Autotest { Auto einAuto; public Autotest(int H, int G) einAuto.Hubraum = H; einAuto.Gewicht = G; } // Das Objektschema links zeigt das Objekt einAuto // in dem Zustand, in dem es sich nach Aufruf des // Konstruktors Autotest(1800, 1100) befindet.

Digitale Informationsverarbeitung, Kap. 26 31

OO-Modellierung mit Java: Vererbung

UML-Beispiel

Ch. Wolff

Flugzeug Fahrzeug Auto Kombi

Umsetzung in Java

class Fahrzeug { { // Eigenschaften /Methoden } class Flugzeug extends Fahrzeug // Eigenschaften /Methoden { } class Auto extends Fahrzeug } // Eigenschaften /Methoden } { class Kombi extends Auto // Eigenschaften /Methoden Digitale Informationsverarbeitung, Kap. 26 32

OO-Modellierung mit Java: Schnittstellen

«interface»

Druckbar

bereiteDruckDaten() : void sendeDruckDaten() : void } { interface Druckbar // Methodenköpfe ohne Implementierung void bereiteDruckDaten(); void sendeDruckDaten()

Druckbar Grafik

Ch. Wolff bzw. Druckbar { class Grafik implements Druckbar { void bereiteDruckDaten() // Realisierung } { void sendeDruckDaten()

Grafik

Digitale Informationsverarbeitung, Kap. 26 } } 33

Fazit: OO-Konzepte in Java

    

Entstehung der Sprache:

Java ist syntaktisch eng an C++ angelehnt, aber anders als C++ eine

streng an den Prinzipien der Objektorientierung orientierte Sprache

. Ausnahme: Primitiven Datentypen, die keine Objekte eines Klassentyps sind.

Typisierung:

Java realisiert eine strenge Typprüfung – sowohl zur

time

als auch zur Laufzeit eines Programms.

compile

Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 34

OO-Konzepte in Java (Forts.)

 

Vererbung

 Für Klassen existiert nur Einfachvererbung, Mehrfachvererbung nur für Schnittstellen

Polymorphismus:

 das Überladen von Methoden und Konstruktoren,  Entscheidung für die passende Methodenimplementierung zur Laufzeit (late binding) und  Zuweisung von Objektreferenzen zu Objektreferenzen anderen Typs (im gleichen Teilbaum der Klassenhierarchie) 

Kein

Überladen von Operatoren (z. B. Neudefinition von ‚+‘ oder ‚*‘ für eine Klasse) Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 35

OO-Konzepte in Java III

Initialisierung und Konstruktoren

 Eigenschaften von Klassen werden automatisch instantiiert und mit Default-Werten belegt (0 bei Integer-Werten, false bei boolean ...)  Für jede Klasse existiert ein (parameterloser) Defaultkonstruktor  unterschiedliche Konstruktoren (Parametertyp und -anzahl) können deklariert werden  Die “Dekonstruktion” von Klassen geschieht automatisch durch die Speicherverwaltung Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 36

OO-Konzepte in Java IV

Abstrakte Klassen

 Die Bildung abstrakter Klassen wird von Java unterstützt. Zusätzlich können in Schnittstellen abstrakte Methoden zusammengestellt werden, die einen semantisch zusammengehörenden Funktionalitätsbereich spezifizieren.

 Metaklassen und Klassenobjekte  Durch die Klasse

Class

und die im Paket

java.lang.reflect

unterstützt Java die Bildung von Klassen und Objekten und das dynamische Laden von Klassen, deren Instantiierung und Verwendung zur Laufzeit eines Programms.

Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 37

OO-Konzepte in Java V

 Generische Klassen  Mit Hilfe der Basisklasse Object und der Mechanismen der class reflection lassen sich generische Klassen (z. B. abstrakte Datentypen) definieren, die je nach Bedarf mit Objekten unterschiedlichen Typs gefüllt werden können, vgl. unten Kap. und .  Zuweisung von Objektreferenzen  Die Zuweisung von Objektreferenzen erfolgt auf der Basis der Referenzsemantik (d. h. die Referenz auf das Objekt, nicht seine Werte werden übergeben). Für primitive Datentypen gilt die Wertsemantik.

Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 38

Anweisungen und Anweisungsblöcke

  Blockaufbau und Variablendeklarationen erfolgen im wesentlichen nach den von C++ bekannten Regeln.

Folgende Typen von Anweisungen sind in Java vorhanden:         Leere Anweisung Anweisung mit Label Ausdruck; Auswahl Iteration Sprunganweisung Sychronisationsanweisung Ausnahmeanweisung Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 39

Anweisungsblöcke

 Ein Anweisungsblock besteht aus einer einzenlen, durch Semikolon abgeschlossenen Anweisung oder einer in geschweiften Klammern eingefassten Folge von Anweisungen: Anweisung; { Anweisung1; Anweisung2; // ...

Anweisungn; } Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 40

Methoden- und Komponentenzugriffe

 Auf die Methoden einer Klasse (eines Objektes einer Klasse) kann man unter Angabe von Klase und Methode zugreifen: Objektname.Methodenname(); Z. B.: System.out.println(); Gleiches gilt für die Komponenten eines Objekts: MeinObjekt.MeineEigenschaft = 0; Die Angabe der Objektvariablen ist nur notwendig, wenn der Zugriff nicht ohnehin innerhalb der Klassendeklaration erfolgt.

Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 41

Operatoren und Separatoren

  verfügbare Operatoren im wesentlichen mit den aus C/C++ bekannten Operatoren identisch: Separatoren:

() [] {} ; , .

 Operatoren:

= > &&

++

- << >>> += <<= >>>= < || + >> -= >>= !

*= ?

* /= : / &= == & |= <= | ^= >= ^ %= != %

 Wichtig: Der Additionsoperator ist auch für Objekte vom Typ String definiert (string concatenation). Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 42

Auswahlanweisungen

    Wie in C/C++ gibt es zwei Formen: if-Anweisung (mit else-Verzweigung) switch-Anweisung Zu beachten ist, daß bei der if-Anweisung der auszuwertende Typ den Datentyp boolean haben muß; anders als in C können also nicht ohne weiteres einfach Integer-Variablenwerte ausgewertet werden, da sie nicht direkt nach boolean konvertierbar sind.

Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 43

Die IF-Anweisung

if() Anweisung; bzw. {Anweisungsblock;} [else Anweisung; bzw. {Anweisungsblock;}] class Test { static public void main(String args[]) { int iZaehler = 5; if(iZaehler > 10) { System.out.println(iZaehler); } else { } System.out.println(iZaehler+10); Digitale Informationsverarbeitung, Kap. 26 44

Switch-Anweisung

switch() { case Auswahlwert1: // auszuführender Code für Fall 1 [break;] } case Auswahlwert2: // auszuführender Code für Fall 1 [break;] // ...ggf. weitere Fälle default: // auszuführender Code, sollte sonst nichts zutreffen [break;] Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 45

Beispiel Switch-Anweisung

int i = 0; for(i = 5; i >= 0; i--) { switch(i) { case 4: case 5: System.out.print("i "); Ch. Wolff break; case 3: System.out.print("\bst"); break; case 2: } } } } case 1: System.out.println("Zählvariable"); break; default: break; System.out.print(" die "); Digitale Informationsverarbeitung, Kap. 26 System.out.println("."); 46

Iterationsanweisungen

Zur Ablaufsteuerung existieren wie in C/C++ drei Schleifenkonstrukte:

 eine while-Schleife: while (Ausdruck) Statement  eine do/while-Schleife: do Anweisung while (Ausdruck)  eine for-Schleife: for(Init; Ausdruckopt; Inkrementopt) Anweisung Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 47

Beispiel while-Schleife

// ...

iZaehler = 5; while(iZaehler-- > 0) { System.out.Println(iZaehler); } // ...

while(false) { // Schleifenrumpf wird nie erreicht System.out.println(iZaehler); } // ...

Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 48

Beispiel do-while-Schleife

iZaehler = 5; do { System.out.println("Schleifenrumpf do-while\n"); } while(iZaehler-- > 0); Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 49

Beispiel For-Schleife

for(i = 5; i < 10; i++) { System.out.println(i); System.out.println(“\n”); } Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 50

Sprunganweisungen

 Der Kontrollfluß kann auch unbedingt durch Sprunganweisungen gesteuert werden:  break [Bezeichner] - Verlassen einer Ausführungsumgebung  continue [Bezeichner] - Fortsetzen einer umgebenden Anweisung  return [] Wertrückgabe Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 51

Beispiel break-Anweisung

int i = 0; for(i = 5; i >= 0; i--) { if(i == 3) break; } System.out.println(i); Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 52

Beispiel Break mit Label

int i = 10, j = 0, k = 0; Ziel_des_Sprungs: while(i > 0) { do { j++; for(k = 5; k >= 0; k--) { if(k == 3) break Ziel_des_Sprungs; } }while(j < 10); i--; } System.out.println(k); Ausgabe: 3 Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 53

Beispiel continue-Anweisung

{ for(int i = 0; i < 5; i++) System.out.println("vor"); if(i == 2) continue; System.out.println("nach"); } Ausgabe: vor nach vor nach vor vor nach vor nach Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 54

Defensives Programmieren mit Ausnahmen

 Möglichst frühzeitig sollen vom "normalen" Verhalten eines Programms abweichende Ereignisse abgefangen werden. Gerade bei Zugriff auf externe Ressourcen (Dateien, Netzwerkverbindungen etc.) tritt häufig der Fall ein, daß etwa ein Dateizugriff nicht gelingt da die Datei gesperrt ist oder eine Netzwerkressource nicht erreicht werden kann.

 Dazu dienen in Java Ausnahmen Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 55

Ausnahmen

 Ausnahmen können durch eine throws-Anweisung einer Methode zugeordnet werden  in Java gibt es eine Reihe vordefinierter Ausnahmen  Eine Ausnahme wird durch die throw-Anweisung explizit ausgelöst Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 56

Beispiel: Ausnahmeauslösung

{ static int teile(int x, int y) throws ArithmeticException if(y==0) throw(new ArithmeticException("Division durch 0")); else return x / y; } Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 57

Abarbeiten von Ausnahmen

 Try-, catch- und finally-Anweisungen dienen der Bearbeitung von Ausnahmen   Folgende Varianten sind erlaubt:  try  try [] finally Ein mit try umschlossener Anweisungsblock muß einen catch und/oder finally-Block nach sich ziehen. Ein einzelnes catch Statement in einem ist wie folgt aufgebaut  catch(Ausnahmetyp) Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 58

try-/catch-Anweisungen schematisch

Schematisch sieht die Verwendung von try-catch-Konstrukten wie folgt aus: try { // Programmcode, der möglicherweise eine Ausnahme auslöst } catch(Ausnahme A1) { // Programmcode zur Ausnahmebehandlung } catch(Ausnahme A2) { // Programmcode zur Ausnahmebehandlung } finally { // Programmcode, der unabhängig davon, wie der try-Block // verlassen wurde, immer ausgeführt wird } Ch. Wolff Digitale Informationsverarbeitung, Kap. 26 59