Bibliotheken (Java API)

Werbung
7 Bibliotheken
7- 1
Bibliotheken (Java API)
Inhalt
Pakete
Strings
Übungsaufgaben
Pakete
Die vordefinierten Klassen von Java sind in Pakete organisiert. Die Gesamtheit dieser Pakete
bildet die API (Application Programming Interface). Jedes Paket entspricht im Prinzip einem
Directory. Daher sind die Pakete auch hierarchisch angeordnet.
Das Paket, in dem unsere Programme bisher die Klassen ablegten, war das default -Paket. Die
Klassen wurden im aktuellen Directory vom Compiler abgelegt, und dort vom Interpreter
gefunden.
Außerdem lädt jedes Programm das Paket java.lang, das der Compiler an einem
vordefinierten Platz findet. Um diese Details muß sich der Programmierer nicht kümmern, da
das aktuelle Directory und das Directory, wo sich lang befindet, im normalen Klassenpfad
enthalten sind. Dieser Pfad kann übrigens durch Setzen der Environment-Variablen
CLASSPATH geändert werden.
Java kann auch mit komprimierten Paketen umgehen. So sind etwa alle Klassen lang.* in eine
Datei classes.zip gepackt. Eine solche Datei muß ebenfalls im Klassenpfad sein, damit sie
gefunden wird. Man spricht von archivierten Klassen. Insbesondere beim Laden über das
Internet ist eine solche Komprimierung nützlich. Man verwendet allerdings den
Komprimierer jar, der ganz in Java geschrieben ist, und Archive mit der Endung .jar
erzeugt.
Es folgt eine Übersicht über wichtige Pakete, die in Java 1.1 definiert sind.
java.awt
java.beans
java.io
Dies ist das abstract windowing toolkit. Es enthält Klassen zur
Grafikausgabe und zur Erzeugung von graphischen
Benutzeroberflächen (GUI).
Die Beans-Technologie soll fertige Elemente zur
Programmierung, insbesondere von graphischen
Benutzeroberflächen, liefern. Der Zweck ist, visuelle
Programmierung zu ermöglichen.
Klassen zur Ein- und Ausgabe von Dateien, vom Netz oder von
7 Bibliotheken
7- 2
anderen Quellen.
java.lang
java.math
java.net
java.rmi
java.security
java.text
java.util
Dieses Paket wird automatisch geladen. Es enthält wichtige
Dinge, wie die String-Klasse.
Java unterstützt den Umgang mit langen Zahlen in diesem Paket
in Form von großen Dezimalzahlen und großen Ganzzahlen.
Java unterstützt mit diesem Paket die Kommunikation über das
Internet.
Es gibt in diesem Paket eine Klasse, die es erlaubt Methoden
von Klassen an entfernten Rechnern über das Netz oder von
anderen parallel laufenden Programmen aufzurufen.
Da Java von vornherein eine Sicherheitsphilosophie verfolgt,
unterstützt es in diesem Paket Verschlüsselung.
Da Java schon Unicode benutzt, bietet dieses Paket
Schnittstellen für die Entwicklung internationalisierter
Programme.
Enthält einige Datenstrukturen, wie wachsende Arrays oder auch
Stapelspeicher, sowie andere nützliche Dinge.
Man kann auch sein eigenes Programm in Pakete organisieren. Dazu muß man die
Klassendateien in Unterverzeichnisse abspeichern, aber vom Hauptverzeichnis aus
kompilieren. Dies sieht so aus
javac MyPackage/Test.java
wenn Test.java eine Datei im Verzeichnis MyPackage ist. Außerdem muß die Datei
Test.java gleich zu Beginn das Kommando
package MyPackage;
enthalten, also noch vor der ersten Klassendefinition. Drittens müssen alle Dateien, die
Test.java verwenden wollen (außer den Dateien in MyPackage), die Klasse importieren.
import MyPackage.Test;
oder auch
import MyPackage.*;
Diese Anweisung importiert gleich alle Klassen im Paket MyPackage. Die importAnweisungen müssen vor den Klassen-Definitionen stehen, aber nach der packageAnweisung. Insbesondere müssen Klassen aus den vordefinierten Paketen importiert werden
(außer aus java.lang ).
Alternativ kann man die Klasse auch mit vollem Namen ansprechen.
MyPackage.Test t=new MyPackage.Test();
7 Bibliotheken
7- 3
Strings
Strings sind in java.lang definiert. Die String-Klasse hat in Java einen Sonderstatus. Z.B.
wurden für sie eigene Konstanten eingeführt, nämlich "...". Man kann daher schreiben
String s="Dies ist eine String-Konstante";
Außerdem gibt es den speziellen Operator + für Strings. Dieser Operator kann sogar Strings
mit elementaren Datentypen addieren, die dann in Strings umgewandelt werden.
String s="Hallo";
s=s+'!'; // s ist nun "Hallo!"
Hier wurde ein char-Wert an einen String gehängt. Wir haben bei der Ausgabe schon
mehrfach double- oder int-Werte mit Strings verkettet.
In der Tat kann + jedes Objekt verarbeiten, das eine sinnvolle toString() Methode hat.
class Winkel
{
double Alpha;
public Winkel (double alpha)
{
Alpha=alpha;
}
public String toString ()
{
return ""+Alpha;
// einfache Umwandlung von double zu String
}
}
public class Test
{
static public void main (String args[])
{
String s="Wert ";
Winkel a=new Winkel(Math.PI);
s=s+a;
System.out.println(s); // druckt: Wert 3.141592653589793
}
}
Das Beispiel zeigt auch, wie man einen double-Wert zu einem String umwandeln kann. Man
addiert ihn einfach zu "".
Natürlich hat die String-Klasse auch eine Reihe von Methoden. Am besten informiert man
sich darüber in der Java-Dokumentation.
Strings lassen sich nicht nur mit Hilfe von ="..." initialisieren, sondern auch über den Inhalt
eines Arrays von char-Werten oder von byte-Werten. Dies wird über Konstruktoren erreicht.
Dazu ein Beispiel:
public class Test
{
static public void main (String args[])
{
char c[]={'H','a','l','l','o'};
String s=new String(c); // char-Array nach String umwandeln
System.out.println(s);
}
}
Natürlich ist auch der umgekehrte Weg möglich.
public class Test
7 Bibliotheken
{
7- 4
static public void main (String args[])
{
String s="Hallo";
char c[]=s.toCharArray(); // Umwandeln in char-Array
for (int i=0; i<c.length; i++)
System.out.print(c[i]);
System.out.println();
}
}
Hier wird der String Buchstabe für Buchstabe ausgegeben. Der String bietet außerdem
Methoden zum Bilden von Teilstrings und zum Suchen.
Wir haben Strings bisher, außer in Konstanten, schon in dem args-Parameter von main
kennengelernt. Dieser Parameter enthält ein Array von Strings.
Dazu folgendes Beispiel, das ein Wort aus der Kommandozeile entgegennimmt und rückwärts
wieder ausgibt.
public class Test
{
static public void main (String args[])
{
if (args.length==1)
{
char c[]=args[0].toCharArray();
for (int i=c.length-1; i>=0; i--)
System.out.print(c[i]);
System.out.println();
}
}
}
Das Programm funktioniert folgendermaßen:
D:\java\kurs>java Test hallo
ollah
Übungsaufgaben
1. Informieren Sie sich in der Dokumentation über die Klasse BitSet. Schreiben
Sie ein Primzahlsieb für die Primzahlen bis 1000000. Dazu initialisieren Sie
alle Bits mit true und streichen dann die Vielfachen aller Zahlen (Bit auf false
setzen), die bisher noch nicht gestrichen wurden (die Primzahlen). Zählen Sie
die Primzahlen bis 1000000 auf diese Weise.
2. Machen Sie das Sieb aus 1. effektiver, indem Sie nur die nötigen Vielfachen
streichen und nur Bits für ungerade Zahlen setzen.
3. Schreiben Sie ein Unterprogramm, das testet, ob ein String ein Palindrom ist
(das ist ein Wort, das vorwärts wie rückwärts gleich lautet). Nutzen Sie dazu
die Methode charAt() von String.
4. Informieren Sie sich in der Dokumentation über die Klasse StringBuffer, die
einen String darstellt, der dynamisch wachsen kann. Schreiben Sie ein
Programm, das in einem String jedes Vorkommen von Doppelbuchstaben
streicht, indem Sie den String in einen dynamisch wachsenden Stringbuffer
kopieren.
7 Bibliotheken
7- 5
Lösung.
Aufgaben ohne Lösung
1. Nützen Sie die Vector-Klasse, um die ersten 100000 Primzahlen
abzuspeichern.
2. Schreiben Sie Programm, das aus einem String den Teil zwischen den beiden
Klammern ( und ) ausschneidet, bzw. den leeren String "", wenn diese
Klammern im String nicht vorkommen. Falls Sie dabei die Methode
indexOf() von String verwenden, beachten Sie Sonderfälle wie "a)(avc)".
3. Schreiben Sie 2., indem Sie ein char-Array von dem String anlegen.
4. Schreiben Sie ein Unterprogramm, das einen String umkehrt. Benutzen Sie
dazu ein char-Array oder den StringBuffer (aber nicht seine Methode
reverse()!).
Herunterladen