Dokumentation mit Javadoc 📋

Javadoc ist ein Dokumentationswerkzeug (und -Generator), der schon sehr lange Teil des Java-Ökosystems ist. Es ist der De-Dacto-Standard zur Dokumentation von Java-Quelltext.

Nutzen

Javadoc generiert automatisch eine Software-Dokumentation (in HTML). Das sieht dann zum Beispiel so aus:

Javadoc generated documentation

Außerdem wird Javadoc von so ziemlich allen Java-IDEs (und eben auch von Eclipse) dazu genutzt, schon beim Schreiben von Quelltext nützliche Informationen über die genutzten Klassen, Methoden und deren Funktionalität zu erhalten:

Javadoc based info in Eclipse

Javadoc ist also ein sehr effektives Werkzeug zur Dokumentation von Java-Quelltext!

Funktionsweise

Javadoc nutzt eine spezielle Form von (annotierten) Kommentaren im Quellcode, aus denen dann die Dokumentation - sei es eine volle Doku in HTML oder eine kurze, eingeblendete Info in der IDE - erzeugt wird.

Die Schnittstelle zu Javadoc ist also extrem komfortabel und Zugänglich, weil die Dokumentation einfach teil der Quelltext-Dateien (.java) wird!

Syntax

Ein Javadoc-Kommentar ist einem mehrzeiligen (Block-)Kommentar sehr ähnlich - er wird nur mit einem zusätzlichen Sternchen (Asterisken) eingeleitet:

Block-Kommentar:

/*
 * Ein mehrzeiliger
 * Kommentar!
 */

Javadoc-Kommentar:

/**
 * Ein Javadoc-
 * Kommentar!
 */

Um nun eine effektive Dokumentation zu erhalten, können Javadoc-Kommentare an die Klassen, Felder, Methoden etc. geschrieben werden, auf die sie sich beziehen. Ein Javadoc-Kommentar beginnt mit einem kurzen Freitext und kann dann mehrere Annotationen enthalten, die bestimmte Eigenschaften des dokumentierten Code-Elements beschreiben.

Nehmen wir etwa folgende, sehr primitive Methode:

public int add(int num1, int num2) {
    return num1 + num2;
}

In einer Dokumentation dieser Methode sollte folgendes mindestens beschrieben werden:

Und so (oder so ähnlich) könnte diese Dokumentation aussehen:

/**
 * Adds the passed integer values and returns the result
 * @param num1 First {@code int} value
 * @param num2 Second {@code int} value
 * @return The sum of the addition as an {@code int} value
 */
public int add(int num1, int num2) {
    return num1 + num2;
}

In diesem Beispiel werden die Annotationen @param (für Methodenparameter) und @return (für den Rückgabewert) verwendet.

Natürlich gibt es noch viele weitere Javadoc-Annotationen:

Tag und Parameter Ausgabe Verwendung in seit
@author name Beschreibt den Autor. Klasse, Interface  
@version version Erzeugt einen Versionseintrag. Maximal einmal pro Klasse oder Interface. Klasse, Interface  
@since jdk-version Seit wann die Funktionalität existiert. Klasse, Interface, Instanzvariable, Methode  
@see reference Erzeugt einen Link auf ein anderes Element der Dokumentation. Klasse, Interface, Instanzvariable, Methode  
@serial Beschreibt die serialisierten Daten eines Serializable-Objekts. Klasse  
@serialField Dokumentiert ein Feld eines Serializable-Objekts. Klasse, Methode  
@param name description Parameterbeschreibung einer Methode. Methode  
@return description Beschreibung des Rückgabewerts einer Methode. Methode  
@exception classname description @throws classname description Beschreibung einer Exception, die von dieser Methode geworfen werden kann. Methode  
@deprecated description Beschreibt eine veraltete Methode, die nicht mehr verwendet werden sollte. Sollte ab Java 5.0 immer mit der @Deprecated-Annotation verwendet werden. Methode  
{@inheritDoc} Kopiert die Beschreibung aus der überschriebenen Methode. Überschreibende Methode 1.4.0
{@link reference} Link zu einem anderen Symbol. Klasse, Interface, Instanzvariable, Methode  
{@linkPlain reference} Der Link wird in Standardtext statt in Quelltextzeichensatz angezeigt. Klasse, Interface, Instanzvariable, Methode 1.4.0
{@value} Gibt den Wert eines konstanten Feldes zurück. Statisches Feld 1.4.0
{@docRoot} Gibt den absoluten Pfad zum Hauptverzeichnis wieder. Package, Klassen, Felder, Methoden  
{@code} Formatiert Text buchstabengetreu mit dem Quelltextzeichensatz (entsprechend <code>) und unterdrückt die Interpretierung von beinhalteten HTML oder Javadoc-Tags. Klasse, Interface, Instanzvariable, Methode 5.0
{@literal} Kennzeichnet buchstabengetreuen Text und unterdrückt die Interpretierung von beinhalteten HTML oder Javadoc-Tags. Klasse, Interface, Instanzvariable, Methode 5.0

Quelle: 🔗 Wikipedia

Eclipse IDE Content Assist für Javadoc

Die Eclipse IDE bietet (neben vielen anderen) eine nette Funktion zur automatischen Vervollständigung von Javadoc-Kommentaren: Wenn man etwa die Zeichenkette /** in die Zeile vor eine Methode schreibt und dann mit ENTER die Zeile umbricht, erstellt Eclipse automatisch eine Vorlage für einen Javadoc-Kommentar mit passenden @param und @return Annotationen. Das funktioniert natürlich nicht nur bei Methoden.

Eclipse Content Assist für Javadoc

🔗 Ein vollständige Dokumentation von Javadoc findet ihr hier (extrem lang)

🔗 Eine weitere Anleitung zu Javadoc findet ihr z.B. hier (schon besser)