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 Die Funktionsbibliothek
10 Threads und nebenläufige Programmierung
11 Raum und Zeit
12 Datenstrukturen und Algorithmen
13 Dateien und Datenströme
14 Die eXtensible Markup Language (XML)
15 Grafische Oberflächen mit Swing
16 Grafikprogrammierung
17 Netzwerkprogrammierung
18 Verteilte Programmierung mit RMI und Web-Services
19 JavaServer Pages und Servlets
20 Applets
21 Midlets und die Java ME
22 Datenbankmanagement mit JDBC
23 Reflection und Annotationen
24 Logging und Monitoring
25 Sicherheitskonzepte
26 Java Native Interface (JNI)
27 Dienstprogramme für die Java-Umgebung
A Die Begleit-DVD
Stichwort

Download:
- ZIP, ca. 12,5 MB
Buch bestellen
Ihre Meinung?

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

Java ist auch eine Insel
7., aktualisierte Auflage
geb., mit DVD (November 2007)
1.492 S., 49,90 Euro
Galileo Computing
ISBN 978-3-8362-1146-8
Pfeil 9 Die Funktionsbibliothek
Pfeil 9.1 Die Java-Klassenphilosophie
Pfeil 9.1.1 Übersicht über die Pakete der Standardbibliothek
Pfeil 9.2 Object ist die Mutter aller Oberklassen
Pfeil 9.2.1 Klassenobjekte
Pfeil 9.2.2 Objektidentifikation mit toString()
Pfeil 9.2.3 Objektgleichheit mit equals() und Identität
Pfeil 9.2.4 Klonen eines Objekts mit clone()
Pfeil 9.2.5 Hashcodes über hashCode() liefern
Pfeil 9.2.6 Aufräumen mit finalize()
Pfeil 9.2.7 Synchronisation
Pfeil 9.3 Klassenlader (Class Loader)
Pfeil 9.3.1 Woher die kleinen Klassen kommen
Pfeil 9.3.2 Setzen des Klassenpfades
Pfeil 9.3.3 Die wichtigsten drei Typen von Klassenladern
Pfeil 9.3.4 Der java.lang.ClassLoader
Pfeil 9.3.5 Hot Deployment mit dem URL-ClassLoader
Pfeil 9.3.6 Das jre/lib/endorsed-Verzeichnis
Pfeil 9.3.7 getContextClassLoader() vom Thread
Pfeil 9.4 Die Utility-Klasse System und Properties
Pfeil 9.4.1 Systemeigenschaften der Java-Umgebung
Pfeil 9.4.2 line.separator
Pfeil 9.4.3 Browser-Version abfragen
Pfeil 9.4.4 Property von der Konsole aus setzen
Pfeil 9.4.5 Umgebungsvariablen des Betriebssystems
Pfeil 9.4.6 Einfache Zeitmessung und Profiling
Pfeil 9.5 Ausführen externer Programme und Skripte
Pfeil 9.5.1 ProcessBuilder und Prozesskontrolle mit Process
Pfeil 9.5.2 Einen Browser/E-Mail-Client/Editor aufrufen
Pfeil 9.5.3 Ausführen von Skripten
Pfeil 9.6 Benutzereinstellungen
Pfeil 9.6.1 Benutzereinstellungen in Windows-Registry oder XML-Dokumenten
Pfeil 9.6.2 Einträge einfügen, auslesen und löschen
Pfeil 9.6.3 Auslesen der Daten und Schreiben in anderem Format
Pfeil 9.6.4 Auf Ereignisse horchen
Pfeil 9.6.5 Zugriff auf die gesamte Windows-Registry
Pfeil 9.7 Musik abspielen
Pfeil 9.7.1 Die Arbeit mit AudioClip
Pfeil 9.7.2 Java Sound API
Pfeil 9.8 Annotationen
Pfeil 9.8.1 Annotationstypen
Pfeil 9.8.2 Common Annotations
Pfeil 9.8.3 Annotationen für Web-Services
Pfeil 9.8.4 Annotationen für XML-Mapping
Pfeil 9.9 Zum Weiterlesen

Was wir brauchen, sind ein paar verrückte Leute; seht euch an, wohin uns die Normalen gebracht haben. – George Bernard Shaw (1856 – 1950)

9 Die Funktionsbibliothek


Galileo Computing - Zum Seitenanfang

9.1 Die Java-Klassenphilosophie Zur nächsten ÜberschriftZur vorigen Überschrift

Eine Programmiersprache besteht nicht nur aus einer Grammatik, sondern, wie im Fall von Java, auch aus einer Programmierbibliothek. Eine plattformunabhängige Sprache – so wie sich viele C oder C++ vorstellen – ist nicht wirklich plattformunabhängig, wenn auf jedem Rechner andere Funktionen und Programmiermodelle eingesetzt werden. Genau dies ist der Schwachpunkt von C(++). Die Algorithmen, die kaum vom Betriebssystem abhängig sind, lassen sich überall gleich anwenden, doch spätestens bei grafischen Oberflächen ist Schluss. Dieses Problem ergibt sich in Java seltener, weil sich die Entwickler große Mühe gaben, alle wichtigen Funktionen in wohlgeformten Paketen unterzubringen. Diese decken insbesondere die zentralen Bereiche Datenstrukturen, Ein- und Ausgabe, Grafik- und Netzwerkprogrammierung ab.


Galileo Computing - Zum Seitenanfang

9.1.1 Übersicht über die Pakete der Standardbibliothek topZur vorigen Überschrift

Es folgt eine Übersicht über die mehr als 200 Pakete, die Java in der Version 6 deklariert. Sie beschreiben zusammen 3 777 Typen, davon 2 457 Klassen, 972 Schnittstellen, 49 Aufzählungen, 473 Ausnahmeklassen und 32 Errorklassen. Insgesamt gibt es 1 482 Objektvariablen, 4408 statische Variablen/Konstanten, 21 881 Objektmethoden in Klassen und 5 226 aus Schnittstellen, 3 039 Klassenmethoden sowie 4 973 Konstruktoren. (In Java 1.0 verteilten sich 212 Klassen auf 8 Pakete.) Die wichtigen Pakete sind fett hervorgehoben.


Tabelle 9.1 Pakete in Java 6

java.applet

Stellt Klassen für Java-Applets bereit, damit diese auf Webseiten ihr Leben führen können.

java.awt

Das Paket AWT (Abstract Windowing Toolkit) bietet Klassen zur Grafikausgabe und zur Nutzung von grafischen Bedienoberflächen.

java.awt.color

Unterstützung von Farbräumen und Farbmodellen.

java.awt.datatransfer

Informationsaustausch zwischen (Java-)Programmen über die Zwischenablage des Betriebssystems.

java.awt.dnd

Drag&Drop, um unter grafischen Oberflächen Informationen zu übertragen oder zu manipulieren.

java.awt.event

Schnittstellen für die verschiedenen Ereignisse unter grafischen Oberflächen.

java.awt.font

Klassen, damit Zeichensätze genutzt und modifiziert werden können.

java.awt.geom

Paket für die Java 2D-API, um ähnlich wie im Grafikmodell von Postscript beziehungsweise PDF affine Transformationen auf beliebige 2D-Objekte anwenden zu können.

java.awt.im

Klassen für alternative Eingabegeräte.

java.awt.image

Erstellen und Manipulieren von Rastergrafiken.

java.awt.image.renderable

Klassen und Schnittstellen zum allgemeinen Erstellen von Grafiken.

java.awt.print

Bietet Zugriff auf Drucker und kann Druckaufträge erzeugen.

java.beans

JavaBeans definieren wiederverwendbare Komponenten auf der Client-Seite, die beim Programmieren visuell konfiguriert werden können.

java.beans.beancontext

Beans lassen sich in einem Bean-Kontext zusammenbringen.

java.io

Möglichkeiten zur Ein- und Ausgabe. Dateien werden als Objekte repräsentiert. Datenströme erlauben den sequenziellen Zugriff auf die Dateiinhalte.

java.lang

Ein Paket, das automatisch eingebunden ist und unverzichtbare Klassen wie String-, Thread- oder Wrapper-Klassen enthält.

java.lang.annotation

Unterstützung für die in Java 5 hinzugekommenen Annota-tionen.

java.lang.instrument

Klassen können instrumentalisiert werden.

java.lang.management

Überwachung der virtuellen Maschine.

java.lang.ref

Behandelt Referenzen.

java.lang.reflect

Mit Reflection ist es möglich, Klassen und Objekte über sich erzählen zu lassen.

java.math

Beliebig lange Ganzzahlen oder Fließkommazahlen.

java.net

Kommunikation über Netzwerke. Klassen zum Aufbau von Client- und Serversystemen, die sich über TCP beziehungsweise IP mit dem Internet verbinden lassen.

java.nio

Neue IO-Implementierung (daher NIO1 ) für performante Ein- und Ausgabe.

java.nio.channels

Datenkanäle für nicht blockierende Ein- und Ausgabeopera- tionen.

java.nio.charset

Kodierungen für die Übersetzung zwischen Byte und Unicode-Zeichen.

java.rmi

Aufruf von Methoden auf entfernten Rechnern.

java.rmi.activation

Unterstützung für die RMI-Aktivierung, wenn Objekte auf ihren Aufruf warten.

java.rmi.dgc

Der verteilte Garbage Collector DGC (Distributed Garbage Collection).

java.rmi.registry

Zugriff auf den Namensdienst unter RMI, die Registry.

java.rmi.server

Die Serverseite von RMI.

java.security

Klassen und Schnittstellen für Sicherheit.

java.security.acl

Unwichtig, da sie durch Klassen in java.security ersetzt wurden.

java.security.cert

Analysieren und Verwalten von Zertifikaten, Pfaden und Rückruf (Verfall) von Zertifikaten.

java.security.interfaces

Schnittstellen für RSA- und DSA-Schlüssel.

java.security.spec

Parameter der Schlüssel und Algorithmen für die Verschlüsselung.

java.sql

Zugriff auf relationale Datenbanken über SQL.

java.text

Unterstützung für internationalisierte Programme. Behandlung von Text, Formatierung von Datumswerten und Zahlen.

java.util

Datenstrukturen, Raum und Zeit sowie Teile der Internationa-lisierung, Zufallszahlen.

java.util.concurrent

Hilfsklassen für nebenläufiges Programmieren, etwa Thread-Pools.

java.util.concurrent.atomic

Atomare Operationen auf Variablen.

java.util.concurrent.locks

Lock-Objekte.

java.util.jar

Möglichkeiten, um auf das eigene Archiv-Format JAR (Java Archive) zuzugreifen.

java.util.logging

Protokollieren von Daten und Programmabläufen.

java.util.prefs

Benutzer- und Systemeigenschaften werden über Konfigura-tionsdateien verwaltet.

java.util.regex

Unterstützung von regulären Ausdrücken.

java.util.zip

Zugriff auf komprimierte Daten mit GZIP und Archive (ZIP).

javax.accessibility

Schnittstellen zwischen Eingabegeräten und Benutzerkomponenten.

javax.activation

JavaBeans Activation Framework. Findet u. a. MIME-Typen.

javax.activity

Drei Ausnahmen im Fall von CORBA-Fehlern.

javax.annotation

Zentrale Annotationen, etwa für Injizierung oder Lebenszyklus.

javax.annotation.processing

Schnittstellen für Annotation Processors.

javax.crypto

Klassen und Schnittstellen für kryptografische Operationen.

javax.crypto.interfaces

Schnittstellen für Diffie-Hellman-Schlüssel.

javax.crypto.spec

Klassen und Schnittstellen für Schlüssel und Parameter der Verschlüsselungsfunktionen.

javax.imageio

Schnittstellen zum Lesen und Schreiben von Bilddateien in verschiedenen Formaten.

javax.imageio.event

Ereignisse, die während des Ladens und Speicherns bei Grafiken auftauchen.

javax.imageio.metadata

Unterstützung für beschreibende Metadaten in Bilddateien.

javax.imageio.plugins.bmp

Klassen, die das Lesen und Schreiben von BMP-Bilddateien unterstützen.

javax.imageio.plugins.jpeg

Klassen, die das Lesen und Schreiben von JPEG-Bilddateien unterstützen.

javax.imageio.stream

Unterstützt das Einlesen und Schreiben von Bildern durch die Behandlung der unteren Ebenen.

javax.jws

Annotationen für Web-Services.

javax.jws.soap

Nur Annotation und Aufzählungen für SOAP-Binding.

javax.lang.model

Eine Aufzählung für Java-Versionen.

javax.lang.model.element

Repräsentiert Elemente der Java-Sprache (Methode, Annotation, ...).

javax.lang.model.type

Repräsentiert Java-Typen (Fehlertyp, Referenztyp, ...).

javax.lang.model.util

Utility-Klassen für Programmelemente und Typen.

javax.management

Management API (JMX) mit einigen Unterpaketen.

javax.management.loading

Unterstützt dynamisch geladene Klassen.

javax.management.modelmbean

Beschreibung von Model-MBeans.

javax.management.monitor

Zur Beobachtung von MBeans.

javax.management.openmbean

Definition der Open MBean als spezielle MBean.

javax.management.relation

Verbindet MBeans im MBean-Server.

javax.management.remote

Remote-Zugriff auf einen JMX-MBean Server.

javax.management.remote.rmi

Über RMI Remote-Zugriff auf MBean-Server.

javax.management.timer

Timer MBean meldet nach Zeitablauf Ereignisse.

javax.naming

Zugriff auf Namensdienste.

javax.naming.directory

Zugriff auf Verzeichnisdienste, erweitert das javax.naming-Paket.

javax.naming.event

Ereignisse, wenn sich etwas beim Verzeichnisdienst ändert.

javax.naming.ldap

Unterstützung von LDAPv3-Operationen.

javax.net

Klassen mit einer Socket-Fabrik.

javax.net.ssl

SSL-Verschlüsselung.

javax.print

Java Print Service API.

javax.print.attribute

Attribute (wie Anzahl der Seiten, Ausrichtung) beim Java Print Service.

javax.print.attribute.standard

Standard für einige Drucker-Attribute.

javax.print.event

Ereignisse beim Drucken.

javax.rmi

Nutzen von RMI über das CORBA-Protokoll RMI-IIOP.

javax.rmi.CORBA

Unterstützt Portabilität von RMI-IIOP.

javax.rmi.ssl

Mit SSL mehr Sicherheit bei RMI-Verbindungen.

javax.script

Scripting-API zum Einbinden von Skriptsprachen.

javax.security.auth

Framework für Authentifizierung und Autorisierung.

javax.security.auth.callback

Informationen wie Benutzernamen oder Passwort vom Server beziehen.

javax.security.auth.kerberos

Unterstützung von Kerberos zur Authentifizierung in Netz-werken.

javax.security.auth.login

Framework für die Authentifizierungsdienste.

javax.security.auth.x500

Für X.509-Zertifikate, X.500 Principal und X500 PrivateCre-dential.

javax.security.cert

Public-Key-Zertifikate.

javax.security.sasl

Unterstützung für SASL (Simple Authentication and Security Layer).

javax.sound.midi

Ein- und Ausgabe, Synthetisierung von MIDI-Daten.

javax.sound.sampled

Schnittstellen zur Ausgabe und Verarbeitung von Audio-Daten.

javax.sql

Datenquellen auf Serverseite.

javax.sql.rowset

Implementierung von RowSet. Mit Unterpaketen.

javax.swing

Einfache Swing-Komponenten.

javax.swing.border

Grafische Rahmen für die Swing-Komponenten.

javax.swing.colorchooser

Anzeige vom JColorChooser einer Komponente für die Farb-auswahl.

javax.swing.event

Ereignisse der Swing-Komponenten.

javax.swing.filechooser

Dateiauswahldialog unter Swing: JFileChooser.

javax.swing.plaf

Unterstützt auswechselbares Äußeres bei Swing durch abstrakte Klassen.

javax.swing.plaf.basic

Basisimplementierung vom Erscheinungsbild der Swing-Komponenten.

javax.swing.plaf.metal

Plattformunabhängiges Standarderscheinungsbild von Swing-Komponenten.

javax.swing.plaf.multi

Benutzerschnittstellen, die mehrere Erscheinungsbilder kombinieren.

javax.swing.plaf.synth

Swing-Look-and-Feel aus XML-Dateien.

javax.swing.table

Typen rund um die grafische Tabellenkomponente javax.swing.JTable.

javax.swing.text

Unterstützung für Textkomponenten.

javax.swing.text.html

HTMLEditorKit zur Anzeige und Verwaltung eines HTML-Text-editors.

javax.swing.text.html.parser

Einlesen, Visualisieren und Strukturieren von HTML-Dateien.

javax.swing.text.rtf

Editorkomponente für Texte im Rich-Text-Format (RTF).

javax.swing.tree

Zubehör für die grafische Baumansicht javax.swing.JTree.

javax.swing.undo

Undo- oder Redo-Operationen, etwa für einen Texteditor.

javax.tools

Ansprachen von Java-Tool; im Moment nur der Compiler.

javax.transaction

Ausnahmen bei Transaktionen.

javax.transaction.xa

Beziehung zwischen Transactions-Manager und Resource-Manager für Java Transaction API (JTA), besonders für verteilte Transaktionen (Distributed Transaction Processing: The XA Specification).

javax.xml

Konstanten aus der XML-Spezifikation.

javax.xml.bind

JAXB-Typen zum Binden von XML-Strukturen an Objekte.

javax.xml.bind.annotation

Im Wesentlichen JAXB 2.0-Annotationen.

javax.xml.bind.annotation. adapters

Zur Behandlung von beliebigen Java-Klassen, die JAXB auf XML-Strukturen abbildet.

javax.xml.bind.attachment

Attachements von JAXB.

javax.xml.bind.util

Utility-Klassen für JAXB.

javax.xml.crypto

Klassen für XML Signaturen oder Verschlüsselung von XML-Daten.

javax.xml.datatype

Schema-Datentypen für Dauer und gregorianischen Kalender.

javax.xml.namespace

QName für den Namensraum.

javax.xml.parsers

Einlesen von XML-Dokumenten.

javax.xml.soap

Aufbau von SOAP-Nachrichten.

javax.xml.stream

StAX-API für XML Pull-Parser.

javax.xml.transform

Allgemeine Schnittstellen zur Transformation von XML-Dokumenten.

javax.xml.transform.dom

Implementiert Transformationen auf der Basis von XML-Parsern nach dem DOM-Standard.

javax.xml.transform.sax

Implementiert Transformationen auf der Basis von XML-Parsern nach dem SAX2-Standard.

javax.xml.transform.stream

Transformationen auf der Basis von linearisierten XML-Dokumenten.

javax.xml.validation

Validation nach einem Schema.

javax.xml.ws

JAX-WS API.

javax.xml.xpath

XPath API.

org.ietf.jgss

Framework für Sicherheitsdienste wie Authentifizierung, Integrität, Vertraulichkeit.

org.w3c.dom

Klassen für die Baumstruktur eines XML-Dokuments nach DOM-Standard.

org.w3c.dom.events

DOM-Events.

org.w3c.dom.ls

Laden und Speichern von XML-Strukturen.

org.xml.sax

Ereignisse, die beim Einlesen eines XML-Dokuments nach dem SAX-Standard auftreten.

org.xml.sax.ext

Zusätzliche Behandlungsroutinen für SAX2-Ereignisse.

org.xml.sax.helpers

Adapterklassen und Standardimplementierungen.


Daneben deklariert das Paket org.omg eine Reihe von Unterpaketen mit CORBA-Diensten, die für unsere Betrachtung jedoch zu speziell sind. SPI-Pakete (SPI für Service Provider Implementation) definieren Verhalten für Anbieter bestimmter Funktionalitäten und sind ebenfalls nicht genannt.

Standard Extension API

Einige der Java-Pakete beginnen mit javax. Dies sind Erweiterungspakete (eXtensions), die die Kern-Klassen ergänzen. Im Laufe der Zeit sind jedoch viele der früher zusätzlich einzubindenden Pakete in die Standard-Distribution gewandert, sodass heute ein recht großer Anteil mit javax beginnt, aber keine Erweiterungen mehr darstellt, die zusätzlich installiert werden müssen. Sun wollte die Pakete nicht umbenennen, um so eine Migration nicht zu erschweren. Fällt heute im Quellcode ein Paketname mit javax auf, ist es daher nicht mehr so einfach zu entscheiden, ob eine externe Quelle mit eingebunden werden muss, beziehungsweise ab welcher Java-Version das Paket Teil der Distribution ist.

Echte externe Pakete von Sun sind unter anderem:

  • Enterprise/Server API mit den Enterprise JavaBeans, Servlets und JavaServer Faces
  • Java Persistence API (JPA) zum Abbilden von Objekten auf relationale Datenbanken
  • Java Communications API für serielle und parallele Schnittstelle
  • Java Telephony API
  • Sprachein-/ausgabe mit der Java Speech API
  • JavaSpaces für gemeinsamen Speicher unterschiedlicher Laufzeitumgebungen
  • JXTA erlaubt das Aufbauen von P2P-Netzwerken [Das Buch »Java Secrets« von Elliotte Rusty Harold geht den Klassen nach, ist aber schon älter. ]

Hinweis Hinweis Die Laufzeitumgebung von Sun liefert noch über 3000 Klassendateien in den Paketen sun und sunw aus. Diese internen Klassen sind nicht offiziell dokumentiert,1 aber zum Teil sehr leistungsfähig und erlauben selbst direkten Speicherzugriff oder können Objekte ohne Standard-Konstruktor erzeugen:

Listing 9.1 com/tutego/insel/sun/UnsafeInstance.java, Ausschnitt

Field field = Unsafe.class.getDeclaredField( "theUnsafe" ); 
field.setAccessible( true ); 
sun.misc.Unsafe unsafe = (sun.misc.Unsafe) field.get( null ); 
File f = (File) unsafe.allocateInstance( File.class ); 
System.out.println( f.getPath() );                          // null

File hat keinen Standard-Konstruktor, nicht einmal einen privaten. Diese Art der Objekterzeugung kann bei der Deserialisierung (siehe dazu Kapitel 13) hilfreich sein.




Ihr Kommentar

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






<< zurück



Copyright © Galileo Press 2008
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