Logo Wissenstransfer Gerhard at CichnaDotCom

>> Wissensdatenbank / Objektorientiertes Programmieren

Externe Pakete und Bibliotheken

Importieren von Paketen

Java bietet die Möglichkeit, externe Pakete zu importieren und deren Funktionalität zu nutzen. Prominentestes Beispiel hierfür ist die in Java mitgelieferte Klassenbibliothek.

Angenommen, man möchte bei der Entwicklung die bisher auf der Konsole getätigen Debug-Ausgaben in Zukunft etwas komfortabler verwalten. Fehlermeldungen sollen hinsichtlich ihrer Schwere klassifiziert und je nach Fortschritt im Entwicklungsprozess unterschiedlich angezeigt werden. Eine solche Funktionalität wird von fremdentwickelten Logging-Bibliotheken wie zum Beispiel log4J 2 übernommen. Log4J 2 ist also ein Paket, welches von der eigenen Software zuerst importiert werden muss, bevor dessen Funktionalität genutzt werden kann. Um die fremde Bibliothek importieren zu können, muss sie erworben bzw. aus dem Internet heruntergeladen werden.

Anschließend muss die Bibliothek dem sogenannten "Classpath" (auch "Build Path" genannt) hinzugefügt werden. Das ist der Ort, in dem der Java-Compiler nach fremden Quellen sucht.

In der Entwicklungsumgebung Eclipse kann man Bibliotheken hinzufügen, indem man die folgenden Schritte durchführt:

  1. Rechter Mausklick auf den Projektnamen im Projekt-Explorer auf der linken Seite.
  2. "Build Path" > "Configure Build Path" auswählen.
  3. Im neuen Fenster im Reiter "Libraries" auf "Add External JARs..." klicken.
  4. In dem sich öffnenden Fenster die Bibliothek auswählen und dann auf "Öffnen" klicken.
  5. Das Fenster mit "OK" schließen.

Nun, da die Bibliotheken dem Compiler bekannt sind, können sie im Quellcode unmittelbar verwendet werden. Am Beispiel der Bibliothek Log4J 2 kann ein Objekt der Klasse "Logger" im Paket org.apache.logging.log4j wie folgt instanziiert werden:
org.apache.logging.log4j.Logger l = org.apache.logging.log4j.LogManager.getRootLogger();

Um nicht in jeder Anweisung den vollen Namen der benötigten Klasse ausschreiben zu müssen, gibt es in der Programmiersprache Java das Schlüsselwort import.
Einsatz von Import

Um den Logger nutzen zu können, muss eine Konfiguration in der Datei log4j2.xml erfolgen, die im gleichen Ordner wie die Klassen liegen. Darin werden die Konfigurationsmerkmale von log4j 2 gesetzt. Ohne diese Datei können nur Fehler, aber keine Informationen ausgegeben werden.

Merke
Im Zusammenhang mit der Verwendung des Zeichens "*" lassen sich mit der import-Anweisung auch ganze Pakete importieren. Das macht insbesondere dann Sinn, wenn viele Klassen eines bestimmten Pakets eingesetzt werden. Die Anweisung
import org.apache.logging.log4j.*;
würde also ausreichen, um dem Compiler beide oben angegebenen Klassen der fremden Bibliothek bekannt zu machen.

Die Java-Klassenbibliothek

Eine der wichtigsten Bibliotheken in Java ist die Standard-Klassenbibliothek. Sie unterstützt den Programmierer mit nützlichen Funktionen für die unterschiedlichsten Problemstellungen. Sie ist bereits in der Java-Laufzeitumgebung integriert und muss daher im Gegensatz zu extern entwickelten Bibliotheken nicht manuell zum Classpath hinzugefügt werden. Trotzdem müssen die vielen darin enthaltenen Klassen mit dem vollständigen Namen angesprochen oder per import-Anweisung dem Compiler bekannt gemacht werden.

Die Java-Klassenbibliothek ist hierarchisch in Pakete gegliedert, die ganz unterschiedlichen Einsatzzwecken zugeordnet sind. Sie decken Funktionen im Bereich der Programmierung grafischer Benutzerschnittstellen (GUI-Programmierung), Netzwerkprogrammierung, Daeisysteme und Datenströme sowie häufig benötigter Datenstrukturen ab.

Überblick über die Pakete der Java-Klassenbibliothek:

java.applet Programmierung HTML-basierter, im Browser ausführbarer Oberflächen
java.awt GUI-Programmierung mit AWT (Abstract Window Toolkit)
java.beans Datencontainer zur Übertragung, Datenobjekte für Persistenzframeworks
java.io Ein-/Ausgabe-Operationen, Datenströme
java.lang Fundamentale Klassen der Programmiersprache (z.B. String).
Sie müssen nicht importiert werden.
java.net Netzwerkfunktionen
java.nio Zugriff auf (virtuelle) Dateisysteme, z.B. über FTP.
java.rmi Entfernter (auf anderer VM) Objektzugriff, Zugriff wie lokaler Zugriff, aber
Ausnahmen abfangen
java.security Zertifikate, Kryptographie
java.sql Datenbankfunktionen
java.util Klassen für Datenstrukturen
java.swing GUI-Programmierung mit Swing

Im Gegensatz zu selbst entwickelten Paketen sind die Funktionen einer externen Bibliothek zunächst unbekannt. Zu diesem Zweck bietet in der Regel jede Bibliothek eine API-Dokumentation an (API = Application Programming Interface). Eine solche Dokumentation erfüllt den Zweck einer Referenz oder eines Nachschlagewerkes, das kurz und knapp Aufschluss gibt über die Paketstruktur, welche Klassen in den einzelnen Paketen verfügbar sind und welche Methoden diese anbieten. Da die Namen der Elemente nicht immer selbsterklärend sind, existiert zu jedem dieser drei Elemente üblicherweise eine kurze Beschreibung über Zweck und Anwendung. Manche Bibliotheken, darunter auch die Java-Klassenbibliothek, stellen darüber hinaus sogar Anleitungen (engl. "Tutorials" oder "Programmer's Guides") mit ausführlichen Bedienhinweisen und Beispielen bereit.

Aufbau der API-Dokumentation der Java-Klassenbibliothek:

API-Dokumentation der Java-Klassenbibliothek

Oben auf der linken Seite werden alle Pakete angezeigt. Darunter ist die Klassen-Übersicht mit allen Klassen und Interfaces der Bibliothek sichtbar. Wählt man oben ein bstimmtes Paket aus, so werden nur die Klassen und Interfaces des ausgewählten Pakets angezeigt. Während der linke Bereich der Navigation dient, ist der rechte Bereich für die Anzeige der Inhalt bstimmt. Wählt man eine Klasse auf der linken Seite aus, so werden im Inhaltsbereich deren öffentlich sichtbaren Attribute und Methoden aufgeführt und erklärt.

Die Klasse "Scanner" aus dem Paket java.util ermöglicht einem Programm das Einlesen von Benutzereingaben auf der Konsole. Die Dokumentation zur Klasse zeigt ein Code-Beispiel, wie das nützliche Werkzeug eingesetzt werden kann. Das Beispiel besteht aus nur zwei Anweisungen: der Deklaration und Instanziierung eines Scanner-Objekts und dem Auslesen einer Benutzereingabe.
API-Dokumentation zur Klasse Scanner

Im Beispiel wird die Methode nextInt() verwendet, die Dokumentation erklärt die Methode: "Scannt das nächste Token (= kleinstes Element aus einer Menge von Eingaben) einer Eingabe als Datentyp int".
Einsatz der Klassenbibliothek