Galileo Computing < openbook >
Galileo Computing - Professionelle Buecher. Auch fuer Einsteiger.
Galileo Computing - Professionelle Buecher. Auch fuer Einsteiger.


Java ist auch eine Insel von Christian Ullenboom
Buch: Java ist auch eine Insel (Galileo Computing)
gp Kapitel 7 Exceptions
gp 7.1 Problembereiche einzäunen
gp 7.1.1 Exceptions in Java mit try und catch
gp 7.1.2 Eine Datei auslesen mit RandomAccessFile
gp 7.1.3 Ablauf einer Ausnahmesituation
gp 7.1.4 Wiederholung kritischer Bereiche
gp 7.1.5 throws im Methodenkopf angeben
gp 7.1.6 Abschließende Arbeiten mit finally
gp 7.1.7 Nicht erreichbare catch-Klauseln
gp 7.2 Die Klassenhierarchie der Fehler
gp 7.2.1 Die Exception-Hierarchie
gp 7.2.2 Oberausnahmen fangen
gp 7.2.3 Alles geht als Exception durch
gp 7.2.4 Ausnahmen, die nicht aufgefangen werden müssen: RuntimeException
gp 7.2.5 Harte Fehler: Error
gp 7.3 Werfen eigener Exceptions
gp 7.3.1 Typecast auf ein null-Objekt für eine NullPointerException
gp 7.3.2 Neue Exception-Klassen definieren
gp 7.4 Rückgabewerte bei ausgelösten Ausnahmen
gp 7.5 Stack-Aufruf analysieren
gp 7.6 Assertions
gp 7.6.1 Assertions in eigenen Programmen nutzen
gp 7.6.2 Assertions aktivieren
gp 7.6.3 Assertion-Nutzung in den Sun-Quellen
gp 7.7 Sicherheitsfragen mit dem SecurityManager klären
gp 7.7.1 Programm beenden


Galileo Computing

7.7 Sicherheitsfragen mit dem SecurityManager klärendowntop

In der Laufzeitumgebung sind spezielle Ausnahmen für den Fall definiert, dass das System Operationen nicht zulässt, die das gerade laufende Programm gerne ausführen möchte. In einem Applet lassen sich beispielsweise keine Dateien löschen, da ein Sicherheitsmanager dies verhindert. In dem Fall, dass der Applet-Programmierer einen Zugriff auf das Dateisystem versucht, wird im Applet eine SecurityException vom Sicherheitsmanager ausgelöst.


Galileo Computing

7.7.1 Programm beendentoptop

Die statische Methode exit() aus der Systemklasse gibt den Wunsch, die JVM komplett zu beenden, an die Laufzeitumgebung weiter, die durch ein Runtime-Objekt repräsentiert ist. So delegiert die Implementierung von exit() der Klasse System die ganze Arbeit direkt an die Methode exit() der Klasse Runtime:

public static void exit(int status) {
  Runtime.getRuntime().exit(status);
}

Dürfen wir beenden? Ein detaillierter Blick auf die Implementierung

In der Methode exit() von Runtime taucht die Frage auf, ob ein Programm die gesamte JVM beenden darf. Über den SecurityManager folgt die Anfrage mit checkExit(), ob die Berechtigung zum Beenden der Laufzeitumgebung existiert. Wenn wir die JVM schließen dürfen, beendet die native Methode exitInternal(int) die Anwendung. Es ist die Aufgabe von exitInternal(), die von der JVM benutzten Ressourcen freizugeben:

public void exit( int status )
{
  SecurityManager security = System.getSecurityManager();
  if ( security != null )
    security.checkExit(status);
  Shutdown.exit(status);
}

Applets dürfen zum Beispiel nicht die gesamte JVM beenden, da alle Applets auf derselben Web-Seite in derselben JVM ablaufen und gegeneinander abgeschirmt werden müssen. Für Applets liefert getSecurityManager() eine Referenz ungleich null, und die checkExit()-Methode dieses SecurityManager-Exemplars löst eine SecurityException aus, um dem Applet das Beenden der JVM zu verbieten. Natürlich dürfen Applets auch den SecurityManager nicht mit setSecurityManager() verändern und so den Schutz aushebeln.





Copyright (c) Galileo Press GmbH 2004
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.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de