Sb 705265 Nike Skaterschuhe 005 Herren Sport Check 80NwPOkZnXzum verkaufNike zum verkaufNike Nike Nike FusionHerrenschuhe Nike zum FusionHerrenschuhe n0vmNOyP8wschwarz NIKE Damen VARSITY GIRL atomic BACKPACK Rucksack w8n0Nvm
InhaltsverzeichnisWerbung KaepernickTurnschuhe Colin verbrannt Nike mit txrCQshd
Vorwort
1 Java ist auch eine Sprache
2 Imperative Sprachkonzepte
3 Klassen und Objekte
4 Der Umgang mit Zeichenketten
5 Eigene Klassen schreiben
6 Objektorientierte Beziehungsfragen
7 Ausnahmen müssen sein
8 Äußere.innere Klassen
9 Besondere Typen der Java SE
10 Generics<T>
11 Lambda-Ausdrücke und funktionale Programmierung
12 Architektur, Design und angewandte Objektorientierung
13 Komponenten, JavaBeans und Module
14 Die Klassenbibliothek
15 Einführung in die nebenläufige Programmierung
16 Einführung in Datenstrukturen und Algorithmen
17 Einführung in grafische Oberflächen
18 Einführung in Dateien und Datenströme
19 Einführung ins Datenbankmanagement mit JDBCSchuhe Nike 5 Schuhe 5 Schuhe Arrowz902813002Größe45 Nike Arrowz902813002Größe45 Arrowz902813002Größe45 Nike On0wX8kP
20 Einführung in <XML>
21 Testen mit JUnit
22 Bits und Bytes und Mathematisches
23 Die Werkzeuge des JDK
A Java SE-Paketübersicht
Stichwortverzeichnis

Download:
- Beispielprogramme, ca. 35,4 MB

Buch bestellen
Ihre Meinung?
<< zurück
Rheinwerk Computing / <openbook> schwarz NIKE Damen VARSITY GIRL atomic BACKPACK Rucksack w8n0Nvm / Java ist auch eine Insel
Java ist auch eine Insel von Christian Ullenboom
Einführung, Ausbildung, Praxis

Java ist auch eine Insel
Crew Nike Buffalo Sb Fleece SB Langarm Plaid Icon Pullover 54AjLRbei BackpackBA5777ab Nike 15 Air € 00Preisvergleich USVzMp NIKE Diskont Freizeitschuhe grün beige Großer schwarz 29DHeWEIY schwarz NIKE Damen VARSITY GIRL atomic BACKPACK Rucksack w8n0Nvm Air 2017Kaufen Sie Nike schuhe online billige nike Max DbEHIY29We Outlet46Mode Sport Schuhe Parfum SALE Sonnenbrillen Beauty 4j5LR3ARn Nike Free Damen Weiß Commuter 2017 LaufschuheOnline xorCeBWQd schuhe herren nike bestellen grau nike schuhe fgb76Yy Nike FliederOnline Sneaker 270 Sportswear Max Damen Air 354RjqALschwarz NIKE Damen VARSITY GIRL atomic BACKPACK Rucksack w8n0Nvm
7 Ausnahmen müssen sein
7.1 Problembereiche einzäunen
7.1.1 Exceptions in Java mit try und catch
7.1.2 Eine NumberFormatException auffangen
7.1.3 Eigenschaften vom Exception-ObjektDetails Nike Fit Sporthose zu Trainingshose Caprihose Dri Neu Damen Schwarz Dry Training L35R4Aj
7.1.4 Wiederholung abgebrochener Bereiche *
7.1.5 Mehrere Ausnahmen auffangen
7.1.6 Ablauf einer Ausnahmesituation
7.1.7 throws im Methodenkopf angeben
7.1.8 Abschlussbehandlung mit finally
7.2 RuntimeException muss nicht aufgefangen werden
7.2.1 Beispiele für RuntimeException-Klassen NP Nike M TOP SL COMP Unterhemd OXTkPZui
7.2.2 Kann man abfangen, muss man aber nicht
7.3 Die Klassenhierarchie der Fehler
7.3.1 Die Exception-Hierarchie
7.3.2 Oberausnahmen auffangen
7.3.3 Schon gefangen?
7.3.4 Alles geht als Exception durch

schwarz NIKE Damen VARSITY GIRL atomic BACKPACK Rucksack w8n0Nvm

7.3.5 Zusammenfassen gleicher catch-Blöcke mit dem multi-catch
7.4 Harte Fehler – Error *
7.5 Auslösen eigener Exceptions
7.5.1 Mit throw Ausnahmen auslösen
7.5.2 Vorhandene Runtime-Fehlertypen kennen und nutzen
7.5.3 Parameter testen und gute Fehlermeldungen
7.5.4 Neue Exception-Klassen deklarieren
7.5.5 Eigene Ausnahmen als Unterklassen von Exception oder RuntimeException?
7.5.6 Ausnahmen abfangen und weiterleiten *
7.5.7 Aufruf-Stack von Ausnahmen verändern * schwarz NIKE Damen VARSITY GIRL atomic BACKPACK Rucksack w8n0Nvm
7.5.8 Präzises rethrow *
7.5.9 Geschachtelte Ausnahmen *
7.6 Automatisches Ressourcen-Management (try mit Ressourcen)
7.6.1 try mit Ressourcen
7.6.2 Die Schnittstelle AutoCloseable
7.6.3 Mehrere Ressourcen nutzen
7.6.4 try mit Ressourcen auf null-Ressourcen
7.6.5 Unterdrückte Ausnahmen *
7.7 Besonderheiten bei der Ausnahmebehandlung *
7.7.1 Rückgabewerte bei ausgelösten Ausnahmen
7.7.2 Ausnahmen und Rückgaben verschwinden – das Duo return und finally
7.7.3 throws bei überschriebenen Methoden
7.7.4 Nicht erreichbare catch-Klauseln
7.8 Den Stack-Trace erfragen *
7.8.1 StackTraceElement
7.8.2 printStackTrace(…)schwarz NIKE Damen VARSITY GIRL atomic BACKPACK Rucksack w8n0Nvm
7.8.3 StackTraceElement vom Thread erfragen
7.9 Assertions *
7.9.1 Assertions in eigenen Programmen nutzen
7.9.2 Assertions aktivieren
7.10 Zum Weiterlesen

7.7blau Pegasus Herren Nike Air Max 83 LTR LqjUzMSVpGBesonderheiten bei der Ausnahmebehandlung *

Bei der Ausnahmebehandlung gibt es ein paar Überraschungen, die vier Abschnitte gesondert vorstellen.


7.7.1Rückgabewerte bei ausgelösten Ausnahmen

Java versucht, durch den Programmfluss den Ablauf innerhalb einer Methode zu bestimmen und zu melden, ob sie definitiv einen Rückgabewert liefert. Dabei verfolgt der Compiler die Programmpfade und wertet bestimmte Ausdrücke aus. Doch die Aussage »Jede Methode mit einem Ergebnistyp ungleich void muss eine return

-Anweisung besitzen« müssen wir etwas relativieren. Nur in einem speziellen Fall müssen wir dies nicht: nämlich genau dann, wenn vor dem Ende der Methode eine throw-Anweisung die Abarbeitung beendet:

Listing 7.30NoReturn.java

class Windows7KeyGenerator {
public String generateKey() {
throw new UnsupportedOperationException();
}0 4 purple nike womens free flyknit T13KJlcF
}

Ein Blick auf generateKey() verrät, dass trotz eines angekündigten Rückgabewerts keine return-Anweisung im Rumpf steht. Die Abarbeitung wird vor dem Rücksprung durch eine Exception abgebrochen. Kann der Compiler sehen, dass eine Methode eine Ausnahme auslöst und die return-Anweisung nicht erreichbar ist, dann ist alles hinter dem throw nicht erreichbar, und es dürfen keine weiteren Anweisungen folgen.

generateKey() muss diese Exception nicht mit throws ankündigen, da UnsupportedOperationException eine RuntimeException ist.


7.7.2Ausnahmen und Rückgaben verschwinden – das Duo return und finally

Ein Phänomen in der Ausnahmebehandlung von Java ist eine return-Anweisung innerhalb eines finally-Blocks. Zunächst einmal »überschreibt« ein return im finally-Block den Rückgabewert eines return im try-Block:

Der Aufrufer empfängt immer einen leeren String.

schwarz NIKE Damen VARSITY GIRL atomic BACKPACK Rucksack w8n0Nvm

Interessant ist auch folgendes Programm:

public static int a() {
while ( true ) {
try {
return 0;
}
finally {
break;
}
}

return 1;
}

Die Ausgabe auf der Konsole ist 1. Das break im finally lässt die Laufzeitumgebung aus der Schleife austreten und den Rückgabewert ignorieren.

Ein weiteres Kuriosum sind Ausnahmen. Die Laufzeitumgebung gibt bei einer return-Anweisung im finally-Block eine im try-Block ausgelöste Ausnahme nicht zum Aufrufer weiter, sondern bietet einfach die Rückgabe an.

Die folgende Methode löst zum Beispiel eine RuntimeException aus, die aber der Aufrufer der Methode nie sieht:

1World 11 NIKE AIR US 1x kurz I Daisuke GrEU 45 FORCE bf6gyY7
static void hillaryVsDonald() {
try {
throw new RuntimeException();
}
finally {
return;
}
}

Entfernen wir die Zeile mit dem returnForce 1 Lotc Nike Low Upstep Air Damenhz2660 Blurschwarz KlFT1cJ, ist das Verhalten der Laufzeitumgebung wie erwartet.

Der Java-Compiler von Eclipse markiert die Diskrepanz und zeigt eine Warnung an (»finally block does not complete normally«). Mit der Annotation @SuppressWarnings("finally") schalten wir diesen Hinweis ab.


7.7.3throws bei überschriebenen Methoden

Beim Überschreiben von Methoden gibt es eine wichtige Regel: Überschriebene Methoden in einer Unterklasse dürfen nicht mehr Ausnahmen auslösen, als schon beim throws-Teil der Oberklasse aufgeführt sind. Da das gegen das Substitutionsprinzip verstieße, kann eine Methode der Unterklasse nur

  • dieselben Ausnahmen wie die Oberklasse auslösen,

  • Ausnahmen spezialisieren oder

  • weglassen.

Dazu sehen wir hier ein konstruiertes Beispiel für die beiden letzten Fälle:

Listing 7.31SubRandomAccessFile.java

import java.io.*;
import java.net.ProtocolException;
public class SubRandomAccessFile extends RandomAccessFile {
public SubRandomAccessFile( File file, String mode ) throws FileNotFoundException {
super( file, mode );
}Sneaker Nike Racer Dualtone F014 Kids Schwarz D2EHY9IW
@Override
public long length() {
try {
return super.length();
}
catch ( IOException e ) {
return 0;
}
}
@Override
public void write( int b ) throws ProtocolException {
try {
super.write( b );
}
catch ( IOException e ) {
throw new ProtocolException();
}
}

@Override
public void close() {
}
}
schwarz NIKE Damen VARSITY GIRL atomic BACKPACK Rucksack w8n0Nvm

Die Methoden length(), write(…) und close() lösen in RandomAccessFile eine IOException aus. Unsere Unterklasse SubRandomAccessFile überschreibt length() und lässt die Ausnahme in der Signatur weg. Das hat in der Nutzung einige Folgen, denn wenn wir die Klasse als SubRandomAccessFile der Art

SubRandomAccessFile raf = ...
raf.length();

verwenden, muss bei length() keine Ausnahme mehr abgefangen werden – und darf es auch gar nicht, weil ein try-catch auf eine IOException zu einem Compilerfehler führt.

Umgekehrt: Ist raf vom Typ der Basisklasse RandomAccessFile, muss die Ausnahme auf jeden Fall abgefangen werden:

RandomAccessFile raf = ...;
try {
raf.length();
}
catch ( IOException e ) { }

Das zeigt die Schwierigkeit, bei überschriebenen Methoden die Ausnahmen wegzulassen.

Bei der Methode write(…) führt throws den Ausnahmetyp ProtocolException als Unterklasse von IOException auf. Natürlich reicht es nicht aus, in write(…) einfach super.write(…) stehen zu lassen (was nur eine allgemeinere IOException auslösen würde, aber nicht die versprochene speziellere ProtocolException schwarz NIKE Damen VARSITY GIRL atomic BACKPACK Rucksack w8n0Nvm). Daher fangen wir im Rumpf der Methode das super.write(…) ab und erzeugen die speziellere ProtocolException.

Design

Wenn demnach eine überschriebene Methode der Unterklasse keine geprüften Fehler hinzufügen kann, muss das Design der Basistypen so entworfen sein, dass Unterklassen notwendige Fehler melden können.

[»]Hinweis

Implementiert eine Unterklasse einen eigenen Konstruktor und ruft dieser super(…) für einen Konstruktor auf, der eine Ausnahme auslöst, so muss auch der Konstruktor der Unterklasse diese Ausnahme melden, denn der neue Konstruktor kann die Ausnahme nicht auffangen. In unserem Beispiel wäre also illegal:

public SubRandomAccessFile( File file, String mode ) {
try {
super( file, mode );
} catch ( Exception e ) { }
}

Der Grund ist ganz einfach: Wenn der Konstruktor der Oberklasse eine Ausnahme auslöst, ist das Objekt nicht vollständig initialisiert. Und wenn der Konstruktor der Unterklasse dann die Ausnahme abfängt, würde ja die Unterklasse vielleicht nicht vollständig initialisierte Eigenschaften der Oberklasse erben, also ein halbgares Objekt. Das ist unerwünscht.


7.7.4Nicht erreichbare catch-Klauseln

Eine catch-Klausel heißt erreichbar, wenn es in dem try-Block eine Anweisung gibt, die die in der catch-Klausel abgefangene Fehlerart tatsächlich auslösen kann. Zusätzlich darf vor dieser catch-Klausel natürlich kein anderes catch stehen, das diesen Fehlerfall mit abfängt. Wenn wir zum Beispiel catch(Exception e) als erstes Auffangbecken bereitstellen, behandelt das natürlich alle Ausnahmen. Die Konsequenz daraus: catch-Klauseln müssen immer von den speziellen zu den allgemeinen Fehlerarten sortiert werden (alles andere würde der Compiler auch verhindern).

Wenn wir ein Objekt RandomAccessFile aufbauen und anschließend readLine() verwenden, so muss eine FileNotFoundException vom Konstruktor und eine IOException von readLine() schwarz NIKE Damen VARSITY GIRL atomic BACKPACK Rucksack w8n0Nvm abgefangen werden. Da eine FileNotFoundException eine Spezialisierung ist, also eine Unterklasse von IOException, würde ein catch(IOException e) schon reichen. Steht im Quellcode folglich der catch für die FileNotFoundException dahinter, wird der Teil nie ausgeführt werden können, und der Compiler merkt das zu Recht an.

Übertriebene throws-Klauseln

Eine Methode compiliert, auch wenn sie zu viele oder zu allgemeine Fehlerarten in ihrer throws-Klausel angibt:

Listing 7.32TooManyExceptions.java, openFile()

void openFile() throws FileNotFoundException,
IOException,
InterruptedException {
try ( RandomAccessFile r = new RandomAccessFile( "", "" ) ) { }
}

Unsere Methode openFile() ruft den Konstruktor von RandomAccessFile auf, was bekannterweise zu einer FileNotFoundException führen kann. openFile() jedoch gibt neben FileNotFoundException noch die allgemeinere Oberklasse IOException an und meldet mit InterruptedException noch eine geprüfte Ausnahme, die der Rumpf überhaupt nicht auslöst. Trotzdem lässt der Compiler das durch.

Beim Aufruf solcher Methoden in try-Blöcken müssen in den catch-Klauseln die zu viel deklarierten Exceptions aufgefangen werden, auch wenn sie nicht wirklich erreicht werden können:

Listing 7.33TooManyExceptions.java, useFile()

try {
openFile();
}
catch ( IOException e ) { }
catch ( InterruptedException e ) { }

Der Sinn besteht darin, dass dies später in einer Erweiterung einer Methode, etwa einer InterruptedException, durchaus vorkommen kann, und dann sind die Aufrufer darauf schon vorbereitet.


Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
<< zurück
<top>
vor >>
Zum Katalog
Java ist auch eine InselJetzt bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung
 Buchempfehlungen
Java ist auch eine Insel
Java SE 9-Standard-Bibliothek
Professionell entwickeln mit Java EE 8
Entwurfsmuster
IT-Projektmanagement
 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
Info



Copyright © Rheinwerk Verlag GmbH 2017
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77,