W3docs

Eingebaute Java-Pakete

Überblick über die meistgenutzten eingebauten Java-Pakete — java.lang, java.util, java.io, java.nio, java.net, java.time.

Das JDK wird mit einer umfangreichen Standardbibliothek ausgeliefert, die in Hunderte von Paketen unterteilt ist. In den ersten Monaten greift man immer wieder auf dieselbe Handvoll zurück: java.lang, java.util, java.io, java.nio, java.net, java.time, java.math. Dieses Kapitel gibt einen Überblick — wofür jedes Paket gedacht ist, welche wichtigsten Klassen es enthält und wann man es statt seiner Nachbarpakete nutzen sollte.

java.lang — das Paket, das man nie importiert

java.lang wird automatisch in jede Quelldatei importiert. Alles darin ist ohne eine einzige import-Zeile unter seinem einfachen Namen verfügbar:

  • Object, Class, String, StringBuilder — die Typen, die jedes Programm verwendet.
  • Mathsqrt, min, max, random, die trigonometrischen Funktionen.
  • Wrapper-TypenInteger, Long, Double, Boolean, Character, Byte, Short.
  • Thread, Runnable, ThreadLocal — die ursprünglichen Concurrency-Primitive.
  • Systemout, err, currentTimeMillis(), getenv, exit.
  • Throwable, Exception, RuntimeException, Error — die gesamte Exception-Hierarchie.
  • Iterable, Comparable, CharSequence, AutoCloseable — Interfaces, auf die die Sprache selbst für for-each, Generics, try-with-resources und Ähnliches angewiesen ist.

Wenn eine Klasse ohne Import verwendet wird, stammt sie fast immer von hier.

java.util — Collections, Hilfsmittel und die alten Datumsklassen

java.util ist das täglich genutzte Paket. Das Collections-Framework allein ist Grund genug, es zu kennen.

  • Collection-Interfaces: Collection, List, Set, Map, Queue, Deque.
  • Konkrete Implementierungen: ArrayList, LinkedList, HashMap, LinkedHashMap, TreeMap, HashSet, TreeSet, ArrayDeque.
  • Hilfsklassen: Arrays (Array-Methoden), Collections (sort, unmodifiableList, ...), Objects (requireNonNull, hash).
  • Optional — für Rückgabetypen, die „möglicherweise keinen Wert haben."
  • Random, Scanner, UUID — häufig verwendete Hilfsmittel, die überall vorkommen.
  • Die alten DatumsklassenDate, Calendar, TimeZone. Diese nicht in neuem Code verwenden; stattdessen java.time nutzen.

java.util hat außerdem wichtige Unterpakete, die man kennen sollte:

  • java.util.concurrentConcurrentHashMap, ExecutorService, Future, CompletableFuture, der moderne Concurrency-Werkzeugkasten.
  • java.util.stream — die Stream API für funktionale Pipelines.
  • java.util.function — funktionale Interfaces: Function, Predicate, Supplier, Consumer, die Familie, die von Streams und Lambdas verwendet wird.

java.io — klassische Streams

Das ursprüngliche I/O-Paket, das überall noch aktiv genutzt wird, obwohl java.nio für neuen Code bevorzugt wird.

  • Byte-Streams: InputStream, OutputStream, FileInputStream, FileOutputStream, BufferedInputStream, ByteArrayInputStream.
  • Zeichen-Streams: Reader, Writer, FileReader, FileWriter, BufferedReader, InputStreamReader, PrintWriter.
  • File — die veraltete Dateisystem-Abstraktion.
  • Serialisierung: Serializable, ObjectInputStream, ObjectOutputStream.

Die Trennung zwischen Byte-Streams (InputStream/OutputStream) und Zeichen-Streams (Reader/Writer) ist bewusst gewählt — Bytes für Binärdaten, Zeichen für Text mit bekannter Kodierung.

java.nio — modernes I/O und Pfade

„NIO" bedeutete ursprünglich „new I/O"; heute ist es einfach das empfohlene I/O-Paket.

  • java.nio.file.Path — der moderne Ersatz für java.io.File.
  • java.nio.file.Files — Einzeilen-Helfer: Files.readString, Files.write, Files.walk, Files.exists.
  • java.nio.file.Paths — älterer Einstiegspunkt; Path.of(...) erledigt dasselbe mit weniger Code.
  • Puffer und Kanäle: ByteBuffer, FileChannel, SocketChannel — Low-Level-Bausteine für hochleistungsfähiges I/O.

Für neuen Code, der eine Datei liest: Files.readString(Path.of(...)) verwenden, nicht BufferedReader mit try-with-resources.

java.net — Netzwerk

URLs, Sockets und HTTP.

  • URL, URI — Parsen und Darstellen von Adressen.
  • Socket, ServerSocket, DatagramSocket — Low-Level-TCP und -UDP.
  • InetAddress — IPs und Hostname-Auflösung.

Java 11 hat java.net.http.HttpClient hinzugefügt, einen modernen, asynchronen HTTP-Client, der in das JDK integriert ist. Für neuen Code, der HTTP-Anfragen stellt, ist das der richtige Ausgangspunkt — keine Drittanbieter-Bibliothek erforderlich.

java.time — Datum und Uhrzeit richtig gemacht

In Java 8 hinzugefügt, um die fehlerhafte Date/Calendar-API zu ersetzen.

  • LocalDate, LocalTime, LocalDateTime — Wanduhr-Werte, ohne Zeitzone.
  • ZonedDateTime, ZoneId — zeitzonenbewusste Zeitpunkte.
  • Instant — ein Punkt auf der globalen Zeitlinie; der Typ zum Speichern in Datenbanken.
  • Duration, Period — Zeitmengen (Sekunden vs. Tage/Monate).
  • DateTimeFormatter — Parsen und Formatieren.

Alle java.time-Typen sind unveränderlich und thread-sicher. Das allein ist Grund genug, jeden Code zu migrieren, der noch java.util.Date verwendet.

java.math — präzise Arithmetik

Wenn double und long nicht ausreichen:

  • BigInteger — ganzzahlige Arithmetik mit beliebiger Genauigkeit; kein Überlauf.
  • BigDecimal — exakte Dezimalarithmetik mit einem expliziten Rundungsmodus; das Richtige für Geldbeträge.

MathContext und RoundingMode runden das Paket ab.

Einige weitere, denen man begegnen wird

  • java.text — ältere Formatierung (NumberFormat, MessageFormat). Größtenteils durch java.time und String.format abgelöst, aber bei lokalisierten Ausgaben noch verbreitet.
  • java.security — Hashing, Signierung; MessageDigest, KeyStore, Signature.
  • javax.crypto — symmetrische und asymmetrische Verschlüsselung.
  • java.sql — JDBC API.
  • javax.xml, org.w3c.dom, org.xml.sax — XML-Verarbeitung.

Die Präfixe javax.* und org.* sind historisch bedingt — javax stand ursprünglich für „extensions", und org.*-Pakete kamen von Standardisierungsgremien. Heute sind sie ganz normale JDK-Pakete wie alle anderen.

Ein ausgearbeitetes Beispiel

Dieses Programm nutzt java.util, java.util.stream, java.time und java.math an einem Ort — ein Schnappschuss davon, wie die Standardbibliothek zusammenwirkt.

java— editable, runs on the server

Die Ausgabe lautet:

4 Jan 2026 -> $33.49
17 Jan 2026 -> $12.00
first sale was 28 days before 1 Feb 2026

Man beachte: Die Summen sind exakt (BigDecimal hat keinen Cent verloren), die Tage sind in Kalenderreihenfolge gruppiert (der TreeMap-Supplier hat sie sortiert), und der Datumsabstand wird ohne eine einzige manuelle Millisekundenberechnung ermittelt. Dasselbe Programm wäre mit den Entsprechungen vor Java 8 — Date/Calendar und double für Geld — doppelt so lang und unübersichtlicher. Das richtige Paket zu wählen ist die halbe Miete.

Was kommt als Nächstes

Du hast nun gesehen, was in der Standardbibliothek steckt. Das letzte Stück der Pakete-Geschichte ist, wie die JVM all diese Klassen — deine eigenen und die des JDK — zur Compile-Zeit und zur Laufzeit tatsächlich findet. Weiter zum Java-Classpath.

Übungen

Übung
Ein neues Java-Projekt muss Preise und Datumsangaben verwalten. Welche Pakete sollte man verwenden?
Ein neues Java-Projekt muss Preise und Datumsangaben verwalten. Welche Pakete sollte man verwenden?
Was this page helpful?