Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
1 Java ist auch eine Sprache
2 Sprachbeschreibung
3 Klassen und Objekte
4 Der Umgang mit Zeichenketten
5 Mathematisches
6 Eigene Klassen schreiben
7 Angewandte Objektorientierung
8 Exceptions
9 Generics, innere Klassen
10 Die Klassenbibliothek
11 Threads und nebenläufige Programmierung
12 Datenstrukturen und Algorithmen
13 Raum und Zeit
14 Dateien und Datenströme
15 Die eXtensible Markup Language (XML)
16 Grafische Oberflächen mit Swing
17 Grafikprogrammierung
18 Netzwerkprogrammierung
19 Verteilte Programmierung mit RMI und Web–Services
20 JavaServer Pages und Servlets
21 Applets
22 Midlets und die Java ME
23 Datenbankmanagement mit JDBC
24 Reflection und Annotationen
25 Logging und Monitoring
26 Sicherheitskonzepte
27 Java Native Interface (JNI)
28 Dienstprogramme für die Java-Umgebung
Stichwort

Download:
- ZIP, ca. 14,1 MB
Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Java ist auch eine Insel (8. Auflage) von Christian Ullenboom
Programmieren mit der Java Standard Edition Version 6
Buch: Java ist auch eine Insel (8. Auflage)

Java ist auch eine Insel (8. Aufl.)
8., aktual. Auflage, geb., mit DVD
1.475 S., 49,90 Euro
Galileo Computing
ISBN 978-3-8362-1371-4
Pfeil 10 Die Klassenbibliothek
Pfeil 10.1 Die Java-Klassenphilosophie
Pfeil 10.1.1 Übersicht über die Pakete der Standardbibliothek
Pfeil 10.2 Object ist die Mutter aller Klassen
Pfeil 10.2.1 Klassenobjekte
Pfeil 10.2.2 Objektidentifikation mit toString()
Pfeil 10.2.3 Objektgleichheit mit equals() und Identität
Pfeil 10.2.4 Klonen eines Objekts mit clone()
Pfeil 10.2.5 Hashcodes über hashCode() liefern
Pfeil 10.2.6 Aufräumen mit finalize()
Pfeil 10.2.7 Synchronisation
Pfeil 10.3 Die Spezial-Oberklasse Enum
Pfeil 10.3.1 Methoden auf Enum-Objekten
Pfeil 10.3.2 enum mit eigenen Konstruktoren und Methoden
Pfeil 10.4 Klassenlader (Class Loader)
Pfeil 10.4.1 Woher die kleinen Klassen kommen
Pfeil 10.4.2 Setzen des Klassenpfades
Pfeil 10.4.3 Die wichtigsten drei Typen von Klassenladern
Pfeil 10.4.4 Der java.lang.ClassLoader
Pfeil 10.4.5 Hot Deployment mit dem URL-Classloader
Pfeil 10.4.6 Das jre/lib/endorsed-Verzeichnis
Pfeil 10.5 Die Utility-Klasse System und Properties
Pfeil 10.5.1 Systemeigenschaften der Java-Umgebung
Pfeil 10.5.2 line.separator
Pfeil 10.5.3 Property von der Konsole aus setzen
Pfeil 10.5.4 Umgebungsvariablen des Betriebssystems
Pfeil 10.5.5 Einfache Zeitmessung und Profiling
Pfeil 10.6 Ausführen externer Programme und Skripte
Pfeil 10.6.1 ProcessBuilder und Prozesskontrolle mit Process
Pfeil 10.6.2 Einen Browser/E-Mail-Client/Editor aufrufen
Pfeil 10.6.3 Ausführen von Skripten
Pfeil 10.7 Benutzereinstellungen
Pfeil 10.7.1 Benutzereinstellungen speichern
Pfeil 10.7.2 Einträge einfügen, auslesen und löschen
Pfeil 10.7.3 Auslesen der Daten und Schreiben in anderem Format
Pfeil 10.7.4 Auf Ereignisse horchen
Pfeil 10.7.5 Zugriff auf die gesamte Windows-Registry
Pfeil 10.8 Musik abspielen
Pfeil 10.8.1 Die Arbeit mit AudioClip
Pfeil 10.8.2 Java Sound API
Pfeil 10.9 Annotationen
Pfeil 10.9.1 Annotationstypen @Override, @Deprecated, @SuppressWarnings
Pfeil 10.9.2 Annotationen für Web-Services
Pfeil 10.10 Zum Weiterlesen


Galileo Computing - Zum Seitenanfang

10.5 Die Utility-Klasse System und Properties Zur nächsten ÜberschriftZur vorigen Überschrift

In der Klasse java.lang.System finden sich Funktionen zum Erfragen und Ändern von Systemvariablen, zum Umlenken der Standard-Datenströme, zum Ermitteln der aktuellen Zeit, zum Beenden der Applikation und noch das ein oder andere. Alle Methoden sind ausschließlich statisch, und ein Exemplar von System lässt sich nicht anlegen. In der Klasse java.lang.Runtime – die Schnittstelle RunTime aus dem CORBA-Paket hat hiermit nichts zu tun – finden sich zusätzlich Hilfsfunktionen wie das Starten von externen Programmen oder Funktionen zum Erfragen des Speicherbedarfs. Anders als System ist hier nur eine Funktion statisch, nämlich die Singleton-Funktion getRuntime(), die das Exemplar von Runtime liefert.


Bemerkung Insgesamt machen die beiden Klassen keinen besonders aufgeräumten Eindruck; sie wirken irgendwie so, als ob hier alles zu finden ist, was an anderen Stellen nicht mehr hinpasste. Auch wären Funktionen einer Klasse genauso gut in der anderen Klasse aufgehoben. Dass die Funktion System.arraycopy() zum Kopieren von Feldern nicht in java.util.Arrays stationiert ist, lässt sich nur historisch erklären. Und System.exit() leitet an Runtime.getRuntime().exit() weiter. Einige Methoden sind veraltet beziehungsweise anders verteilt: Das exec() von Runtime zum Starten von externen Prozessen übernimmt eine neue Klasse ProcessBuilder, und die Frage nach dem Speicherzustand oder der Anzahl der Prozessoren beantworten MBeans wie etwa ManagementFactory.getOperatingSystemMXBean().getAvailableProcessors().



Galileo Computing - Zum Seitenanfang

10.5.1 Systemeigenschaften der Java-Umgebung Zur nächsten ÜberschriftZur vorigen Überschrift

Die Java-Umgebung verwaltet Systemeigenschaften wie Pfadtrenner oder die Version der virtuellen Maschine in einem java.util.Properties-Objekt. Die statische Funktion System.getProperties() erfragt diese Systemeigenschaften und liefert das gefüllte Properties-Objekt zurück. Zum Erfragen einzelner Eigenschaften ist das Properties-Objekt aber nicht unbedingt nötig: System.getProperty() erfragt direkt eine Eigenschaft.


Beispiel Gib den Namen des Betriebssystems aus:

System.out.println( System.getProperty("os.name") );

Gib alle Systemeigenschaften auf dem Bildschirm aus:

System.getProperties().list( System.out );

Eine Liste der wichtigen Standard-Systemeigenschaften:


Schlüssel Bedeutung

java.version

Version der Java-Laufzeitumgebung

java.class.path

Klassenpfad

java.library.path

Pfad für native Bibliotheken

java.io.tmpdir

Pfad für temporäre Dateien

os.name

Name des Betriebssystems

file.separator

Trenner der Pfadsegmente, etwa / (Unix) oder \ (Windows)

path.separator

Trenner bei Pfadangaben, etwa : (Unix) oder ; (Windows)

line.separator

Zeilenumbruchzeichen(folge)

user.name

Name des angemeldeten Benutzers

user.home

Home-Verzeichnis des Benutzers

user.dir

Aktuelles Verzeichnis vom Benutzer


Ein paar weitere Schlüssel zählt die API-Dokumentation bei System.getProperties() auf. Einige der Variablen sind auch anderes zugänglich, etwa über die Klasse File.


final class java.lang.System

  • static String getProperty( String key )
    Gibt die Belegung einer Systemeigenschaft zurück. Ist der Schlüssel null oder leer, gibt es eine NullPointerException bzw. eine IllegalArgumentException.
  • static String getProperty( String key, String def )
    Gibt die Belegung einer Systemeigenschaft zurück. Ist sie nicht vorhanden, liefert die Funktion die Zeichenkette def, den Default-Wert. Für die Ausnahmen gilt das Gleiche wie bei getProperty(String).
  • static String setProperty( String key, String value )
    Belegt eine Systemeigenschaft neu. Die Rückgabe ist die alte Belegung – oder null, falls es keine alte Belegung gab.
  • static String clearProperty( String key )
    Löscht eine Systemeigenschaft aus der Liste. Die Rückgabe ist die alte Belegung – oder null, falls es keine alte Belegung gab.
  • static Properties getProperties()
    Liefert ein mit den aktuellen Systembelegungen gefülltes Properties-Objekt.

Galileo Computing - Zum Seitenanfang

10.5.2 line.separator Zur nächsten ÜberschriftZur vorigen Überschrift

Um nach dem Ende einer Zeile an den Anfang der nächsten zu gelangen, wird ein Zeilenumbruch (engl. new line) eingefügt. Das Zeichen für den Zeilenumbruch muss kein einzelnes sein, es können auch mehrere Zeichen nötig sein. Zum Leidwesen der Programmierer unterscheidet sich die Anzahl der Zeichen für den Zeilenumbruch auf den bekannten Architekturen:

  • Unix: Line Feed (Zeilenvorschub)
  • Windows: beide Zeichen (Carriage Return und Line Feed)
  • Macintosh: Carriage Return (Wagenrücklauf)

Der Steuercode für Carriage Return (kurz CR) ist 13 (0x0D), der für Line Feed (kurz LF) 10 (0x0A). Java vergibt obendrein eigene Escape-Sequenzen für diese Zeichen: \r für Carriage Return und \n für Line Feed. (Die Sequenz \f für einen Form Feed – Seitenvorschub – spielt bei den Zeilenumbrüchen keine Rolle.)

Bei der Ausgabe mit einem println() oder der Nutzung vom Formatspezifizierer »%n« in format() beziehungsweise printf() haben wir bei Zeilenumbrüchen keinerlei Probleme. So ist es oft gar nicht nötig, das Zeilenumbruchzeichen vom System über die Property line.separator zu erfragen.


Galileo Computing - Zum Seitenanfang

10.5.3 Property von der Konsole aus setzen Zur nächsten ÜberschriftZur vorigen Überschrift

Eigenschaften lassen sich auch beim Programmstart von der Konsole aus setzen. Dies ist praktisch für eine Eigenschaft, die beispielsweise das Verhalten des Programms steuert oder das Programm konfiguriert. In der Kommandozeile werden mit -D der Name der Eigenschaft und ihr Wert angegeben. Viele Entwicklungsumgebungen erlauben es, diese in einem Fenster zu setzen. Die Informationen tauchen nicht bei der Argument-Liste in der main()-Funktion auf, da sie vor dem Namen der Klasse stehen und bereits von der Java-Laufzeitumgebung verarbeitet werden.

Um die Eigenschaften auszulesen, gibt es zwei Möglichkeiten. Eine davon überrascht:

Listing 10.24 SetProperty.java

class SetProperty 
{ 
  static public void main( String[] args ) 
  { 
    boolean debug = false; 
    String prop = System.getProperty( "DEBUG" ); 
 
    // Erste Möglichkeit 
    if ( prop != null ) 
      debug = Boolean.valueOf(prop).booleanValue(); 
 
    if ( debug ) 
        System.out.println( "Wir dürfen debuggen" ); 
 
    // Zweite Möglichkeit 
    System.out.println( Boolean.getBoolean("DEBUG") ); 
 } 
}

Auf der Konsole erfolgt die Ausgabe:

$ java_-DDEBUG=true SetProperty 
Wir dürfen debuggen 
true

Wir bekommen über getProperty() einen String zurück, der den Wert anzeigt. Falls es überhaupt keine Eigenschaft dieses Namens gibt, erhalten wir stattdessen null. So wissen wir auch, ob dieser Wert überhaupt gesetzt wurde.

Für die Wahrheitswerte gibt es die statische Funktion getBoolean() in der Klasse Boolean, die aus den System-Properties eine Eigenschaft mit dem angegebenen Namen heraussucht.

public static boolean getBoolean( String name ) { 
  return toBoolean( System.getProperty(name) ); 
}

Es ist schon erstaunlich, diese Funktion in der Wrapper-Klasse Boolean anzutreffen, weil dies nichts mit den Wrapper-Objekten zu tun hat. Gegenüber einer eigenen, direkten System-Anfrage hat getBoolean() auch den Nachteil, dass wir bei der Rückgabe false nicht unterscheiden können, ob es die Eigenschaft nicht gibt oder ob die Eigenschaft mit dem Wert false belegt ist.


final class java.lang.Boolean 
implements Serializable, Comparable<Boolean>

  • static boolean getBoolean( String propName )
    Liest eine Systemeigenschaft aus.

Galileo Computing - Zum Seitenanfang

10.5.4 Umgebungsvariablen des Betriebssystems Zur nächsten ÜberschriftZur vorigen Überschrift

Fast jedes Betriebssystem nutzt das Konzept der Umgebungsvariablen (engl. environment variables); bekannt ist etwa PATH für den Suchpfad für Applikationen unter Windows und unter Unix. Seit Java 5 ist es möglich, auf diese System-Umgebungsvariablen zuzugreifen. Dazu dient die statische Funktion System.getenv(). Sie liefert eine Menge von <String, String>-Paaren.


Tabelle 10.3 Auswahl einiger unter Windows verfügbarer Umgebungsvariablen

Name der Variablen Beschreibung Beispiel

COMPUTERNAME

Name des Computers

MOE

HOMEDRIVE

Laufwerksbuchstabe des Benutzerverzeichnises

C

HOMEPATH

Pfad des Benutzerverzeichnisses

\Dokumente und Einstellungen\ Christian Ullenboom

OS

Name des Betriebssystems

Windows_NT

PATH

Suchpfad

C:\WINDOWS\system32; C:\WINDOWS

PATHEXT

Dateiendungen, die für ausführbare Programme stehen

.COM;.EXE;.BAT;.CMD;.WSH

SYSTEMDRIVE

Laufwerksbuchstabe des Betriebssystems

C

TEMP und auch TMP

temporäres Verzeichnis

C:\DOKUME~1\CHRIST~1\ LOKALE~1\Temp

USERDOMAIN

Domäne des Benutzers

MOE

USERNAME

Name des Nutzers

Christian Ullenboom

USERPROFILE

Profilverzeichnis

C:\Dokumente und Einstellungen\ Christian Ullenboom

WINDIR

Verzeichnis des Betriebssystems

C:\WINDOWS


Einige der Variablen sind auch über die System-Properties (System.getProperties(), System.getProperty()) erreichbar.

Um auf eine spezielle Umgebungsvariable zuzugreifen, lässt sich getenv(String) nutzen, etwa um den Suchpfad herauszufinden: System.getenv("path");


Beispiel Gib die Umgebungsvariablen des Systems aus. Um die Ausgabe etwas übersichtlicher zu gestalten, ist bei der Aufzählung jedes Komma durch ein Zeilenvorschubzeichen ersetzt worden.

Map<String, String> map = System.getenv(); 
System.out.println( map.toString().replace(',', '\n') );


Galileo Computing - Zum Seitenanfang

10.5.5 Einfache Zeitmessung und Profiling topZur vorigen Überschrift

Neben den komfortablen Klassen zum Verwalten von Datumswerten gibt es mit zwei Funktionen einfache Möglichkeiten, Zeiten für Programmabschnitte zu messen:


final class java.lang.System

  • static long currentTimeMillis()
    Gibt die seit dem 1.1.1970 vergangenen Millisekunden zurück.
  • static long nanoTime()
    Liefert vom genauesten System-Zeitgeber die Zeit. Sie hat keinen Bezugspunkt zu irgend-einem Datum; vom 1.1.1970 sind so viele Nanosekunden vergangen, dass sie gar nicht in den long passen würden.

Wo im Programm überhaupt Taktzyklen verbraten werden, zeigt ein Profiler. An diesen Stellen kann dann mit der Optimierung begonnen werden. Eclipse sieht mit dem TPTP (http://www.eclipse.org/tptp/) eine solche Messumgebung vor.



Ihr Kommentar

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






<< 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

 Tipp
Zum Katalog: Coding for Fun





 Coding for Fun


 Buchempfehlungen
Zum Katalog: Objektorientierte Programmierung





 Objektorientierte
 Programmierung


Zum Katalog: Einstieg in Eclipse 3.4






 Einstieg in
 Eclipse 3.4


Zum Katalog: Java 6 lernen mit Eclipse






 Java 6 lernen
 mit Eclipse


Zum Katalog: NetBeans Platform 6






 NetBeans
 Platform 6


Zum Katalog: Java und XML






 Java und XML


Zum Katalog: Visual C# 2008






 Visual C# 2008


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


Zum Katalog: C++ von A bis Z






 C++ von A bis Z


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2009
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, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de