Informatik 2

Werbung
FH D
Fachhochschule Düsseldorf
University of Applied Sciences
12
Informatik 2
Objektorientierte Programmierung in Java
Prof. Dr.‐ Ing. André Stuhlsatz
FH D
Wiederholung: Exceptions in Java
Fachhochschule Düsseldorf
University of Applied Sciences
 Ausnahmen (Exceptions) sind Instanzen einer speziellen Klassehierarchie der Standardbibliothek:
Throwable
Exception
IO
Runtime
Exception
Exception
Error
 Zum Auslösen oder „Werfen“ von Exceptions dient die Anweisung throw:
class Fehler{
public static void main(String[] args){
throw new RuntimeException();
}
}
Informatik 2
FH D
2
Wiederholung: Exceptions
Fachhochschule Düsseldorf
University of Applied Sciences
 Alle Methoden in Java die eine Exception auslösen können, müssen dies mittels throws anzeigen (Checked Exceptions):
class Fehler{
public static void main(String[] args) throws Exception{
throw new Exception();
}
}
 Des Weiteren muss mit catch sichergestellt werden, dass eine Exception
auch „gefangen“ wird: Versuch (try) eine
try{
Anweisung
//Anweisungen
auszuführen, die
}
catch(Typ Objekt){
eine Ausnahme
//Anweisungen
erzeugen könnte.
}
 Ausnahme bilden hierbei Error, RuntimeException und deren Subklassen (Unchecked Exceptions).
Informatik 2
3
1
FH D
Wiederholung: try/catch‐Block
Fachhochschule Düsseldorf
University of Applied Sciences
 Mit Hilfe des catch‐Blocks fängt man eine oder mehrere Ausnahmen vom entsprechenden Ausnahmetyp:
try{
//Anweisungen
}
catch(Typ1 Objekt){
//Anweisungen
}
catch(Typ2 Objekt){
//Anweisungen
}
finally{
//Anweisungen
}
 Jeder Exception‐Typ darf in einem try‐catch‐Block nur einmal abgefragt werden!
 Optional darf nach einem catch‐Block noch ein finally‐Block stehen.
 Der finally‐Block wird quasi immer ausgeführt.
4
Informatik 2
FH D
Wiederholung: Benutzerdefinierte Exceptions
Fachhochschule Düsseldorf
University of Applied Sciences
 Eigene Ausnahmen werden durch Ableiten von der throwable‐Klasse bzw.
ihrere Subklassen (in der Regel von der Klasse Exception) ermöglicht:
class DivisionDurchNull extends Exception{
public DivisionDurchNull(){
super("Division durch Null");
}
}
 Generell hat man die Möglichkeit durch catch(Throwable e) auf alle erdenklichen Exceptions zu reagieren.
 Man sollte im Allgemeinen auf einzelne Exception über einen entsprechenden catch‐Block reagieren.
 Dabei gilt, dass man sich vom Speziellen (Subklasse) zum Allgemeinen (Superklasse) in der Exception‐Hierarchie „durchhangelt“.
5
Informatik 2
FH D
Fachhochschule Düsseldorf
University of Applied Sciences
Innere Klassen/Interfaces
 Klassen (oder) Interfaces können zur besseren Strukturierung ineinander verschachtelt werden.
 Eine Definition von inneren Klassen/Interfaces (inner class/inner interface) erfolgt innerhalb einer anderen Klasse/Interface (outer class/outer interface).
 Bisherige Klassen werden „Top‐Level‐Klasssen“ genannt.
class TopLevelClass{
…
}
class OuterClass{
class InnerClass{
…
}
…
}
 Motivation von inneren Klassen/Interfaces ist die Bereitstellung von Hilfsklassen/‐interfaces möglichst nahe und gekapselt, wo sie benötigt werden.
 Innere Klassen/Interfaces können auf Eigenschaften der äußeren Klasse zugreifen (auch auf private!).
Informatik 2
6
2
FH D
Typen von inneren Klassen in Java
Fachhochschule Düsseldorf
University of Applied Sciences
 Es gibt vier Arten von inneren Klassen in Java:
 Geschachtelte Klassen sind Top‐Level‐Klassen, obwohl sie innerhalb einer anderen Klasse definiert sind.
 Elementklassen sind ganz allgemein innere Klassen.
 Lokale Klassen werden innerhalb einer Methode oder eines Blockes definiert.
 Anonyme Klasse sind lokal und namenlos.
Informatik 2
FH D
7
Geschachtelte Klassen
Fachhochschule Düsseldorf
University of Applied Sciences
 Geschachtelte Top‐Level‐Klassen sind mit static deklarierte innere Klassen: class OuterClass{
static int i;
int j;
public static class StaticInnerClass{
public void setzeI(){
i = 20;
Zugriff ist nur auf
{
statische Elemente
}
der äußeren Klasse
…
möglich!
}
 Objekte von geschachtelten Klassen können auch ohne ein Objekt der äußeren Klasse existieren:
OuterClass a = new OuterClass();
OuterClass.StaticInnerClass ab = new OuterClass.StaticInnerClass();
 Geschachtelte Top‐Level‐Klassen dienen nur der Strukturierung (Namensraumerweiterung).
Informatik 2
FH D
8
Elementklassen
Fachhochschule Düsseldorf
University of Applied Sciences
 Element Klassen sind echte innere Klassen und dienen nicht nur der Strukturierung.
 Elementklassen haben auf alle Elemente der äußeren Klasse Zugriff, auch auf private.
 Elementklassen werden analog Top‐Level‐Klassen gebildet und verwendet, sie dürfen aber keine statischen Elemente enthalten.  Objekte von Elementklassen sind immer mit Objekten der äußeren Klasse verbunden: class A{
}
private int i;
public class B{
public class C{
public C(){i = 5};
}
Objekterzeugung:
public void init(){
A a = new A();
i = 0;
j = 0;
A.B b = a.new B();
{
}
A.B.C c = b.new C();
Informatik 2
3
FH D
Lokale Klassen
Fachhochschule Düsseldorf
University of Applied Sciences
 Lokale Klassen sind nicht auf oberster Ebene zugreifbar, sondern nur in Methoden oder Blöcken in denen sie definiert sind:
class A{
…
public void doSomething(){
int i = 0;
class Worker implements Runnable{
public void run{…};
}
new Worker().run();
…
}
…
}
 Lokale Klassen dürfen daher nicht als private,public protected oder static
deklariert werden!
Informatik 2
FH D
10
Lokale Klassen
Fachhochschule Düsseldorf
University of Applied Sciences
 Lokale Klassen dürfen keine statischen Elemente haben.
 Lokale Klassen dürfen nicht den gleichen Namen tragen wie eine umgebene Klasse.
 Eine lokale Klasse kann nur auf Konstanten (final) des umgeben Codeblocks zugreifen: class A{
int j = 0;// Zugriff möglich
public void doSomething(){
int i = 0;// kein Zugriff möglich
final k = 0;// Zugriff möglich, weil final
class Worker implements Runnable{
int n=0;
public void run{
n = (k++) * (j++);
};
}
new Worker().run();
…
}
…
}
Informatik 2
FH D
Fachhochschule Düsseldorf
University of Applied Sciences
11
Anonyme Klassen





Anonyme Klassen kann man als lokale „wegwerf“‐Klassen bezeichnen.
Sie werden wie lokale Klassen in Methoden bzw. Anweisungsblöcken definiert.
Sie haben die gleichen Einschränkungen wie lokale Klassen.
Sie besitzen keinen Namen und auch keinen Konstruktor.
Anonyme Klassen können nicht mit den Schlüsselwörten extends und implements verwendet werden.
 Bei Definition entsteht immer gleich das Objekt:
class A{
public void doSomething(){
Runnable Worker = new Runnable(){
public void run{
// mach was…
};
}
Worker.run();
…
}
…
}
Informatik 2
12
4
Herunterladen