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

java.applet | Stellt Klassen für Java-Applets bereit, damit diese auf Web-seiten 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.

Tabelle 10.1 Pakete in Java 6

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 Annotationen.
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 NIO [NIO steht ja für New IO. Eine Aktualisierung ist NIO2.]) für performante Ein- und Ausgabe.
java.nio.channels | Datenkanäle für nicht blockierende Ein- und Ausgabe- operationen.
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 Internationalisierung, 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 Konfigurationsdateien 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 unter anderem 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 zur Verschlüsselung.
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 Netzwerken.
javax.security.auth.login | Framework für die Authentifizierungsdienste.
javax.security.auth.x500 | Für X.509-Zertifikate, X.500 Principal und X500 PrivateCredential.
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 Farbauswahl.
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 ab-strakte 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-Texteditors.
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 abbilden.
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 zur 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 steht 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 zum Aufbauen von P2P-Netzwerken
Hinweis Die Laufzeitumgebung von Sun liefert noch über 3.000 Klassendateien in den Paketen sun und sunw aus. Diese internen Klassen sind nicht offiziell dokumentiert [Das Buch »Java Secrets« von Elliotte Rusty Harold geht den Klassen nach, ist aber schon älter.], aber zum Teil sehr leistungsfähig und erlauben selbst direkten Speicherzugriff oder können Objekte ohne Standard-Konstruktor erzeugen: Listing 10.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 14, »Dateien und Datenströme«) hilfreich sein.
### Ihr Kommentar Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
<< zurück | <top> | vor >>
Zum Katalog
Java ist auch eine Insel Jetzt bestellen
Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen? Ihre Meinung
Tipp
| Coding for Fun
Buchempfehlungen
| Objektorientierte Programmierung
| Einstieg in Eclipse 3.4
| Java 6 lernen mit Eclipse
| NetBeans Platform 6
| Java und XML
| Visual C# 2008
| IT-Handbuch für Fachinformatiker
| C++ von A bis Z
Shopping
Versandkostenfrei bestellen in Deutschland und Österreich Info

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