Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.
 
Inhaltsverzeichnis
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 Die Klassenbibliothek
14 Einführung in die nebenläufige Programmierung
15 Einführung in Datenstrukturen und Algorithmen
16 Einführung in grafische Oberflächen
17 Einführung in Dateien und Datenströme
18 Einführung ins Datenbankmanagement mit JDBC
19 Einführung in <XML>
20 Testen mit JUnit
21 Bits und Bytes und Mathematisches
22 Die Werkzeuge des JDK
A Java SE Paketübersicht
Stichwortverzeichnis

Download:
- Beispielprogramme, ca. 20,0 MB
- Übungsaufgaben, ca. 1,8 MB
- Musterlösungen, ca. 0,8 MB

Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Java ist auch eine Insel von Christian Ullenbloom
Das umfassende Handbuch
Buch: Java ist auch eine Insel

Java ist auch eine Insel
Rheinwerk Computing
1306 Seiten, gebunden, 11. Auflage
49,90 Euro, ISBN 978-3-8362-2873-2
Pfeil 7 Ausnahmen müssen sein
Pfeil 7.1 Problembereiche einzäunen
Pfeil 7.1.1 Exceptions in Java mit try und catch
Pfeil 7.1.2 Eine NumberFormatException auffangen
Pfeil 7.1.3 Eigenschaften vom Exception-Objekt
Pfeil 7.1.4 Wiederholung abgebrochener Bereiche *
Pfeil 7.1.5 Mehrere Ausnahmen auffangen
Pfeil 7.1.6 Ablauf einer Ausnahmesituation
Pfeil 7.1.7 throws im Methodenkopf angeben
Pfeil 7.1.8 Abschlussbehandlung mit finally
Pfeil 7.2 RuntimeException muss nicht aufgefangen werden
Pfeil 7.2.1 Beispiele für RuntimeException-Klassen
Pfeil 7.2.2 Kann man abfangen, muss man aber nicht
Pfeil 7.3 Die Klassenhierarchie der Fehler
Pfeil 7.3.1 Die Exception-Hierarchie
Pfeil 7.3.2 Oberausnahmen auffangen
Pfeil 7.3.3 Schon gefangen?
Pfeil 7.3.4 Alles geht als Exception durch
Pfeil 7.3.5 Zusammenfassen gleicher catch-Blöcke mit dem multi-catch
Pfeil 7.4 Harte Fehler – Error *
Pfeil 7.5 Auslösen eigener Exceptions
Pfeil 7.5.1 Mit throw Ausnahmen auslösen
Pfeil 7.5.2 Vorhandene Runtime-Fehlertypen kennen und nutzen
Pfeil 7.5.3 Parameter testen und gute Fehlermeldungen
Pfeil 7.5.4 Neue Exception-Klassen deklarieren
Pfeil 7.5.5 Eigene Ausnahmen als Unterklassen von Exception oder RuntimeException?
Pfeil 7.5.6 Ausnahmen abfangen und weiterleiten *
Pfeil 7.5.7 Aufruf-Stack von Ausnahmen verändern *
Pfeil 7.5.8 Präzises rethrow *
Pfeil 7.5.9 Geschachtelte Ausnahmen *
Pfeil 7.6 Automatisches Ressourcen-Management (try mit Ressourcen)
Pfeil 7.6.1 try mit Ressourcen
Pfeil 7.6.2 Die Schnittstelle AutoCloseable
Pfeil 7.6.3 Mehrere Ressourcen nutzen
Pfeil 7.6.4 try mit Ressourcen auf null-Ressourcen
Pfeil 7.6.5 Unterdrückte Ausnahmen *
Pfeil 7.7 Besonderheiten bei der Ausnahmebehandlung *
Pfeil 7.7.1 Rückgabewerte bei ausgelösten Ausnahmen
Pfeil 7.7.2 Ausnahmen und Rückgaben verschwinden – das Duo return und finally
Pfeil 7.7.3 throws bei überschriebenen Methoden
Pfeil 7.7.4 Nicht erreichbare catch-Klauseln
Pfeil 7.8 Den Stack-Trace erfragen *
Pfeil 7.8.1 StackTraceElement
Pfeil 7.8.2 printStackTrace(…)
Pfeil 7.8.3 StackTraceElement vom Thread erfragen
Pfeil 7.9 Assertions *
Pfeil 7.9.1 Assertions in eigenen Programmen nutzen
Pfeil 7.9.2 Assertions aktivieren
Pfeil 7.10 Zum Weiterlesen
 
Zum Seitenanfang

7.9Assertions * Zur vorigen ÜberschriftZur nächsten Überschrift

Die Übersetzung des englischen Wortes assertion lässt vermuten, worum es geht: um Behauptungen. Mit diesen werden innerhalb von Methoden Zusicherungen (Vor- und Nachbedingungen) aufgestellt, die den korrekten Ablauf der Methode garantieren sollen. Ist eine Bedingung nicht erfüllt, wird ein Fehler ausgelöst, der darauf hinweist, dass im Programm etwas falsch gelaufen sein muss. Die ausgelösten Fehler sind vom Typ »Error« und nicht vom Typ »Exception« und sollten daher auch nicht aufgefangen werden, da eine nicht erfüllte Bedingung ein Programmierfehler ist.

 
Zum Seitenanfang

7.9.1Assertions in eigenen Programmen nutzen Zur vorigen ÜberschriftZur nächsten Überschrift

Assertions werden im Java-Quellcode mit der assert-Anweisung benutzt. Es gibt zwei Varianten, eine mit und eine ohne Meldung:

assert AssertConditionExpression;
assert AssertConditionExpression : MessageExpression;

AssertConditionExpression steht für eine Bedingung, die zur Laufzeit ausgewertet wird. Der Ausdruck wird nicht automatisch geklammert, da es sich nicht wie ein Methodenaufruf liest. Wertet sich das Ergebnis zu true aus, führt die Laufzeitumgebung die Abarbeitung normal weiter; ergibt die Auswertung false, wird das Programm mit einem java.lang.AssertionError beendet. Der optionale zweite Parameter, MessageExpression, ist ein Text, der beim Stack-Trace als Nachricht in der Fehlermeldung erscheint.

[+]Hinweis

Assertions stehen immer in der Klassendatei, da sie der Compiler immer in Bytecode abbildet. Die JVM ignoriert Assertions standardmäßig bei der Ausführung, und eine Aktivierung erfolgt nur auf Befehl; ein Ablauf ohne Bedingungstests ist also der Normalfall. Daraus folgt, dass Ausdrücke in den assert-Anweisungen ohne Nebeneffekte sein müssen. So etwas wie

assert counter-- == 0;

ist keine gute Idee, denn das Vermindern der Variablen ist ein Nebeneffekt, der nur dann stattfindet, wenn die JVM auch Assertions aktiviert hat. Allerdings lässt sich das auch für einen Trick nutzen, Assertions bei der Ausführung zu erzwingen. Im statischen Initialisierer einer Klasse können wir setzen:

boolean assertEnabled = false;
assert assertEnabled = true;
if ( ! assertEnabled )
throw new RuntimeException( "Assertions müssen aktiviert werden" );

Beispiel

Eine eigene statische Methode subAndSqrt(double, double) bildet die Differenz zweier Zahlen und zieht aus dem Ergebnis die Wurzel. Natürlich weiß jeder Entwickler, dass die Wurzel aus negativen Zahlen nicht erlaubt ist, aber dennoch ginge so etwas in Java durch, nur das Ergebnis ist eine NaN. Sollte irgendein Programmteil nun die Methode subAndSqrt(double, double) mit einem falschen Paar Zahlen aufrufen und das Ergebnis NaN sein, muss ein Assert-Error erfolgen, da es einen internen Programmfehler zu korrigieren gilt:

Listing 7.35com/tutego/insel/assertion/AssertKeyword.java

package com.tutego.insel.assertion;

public class AssertKeyword {

public static double subAndSqrt( double a, double b ) {
double result = Math.sqrt( a – b );

assert ! Double.isNaN( result ) : "Berechnungsergebnis ist NaN!";

return result;
}

public static void main( String[] args ) {
System.out.println( "Sqrt(10-2)=" + subAndSqrt(10, 2) );
System.out.println( "Sqrt(2-10)=" + subAndSqrt(2, 10) );
}
}

Java-Geschichte

Neue Schlüsselwörter wurden immer wieder eingeführt: in Java 1.3 das Schlüsselwort strictfp, in Java 1.4 das Schlüsselwort assert für die »Behauptungen«, und in Java 5 Aufzählungstypen mit dem neuen Schlüsselwort enum.

 
Zum Seitenanfang

7.9.2Assertions aktivieren Zur vorigen ÜberschriftZur nächsten Überschrift

Ein aktueller Java-Compiler übersetzt das Beispiel ohne Fehler, doch zur Laufzeit werden die Assertions standardmäßig nicht beachtet, da sie abgeschaltet sind. Somit entsteht kein Geschwindigkeitsverlust bei der Ausführung der Programme. Um Assertions zu aktivieren, muss die Laufzeitumgebung mit dem Schalter -ea (enable assertions) gestartet werden.

$ javaea AssertKeyword

Die Ausgabe ist dann:

Sqrt(10-2)=2.8284271247461903
Exception in thread "main" java.lang.AssertionError: Berechnungsergebnis ist NaN!
at com.tutego.insel.assertion.AssertKeyword.subAndSqrt(AssertKeyword.java:5)
at com.tutego.insel.assertion.AssertKeyword.main(AssertKeyword.java:13)
Wurde das Programm in Eclipse schon gestartet, kann im Menü »Run • Run Configurations …« unterhalb des Reiters »Arguments« bei den »VM arguments« der Schalter »-ea« gesetzt werden.

Abbildung 7.13Wurde das Programm in Eclipse schon gestartet, kann im Menü »Run • Run Configurations …« unterhalb des Reiters »Arguments« bei den »VM arguments« der Schalter »-ea« gesetzt werden.

Unter »File • Project Properties« kann der VM-Schalter für die Assertions gesetzt werden.

Abbildung 7.14Unter »File • Project Properties« kann der VM-Schalter für die Assertions gesetzt werden.

Assertions feiner aktivieren oder deaktivieren

Assertions müssen nicht global für das ganze Programm gesetzt werden, sondern können auch feiner deklariert werden, etwa für eine Klasse oder ein Paket. Mit geschickter Variation von –ea (Assertions aktivieren) und –da (Assertions deaktivieren) lässt sich sehr gut steuern, was die Laufzeitumgebung prüfen soll.

[zB]Beispiel

Aktiviere Assertions für die Klasse com.tutego.App:

$ java -ea:com.tutego.App ClassWithMain

Aktiviere Assertions für das Default-Paket (dafür stehen die drei Punkte):

$ java -ea:... ClassWithMain

Aktiviere Assertions für das Paket com.tutego inklusive aller Unterpakete (auch dafür stehen drei Punkte):

$ java -ea:com.tutego... ClassWithMain

Aktiviere Assertions für das Paket com.tutego inklusive aller Unterpakete, aber deaktiviere sie für die Klasse App in dem Paket com.tutego:

$ java -ea:com.tutego... -da:com.tutego.App ClassWithMain

 


Ihr Kommentar

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

>> Zum Feedback-Formular
<< zurück
 Zum Katalog
Zum Katalog: Java ist auch eine Insel Java ist auch eine Insel
Jetzt bestellen

 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Java SE 8 Standard-Bibliothek
Java SE 8 Standard-Bibliothek


Zum Katalog: Professionell entwickeln mit Java EE 7
Professionell entwickeln mit Java EE 7


Zum Katalog: Schrödinger programmiert Java
Schrödinger programmiert Java


Zum Katalog: Einführung in Java
Einführung in Java


Zum Katalog: Programmieren lernen mit Java
Programmieren lernen mit Java


Zum Katalog: Apps entwickeln für Android 5
Apps entwickeln für Android 5


Zum Katalog: Apps entwickeln mit Android Studio
Apps entwickeln mit Android Studio


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo

 
 


Copyright © Rheinwerk Verlag GmbH 2016
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, service@rheinwerk-verlag.de