Galileo Computing < openbook >
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


Java ist auch eine Insel (3. Aufl.) von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 1.4
Buch: Java ist auch eine Insel
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 gefangen werden müssen: RuntimeException
  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ären downtop

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 © Galileo Press GmbH 2003
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] [Buchkatalog] [Neue Bücher] [Vorschau]

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