Rheinwerk Computing < openbook >


 
Inhaltsverzeichnis
Materialien zum Buch
Vorwort
1 Java ist auch eine Sprache
2 Imperative Sprachkonzepte
3 Klassen und Objekte
4 Arrays und ihre Anwendungen
5 Der Umgang mit Zeichen und Zeichenketten
6 Eigene Klassen schreiben
7 Objektorientierte Beziehungsfragen
8 Schnittstellen, Aufzählungen, versiegelte Klassen, Records
9 Ausnahmen müssen sein
10 Geschachtelte Typen
11 Besondere Typen der Java SE
12 Generics<T>
13 Lambda-Ausdrücke und funktionale Programmierung
14 Architektur, Design und angewandte Objektorientierung
15 Java Platform Module System
16 Die Klassenbibliothek
17 Einführung in die nebenläufige Programmierung
18 Einführung in Datenstrukturen und Algorithmen
19 Einführung in grafische Oberflächen
20 Einführung in Dateien und Datenströme
21 Einführung ins Datenbankmanagement mit JDBC
22 Bits und Bytes, Mathematisches und Geld
23 Testen mit JUnit
24 Die Werkzeuge des JDK
A Java SE-Module und Paketübersicht
Stichwortverzeichnis


Buch bestellen
Ihre Meinung?



Spacer
<< zurück
Java ist auch eine Insel von Christian Ullenboom

Einführung, Ausbildung, Praxis
Buch: Java ist auch eine Insel


Java ist auch eine Insel

Pfeil 16 Die Klassenbibliothek
Pfeil 16.1 Die Java-Klassenphilosophie
Pfeil 16.1.1 Modul, Paket, Typ
Pfeil 16.1.2 Übersicht über die Pakete der Standardbibliothek
Pfeil 16.2 Einfache Zeitmessung und Profiling *
Pfeil 16.3 Die Klasse Class
Pfeil 16.3.1 An ein Class-Objekt kommen
Pfeil 16.3.2 Eine Class ist ein Type
Pfeil 16.4 Klassenlader
Pfeil 16.4.1 Die Klasse java.lang.ClassLoader
Pfeil 16.5 Die Utility-Klassen System und Properties
Pfeil 16.5.1 Speicher der JVM
Pfeil 16.5.2 Anzahl der CPUs bzw. Kerne
Pfeil 16.5.3 Systemeigenschaften der Java-Umgebung
Pfeil 16.5.4 Eigene Properties von der Konsole aus setzen *
Pfeil 16.5.5 Zeilenumbruchzeichen, line.separator
Pfeil 16.5.6 Umgebungsvariablen des Betriebssystems
Pfeil 16.6 Sprachen der Länder
Pfeil 16.6.1 Sprachen in Regionen über Locale-Objekte
Pfeil 16.7 Wichtige Datum-Klassen im Überblick
Pfeil 16.7.1 Der 1.1.1970
Pfeil 16.7.2 System.currentTimeMillis()
Pfeil 16.7.3 Einfache Zeitumrechnungen durch TimeUnit
Pfeil 16.8 Date-Time-API
Pfeil 16.8.1 Menschenzeit und Maschinenzeit
Pfeil 16.8.2 Die Datumsklasse LocalDate
Pfeil 16.9 Logging mit Java
Pfeil 16.9.1 Logging-APIs
Pfeil 16.9.2 Logging mit java.util.logging
Pfeil 16.10 Maven: Build-Management und Abhängigkeiten auflösen
Pfeil 16.10.1 Beispielprojekt in Eclipse mit Maven
Pfeil 16.10.2 Properties hinzunehmen
Pfeil 16.10.3 Dependency hinzunehmen
Pfeil 16.10.4 Lokales und das Remote-Repository
Pfeil 16.10.5 Lebenszylus, Phasen und Maven-Plugins
Pfeil 16.10.6 Archetypes
Pfeil 16.11 Zum Weiterlesen
 

Zum Seitenanfang

16    Die Klassenbibliothek Zur vorigen ÜberschriftZur nächsten Überschrift

»Was wir brauchen, sind ein paar verrückte Leute;

seht euch an, wohin uns die normalen gebracht haben.«

– George Bernard Shaw (1856–1950)

 

Zum Seitenanfang

16.1    Die Java-Klassenphilosophie Zur vorigen ÜberschriftZur nächsten Ü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 der Ein-/Ausgabe oder grafischen Oberflächen ist Schluss. Die Java-Bibliothek dagegen versucht, von den plattformspezifischen Eigenschaften zu abstrahieren, und die Entwickler haben sich große Mühe gegeben, alle wichtigen Methoden in wohlgeformten objektorientierten Klassen und Paketen unterzubringen. Diese decken insbesondere die zentralen Bereiche Datenstrukturen, Ein- und Ausgabe, Grafik- und Netzwerkprogrammierung ab.

 

Zum Seitenanfang

16.1.1    Modul, Paket, Typ Zur vorigen ÜberschriftZur nächsten Überschrift

An oberster Stelle der Java-Bibliothek stehen Module. Sie wiederum bestehen aus Paketen, die wiederum die Typen enthalten.

Module der Java SE

Die API der Java Platform, Standard Edition (»Java SE«) besteht aus folgenden Modulen, die alle mit dem Präfix java beginnen.

Modul

Beschreibung

java.base

fundamentale Typen der Java SE-Plattform

java.compiler

Java-Sprachmodell, Annotationsverarbeitung, Java-Compiler-API

java.datatransfer

API für den Datentransfer zwischen Applikationen, in der Regel die Zwischenablage

java.desktop

grafische Oberflächen mit AWT und Swing, Accessibility-API, Audio, Drucken und JavaBeans

java.instrument

Instrumentalisierung ist die Veränderung der Java-Programme zur Laufzeit.

java.logging

Logging-API

java.management

Java Management Extensions (JMX)

java.management.rmi

RMI-Connector für den Remote-Zugriff auf die JMX-Beans

java.naming

Java Naming and Directory Interface-(JNDI-)API

java.prefs

Die Preferences-API dient zum Speichern von Benutzereinstellungen.

java.rmi

entfernte Methodenaufrufe; Remote Method Invocation-(RMI-)API

java.scripting

Scripting-API

java.security.jgss

Java-Binding der IETF Generic Security Services-API (GSS-API)

java.security.sasl

Java-Unterstützung für IETF Simple Authentication and Security Layer (SASL)

java.sql

JDBC-API für den Zugriff auf relationale Datenbanken

java.sql.rowset

JDBC RowSet-API

java.xml

XML-Klassen: Java API for XML Processing (JAXP), Streaming API for XML (StAX), Simple API for XML (SAX), W3C Document Object Model-(DOM-)API

java.xml.crypto

API für XML-Kryptografie

Tabelle 16.1     Module der Java SE

Das java.base-Modul ist das wichtigste Modul, und es enthält Kernklassen wie Object und String usw. Es ist das einzige Modul, das selbst keine Abhängigkeit zu anderen Modulen enthält. Jedes andere Modul jedoch bezieht sich mindestens auf java.base. Die Javadoc stellt das schön grafisch dar (siehe Abbildung 16.1).

Das Modul »java.xml« hat eine Abhängigkeit zum »java.base«-Modul.

Abbildung 16.1     Das Modul »java.xml« hat eine Abhängigkeit zum »java.base«-Modul.

Zum Teil gibt es mehr Abhängigkeiten, etwa beim Modul java.desktop, wie Abbildung 16.2 demonstriert:

Abhängigkeiten des Moduls »java.desktop«

Abbildung 16.2     Abhängigkeiten des Moduls »java.desktop«

Das Modul java.se

Ein besonderes Modul ist java.se. Es deklariert selbst keine eigenen Pakete oder Typen, sondern fasst lediglich andere Module zusammen. Der Name für so eine Konstruktion ist Aggregator-Modul. Das java.se-Modul definiert auf diese Weise die API für die Java SE-Plattform (siehe Abbildung 16.3).

Abhängigkeiten des Moduls »java.se«

Abbildung 16.3     Abhängigkeiten des Moduls »java.se«

[»]  Hinweis

Wir werden im Folgenden bei den Java SE-Typen nicht darauf eingehen, aus welchem Modul sie stammen. Es ist nur dann wichtig zu wissen, in welchem Modul sich ein Typ befindet, wenn kleinere Teilmengen der Java SE gebaut werden.

Weitere Module

Zwei weitere Module, die ebenfalls mit java beginnen, aber nicht zum Java SE-Standard zählen, sind java.jnlp (Java Network Launch Protocol) und java.smartcardio (Java-API für die Kommunikation mit Smart Cards nach ISO/IEC 7816-4).

Das JDK ist die Standardimplementierung der Java SE. Es liefert den Entwicklern weitere Pakete und Klassen, etwa mit einem HTTP-Server oder den Java-Werkzeugen wie dem Java‐Compiler und dem Javadoc-Tool. Es gibt mehrere Module, die alle mit dem Präfix jdk beginnen.

[»]  Hinweis

Oracle hat aus Java 11 diverse Teile entfernt, etwa JavaFX oder Java EE-Module. Entwickler binden am besten die Referenzimplementierungen ein, https://stackoverflow.com/questions/48204141/replacements-for-deprecated-jpms-modules-with-java-ee-apis dokumentiert das. JavaFX war nie ein Teil des Java SE-Standards, sondern eine »Beigabe« des Oracle JDK. Die Alternative ist, OpenJFX einzubinden.

 

Zum Seitenanfang

16.1.2    Übersicht über die Pakete der Standardbibliothek Zur vorigen ÜberschriftZur nächsten Überschrift

Die Java 11 Core Java SE API besteht aus folgenden Modulen und Paketen – eine Kurzbeschreibung findet sich im Anhang:

Module

enthaltene Pakete

java.base

java.io, java.lang, java.lang.annotation, java.lang.invoke, java.lang.module, java.lang.ref, java.lang.reflect, java.math, java.net, java.net.spi, java.nio, java.nio.channels, java.nio.channels.spi, java.nio.charset, java.nio.charset.spi, java.nio.file, java.nio.file.attribute, java.nio.file.spi, java.security, java.security.cert, java.security.interfaces, java.security.spec, java.text, java.text.spi, java.time, java.time.chrono, java.time.format, java.time.temporal, java.time.zone, java.util, java.util.concurrent,

java.base

java.util.concurrent.atomic, java.util.concurrent.locks, java.util.function, java.util.jar, java.util.regex, java.util.spi, java.util.stream, java.util.zip, javax.crypto, javax.crypto.interfaces, javax.crypto.spec, javax.net, javax.net.ssl, javax.security.auth, javax.security.auth.callback, javax.security.auth.login, javax.security.auth.spi, javax.security.auth.x500, javax.security.cert

java.compiler

javax.annotation.processing, javax.lang.model, javax.lang.model.element, javax.lang.model.type, javax.lang.model.util, javax.tools

java.datatransfer

java.awt.datatransfer

java.desktop

java.applet, java.awt, java.awt.color, java.awt.desktop, java.awt.dnd, java.awt.event, java.awt.font, java.awt.geom, java.awt.im, java.awt.im.spi, java.awt.image, java.awt.image.renderable, java.awt.print, java.beans, java.beans.beancontext, javax.accessibility, javax.imageio, javax.imageio.event, javax.imageio.metadata, javax.imageio.plugins.bmp, javax.imageio.plugins.jpeg, javax.imageio.plugins.tiff, javax.imageio.spi, javax.imageio.stream, javax.print, javax.print.attribute, javax.print.attribute.standard, javax.print.event, javax.sound.midi, javax.sound.midi.spi, javax.sound.sampled, javax.sound.sampled.spi, javax.swing, javax.swing.border, javax.swing.colorchooser, javax.swing.event, javax.swing.filechooser, javax.swing.plaf, javax.swing.plaf.basic, javax.swing.plaf.metal, javax.swing.plaf.multi, javax.swing.plaf.nimbus, javax.swing.plaf.synth, javax.swing.table, javax.swing.text, javax.swing.text.html, javax.swing.text.html.parser, javax.swing.text.rtf, javax.swing.tree, javax.swing.undo

java.instrument

java.lang.instrument

java.logging

java.util.logging

java.management

java.lang.management, javax.management, javax.management.loading, javax.management.modelmbean, javax.management.monitor, javax.management.openmbean, javax.management.relation, javax.management.remote, javax.management.timer

java.management.rmi

javax.management.remote.rmi

java.naming

javax.naming, javax.naming.directory, javax.naming.event javax.naming.ldapjavax.naming.spi

java.prefs

java.util.prefs

java.rmi

java.rmi, java.rmi.activation, java.rmi.dgc, java.rmi.registry, java.rmi.server, javax.rmi.ssl

java.scripting

javax.script

java.security.jgss

javax.security.auth.kerberos, org.ietf.jgss

java.security.sasl

javax.security.sasl

java.sql

java.sql, javax.sql, javax.transaction.xa

java.sql.rowset

javax.sql.rowset, javax.sql.rowset.serial, javax.sql.rowset.spi

java.xml

javax.xml, javax.xml.catalog, javax.xml.datatype, javax.xml.namespace, javax.xml.parsersjavax.xml.stream, javax.xml.stream.events, javax.xml.stream.util, javax.xml.transform, javax.xml.transform.dom, javax.xml.transform.sax, javax.xml.transform.stax, javax.xml.transform.stream, javax.xml.validation, javax.xml.xpath, org.w3c.dom, org.w3c.dom.bootstrap, org.w3c.dom.events, org.w3c.dom.ls, org.w3c.dom.ranges, org.w3c.dom.views, org.xml.sax, org.xml.sax.ext, org.xml.sax.helpers

java.xml.crypto

javax.xml.crypto, javax.xml.crypto.dom, javax.xml.crypto.dsig, javax.xml.crypto.dsig.dom, javax.xml.crypto.dsig.keyinfo, javax.xml.crypto.dsig.spec

Tabelle 16.2     Übersicht über die Pakete in den Modulen der Java 17 Core Java SE API

Entwickler sollten folgende Pakete von ihren Möglichkeiten her zuordnen können:

Paket

Beschreibung

java.awt

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

java.awt.event

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

java.io

java.nio

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. Enthält unverzichtbare Klassen wie String-, Thread- oder Wrapper-Klassen.

java.net

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

java.text

Unterstützung für internationalisierte Programme. Bietet Klassen zur Behandlung von Text und zur Formatierung von Datumswerten und Zahlen.

java.util

Bietet Typen für Datenstrukturen, Raum und Zeit sowie für Teile der Internationalisierung sowie für Zufallszahlen. Unterpakete kümmern sich um reguläre Ausdrücke und Nebenläufigkeit.

javax.swing

Swing-Komponenten für grafische Oberflächen. Das Paket besitzt diverse Unterpakete.

Tabelle 16.3     Wichtige Pakete in der Java SE

Eine vollständige Übersicht aller Pakete gibt der Anhang, »Java SE-Module und Paketübersicht«. Als Entwickler ist es unumgänglich, für die Details die Java-API-Dokumentation unter https://docs.oracle.com/en/java/javase/17/docs/api/index.html zu studieren.

Offizielle Schnittstelle (java- und javax-Pakete)

Das, was die Java-Dokumentation aufführt, bildet den erlaubten Zugang zur Bibliothek. Die Typen sind im Grunde für die Ewigkeit ausgelegt, sodass Entwickler darauf zählen können, auch noch in 100 Jahren ihre Java-Programme ausführen zu können. Doch wer definiert die API? Im Kern sind es vier Quellen:

  • Oracle-Entwickler setzen neue Pakete und Typen in die API.

  • Der Java Community Process (JCP) beschließt eine neue API. Dann ist es nicht nur Oracle allein, sondern eine Gruppe, die eine neue API erarbeitet und die Schnittstellen definiert.

  • Die Object Management Group (OMG) definiert eine API für CORBA.

  • Das World Wide Web Consortium (W3C) gibt eine API etwa für XML-DOM vor.

Die Merkhilfe ist, dass alles, was mit java oder javax beginnt, eine erlaubte API darstellt und alles andere zu nicht portablen Java-Programmen führen kann. Es gibt außerdem Klassen, die unterstützt werden, aber nicht Teil der offiziellen API sind. Dazu zählen etwa diverse Swing-Klassen für das Aussehen der Oberfläche.

Standard Extension API (javax-Pakete)

Einige der Java-Pakete beginnen mit javax. Dies sind ursprünglich Erweiterungspakete (Extensions), die die Kernklassen ergänzen sollten. Im Laufe der Zeit sind jedoch viele der früher zusätzlich einzubindenden Pakete in die Standarddistribution 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 damals 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 oder ab welcher Java-Version das Paket Teil der Distribution ist. Echte externe Pakete sind unter anderem:

  • die Enterprise/Server API mit den Enterprise JavaBeans, Servlets und JavaServer Faces

  • die Java Persistence API (JPA) zum dauerhaften Abbilden von Objekten auf (in der Regel) relationale Datenbanken

  • die Java Communications API für serielle und parallele Schnittstellen

  • die Java Telephony API

  • die Spracheingabe/-ausgabe mit der Java Speech API

  • JavaSpaces für gemeinsamen Speicher unterschiedlicher Laufzeitumgebungen

  • JXTA zum Aufbau von P2P-Netzwerken

Im Endeffekt haben Entwickler es mit folgenden Bibliotheken zu tun:

  1. mit der offiziellen Java-API

  2. mit der API aus JSR-Erweiterungen, wie der Java-Enterprise-API

  3. mit nichtoffiziellen Bibliotheken, wie quelloffenen Lösungen, etwa zum Zugriff auf PDF-Dateien oder Bankautomaten

 


Ihre Meinung?

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de

<< zurück
 Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Java ist auch eine Insel Java ist auch eine Insel

Jetzt Buch bestellen


 Buchempfehlungen
Zum Rheinwerk-Shop: Captain CiaoCiao erobert Java

Captain CiaoCiao erobert Java




Zum Rheinwerk-Shop: Algorithmen in Java

Algorithmen in Java




Zum Rheinwerk-Shop: Spring Boot 3 und Spring Framework 6

Spring Boot 3 und Spring Framework 6




Zum Rheinwerk-Shop: Java SE 9 Standard-Bibliothek

Java SE 9 Standard-Bibliothek




 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und in die Schweiz

InfoInfo



 

 


Copyright © Rheinwerk Verlag GmbH 2024

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.

 

[Rheinwerk Computing]



Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de



Cookie-Einstellungen ändern