PowerPoint

Werbung
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 out der Klasse System vom Typ Printwriter - Ausgabe
an die Konsole)
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
::==
{ Kommentar | Leerzeichen | Sprachelement }
Leerzeichen
::==
ASCII-SP | ASCII-HT | ASCII-FF | Zeilenendezeichen
Sprachelement ::==
Ch. Wolff
Schlüsselwort | Identifikator | Literal | Separator |
Operator
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 {, Schnittstellentyp}]
Klassenrumpf
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;
int test2 = 0
{ test = 5; }
//Deklaration
//Deklaration und Initialisierung
// 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 public, ist sie auch außerhalb ihres Paketes
sichtbar,
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 Oberklasse
 // geht nicht: class 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 Digitale
(zusätzlich
zur Einfachvererbung)
Informationsverarbeitung,
Ch. Wolff
Kap. 26
20
Methodendeklaration
 Vollständige Syntax der Methodendeklaration:
[public | protected | private]
Sichtbarkeit der Methode
[static]
Zuordnung Klasse/Objekt
[abstract | final]
Vererbbarkeit/Abstraktionsgrad
[native]
Zugriff auf Plattformspezifisches
[synchronized]
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 (kein Modifikator): Methode ist nur im gleichen Paket
sichtbar
 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 wie die Klasse
selbst, aber keinen Rückgabewert
 Für eine Klasse kann es mehrere Konstruktoren mit unterschiedlichen
Parametern geben (Polymorphismus)
class Konstrukt
{
int einWert;
Konstrukt(int W)
{
einWert = W;
}
}
Ch. Wolff
Digitale Informationsverarbeitung,
Kap. 26
24
Konstruktoren: Beispiel
 Für die vordefinierte Klasse String existieren zahlreiche
verschiedene Konstruktoren, u. a.:
public
public
public
public
public
public
public
Ch. Wolff
String()
String(String value)
String(char[] value)
String(char[] value, int offset, int count)
String(byte[] ascii, int hibyte, int offset, int count)
String(byte[] ascii, int hibyte)
String(StringBuffer, buffer)
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 Schnittstellenname
[extends 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, d.h. sie müssen im
Schnittstellenrumpf initialisiert werden; ihr Wert kann nicht
mehr geändert werde.
Ch. Wolff
Digitale Informationsverarbeitung,
Kap. 26
29
OO-Modellierung mit Java: Klassen
UML-Beispiel
Umsetzung in Java
Auto
Hubraum : int
Gewicht : int
beschleunigen(int) : boolean
bremsen(int) : void
Ch. Wolff
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
Umsetzung in Java
Fahrzeug
Flugzeug
Auto
Kombi
Ch. Wolff
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
Druckbar
Grafik
Ch. Wolff
bzw.
interface Druckbar
{
// Methodenköpfe ohne Implementierung
void bereiteDruckDaten();
void sendeDruckDaten()
}
class Grafik implements Druckbar
{
void bereiteDruckDaten()
Druckbar
{
// Realisierung
}
void sendeDruckDaten()
{
Grafik
// Realisierung
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 compile
time als auch zur Laufzeit eines Programms.
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:








Ch. Wolff
Leere Anweisung
Anweisung mit Label
Ausdruck;
Auswahl
Iteration
Sprunganweisung
Sychronisationsanweisung
Ausnahmeanweisung
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(<Bedingung>)
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,
}
}
}
Ch. Wolff
Kap. 26
44
Switch-Anweisung
switch(<Ausdruck>)
{
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:
case 1:
System.out.println("Zählvariable");
break;
default:
System.out.println(".");
break;
System.out.print("i ");
break;
}
}
}
case 3:
System.out.print("\bst");
break;
}
case 2:
System.out.print(" die ");
Ch. Wolff
Digitale Informationsverarbeitung,
Kap. 26
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 [<Ausdruck>] 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 <Anweisungsblock> <catch-Block>
try <Anweisungsblock> [<catch-Block>] finally
 Ein mit try umschlossener Anweisungsblock muß einen catchund/oder finally-Block nach sich ziehen. Ein einzelnes catchStatement in einem <catch-Block> ist wie folgt aufgebaut
 catch(Ausnahmetyp) <Anweisungsblock>
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
Herunterladen