Inhaltsverzeichnis API Einführung Java Entwicklungs-Kit Erste Programme Java-Grundwissen Erste Objekte Ein/Ausgabe in Java Oft benutzte Java-Werkzeuge Graphische Oberfläche Applets Threads Netzwerk Das TopDraw-Projet

Oft benutzte Java-Werkzeuge

  1. Oft benutzte Java-Werkzeuge
    1. Warum diese Sektion?
    2. Vektoren
    3. StringTokenizer
      1. Beispiel:
    4. Properties
      1. Merke
    5. ResourceBundle
    6. Übungen

Warum diese Sektion?

Dieses Kapitel wird nur einen sehr raschen Überblick über gewisse in der Standard-Bibliothek vorhandenen Klassen geben, die Webreferenzen liegen bei um sich genauer einzulesen. Dieser Überblick ist nur dazu gedacht um ein gewisses Gefühl für die Art von vorhandenen Funktionalitäten zu geben. Allzuoft habe ich festgestellt, daß nach einem Java-Kurs die ex-Schüler fröhlich vor sich hinprogrammieren, ohne sich jemals die Standard-Bibliothek angeschaut zu haben, und dabei sehr oft schon vorhandene Funktionalitäten nach-programmieren, oder unter nicht-Berücksichtigung von vorhandenen Funktionalitäten los-programmieren, und es sich demnach schwer machen diese später einzubauen (siehe Internationalisierung).

Vektoren

Ein übliches Programmkonstrukt sind Vektoren, dies sind Klassen in die alle möglichen Objekte reingesteckt werden und in geordneter Weise wieder ausgelesen werden können. Es gibt (seit jdk1.2) eine ganze Reihe von Kontainerklassen (Collections), welche mit verschiedenen Funktionalitäten erlauben, Objekte zu gruppieren.

Eine der wichtigsten Klassen ist die Klasse java.util.Vector. In der Lösung des Autobahn-Problems wurde schon die Verwendung eines Vector vorgenommen. Um die Anzahl Autos auf der Autobahn darzustellen, wurden die Autos in besagten Vektor gepackt, je nach Situation, können neue Autos reingepackt (addObject) werden, oder Autos wieder entfernt(remove) werden.

Der Vorteil dieser Klasse ist die Tatsache, daß als einzige Vorschrift für die Objekte die in einen Vektor reingesteckt werden können, die Tatsache ist, daß die Mutterklasse java.lang.Object sein muß (was die meisten Basisklassen ausschließt, diese müssen über Hilfsklassen (z.B. Boolean) eingebunden werden). Es braucht keine Energie auf die Verwaltung des Vektors selber aufgebracht werden, da dieser sich automatisch an die gebrauchte Größe anpaßt.

StringTokenizer

Eine weitere oft gebrauchte Funktonalität ist die Aufspaltung einer Zeichenkette in unter-Zeichenketten. Z.B. um Parameter auzuspalten, Konfigurationsdateien getrennt einzulesen, Kommandozeilen auseinander zu brechen etc.

Dafür ist die Klasse java.util.StringTokenizer geeignet.

Beispiel:

Es soll die Datei /etc/passwd eingelesen und verarbeitet werden. Es ist bekannt, daß eine Zeile mehrere Felder enthält (login-name, password, gid, gid, gecos, home-Verzeichnis und Shell). String einZeile = aus-der-datei-gelesen;
StringTokenizer st = new StringTokenizer(einZeile,":");
while (st.hasMoreTokens())
{
println(st.nextToken());
}

Properties

Viele Programme speichern ihre Einstellungen in Dateien ab, indem die Einstellungen als eine Schlüsselname-Wert-Paar, mit '=', getrennte Liste in eine Datei geschrieben wird. Weiterhin können über die Kommandozeile, Parameter bezüglich dieser Einstellungen mitgegeben werden.

Man kann Einstellungen in Dateien, Kommandoline-Switches und bei Laufzeit übergebene Präferenzen einheitlich verarbeiten.

Dafür ist die Klasse java.util.Properties geeignet.

Diese Klasse kann selbständig einen Daten-Fluß (z.B. eine Datei) parsen und die gewünschten Daten als Schlüssel-Wert-Paare extrahieren.

Die Daten werden über den Schlüsselnamen, mit der Methode getProperty(String Schlüssel) aus den Properties rausheholt, invers können neue Daten-Paare mit setProperty(String Schlüssel, String Wert) eingesetzt werden.

Merke

In Properties werden die Werte als Zeichenketten (String) behandelt, sollen anstelle von Zeichenketten auch generisch Objekte behandelt werden, sollte lieber die Klasse java.util.Hashtable benutzt werden, allerdings verliert man dadurch die Fähigkeit direkt Tabellen aus Dateien zu lesen.

ResourceBundle

Werden graphische Applikationen geschrieben, entsteht heutzutage sehr schnell die Notwendigkeit verschiedene Versionen für die verschiedenen Sprachzonen zur Verfügung zu stellen.

Dafür ist die Klasse java.util.ResourceBundle geeignet.

Diese arbeitet ähnlich wie die Properties-Klasse, indem sie aus Dateien Schlüssel-Text Paare extrahiert, mit '=' als Trennungszeichen. Der jeweilige Text kann aus dem Bundle mit der Methode getString("OkKey") extrahiert werden.

Werden im Programm anstelle von statischen Zeichenketten nur noch diese Art Aufrufe mit den geeigneten Schlüsselnamen eingebaut, ist es trivial die entsprechenden Dateien mit den Überetzungen bereitzustellen.

Übungen

  1. Eine Klasse anlegen, welche einen Vektor instanziiert, diesen mit belibigen Zeichenketten füllt, ausdruckt, ein/oder ein paar Zeichenketten entfernt (mindestens einmal aus der Mitte heraus entfernen) und noch einmal ausdruckt.
  2. Eine Klasse anlegen, welche eine Datei im password-Format einliest, jede Zeile per StringTokenizer auseinander-zieht und Name und Nick ausgibt.
  3. Eine Datei einlegen in denen durch '=' getrennte Schlüssel-Wert-Paare liegen. Eine Klasse anlegen, welche diese Datei einliest und in ein Property lädt. Eine Methode anlegen, welche Schlüssel als Parameter annimt und den entsprechenden Wert ausgibt.
  4. Eine Property-Datei mit den Meldungen für die Fahrzeug-Klasse anlegen, Fahrzeug so modifizieren, daß wahlweise die Meldungen in verschiedenen Sprachen ausgegeben werden (Die Sprache über Kommandolinien-Parameter einlesen).

Inhaltsverzeichnis API Einführung Java Entwicklungs-Kit Erste Programme Java-Grundwissen Erste Objekte Ein/Ausgabe in Java Oft benutzte Java-Werkzeuge Graphische Oberfläche Applets Threads Netzwerk Das TopDraw-Projet

Document mit wml erzeugt von Bruno Böttcher unter Benutzung von öffentlichen Dokumenten.