Kommentare in Java
Ein Kommentar ist ein Teil des Quelltextes eines Programms, der für das Verhalten eines Programms keine Bedeutung hat. Er wird also von der Implementation praktisch ignoriert.
Kommentare erlauben es, Programme durch Erläuterungen verständlicher zu machen oder wichtige Notizen oder Hinweise an Bearbeiter an den passenden Stellen in einem Programm festzuhalten.
In Java -Programme können Kommentare eingefügt werden.
Kommentare können (außerhalb eines Kommentars und eines Zeichenfolgenliterals) an jeder Stelle, an der auch Leerraum stehen dürfte, mit dem Zeichenpaar »/*« eingeleitet werden, sie enden mit dem ersten folgenden Zeichenpaar »*/«. Solche Kommentare können auch mehrere Zeilen umfassen.
Das Zeichen »/« wird „Schrägstrich“ genannt.
Das Zeichen »*« wird „Stern“ (oder „Sternchen“) genannt.
Das Zeichenpaar »/*« muß zur Einleitung eines Kommentars genau so geschrieben werden (es darf kein Leerraum eingefügt werden), genauso muß das Zeichenpaar »*/« zum Abschluß eines Kommentars genau so geschrieben werden (es darf kein Leerraum eingefügt werden).
Innerhalb eines Kommentars hat das Zeichenpaar »/*« keine besondere Bedeutung.
Der in einem Kommentar enthaltene Text wird von einer Java -Implementation im allgemeinen ignoriert – ein Kommentar gilt effektiv als ein Leerraum. Daher können Kommentare verwendet werden, um irgendwelche Notizen in ein Programm zu schreiben oder auch um lexikalische Einheiten zu trennen.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( - -19/* Brot kaufen! Lehmann anrufen! */ ); }}java.lang.System.out
19
Kommentare dürfen auch über mehrere Zeilen gehen.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( - -28 /*
Brot kaufen!
Lehmann anrufen!
*/ ); }}java.lang.System.out
28
Zeilenendkommentare
Durch das Zeichenpaar »//« wird Text bis zum Ende der Zeile als Kommentar gekennzeichnet. Solche Kommentare nennt JLS7 “end-of-line comment ”, man kann sie also als Zeilenendkommentare bezeichnen. (Zwischen die beiden Schrägstriche darf hier kein Leerraum eingefügt werden.)
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
(
-34 // Vorzeichenwechsel
); }}java.lang.System.out
-34
Innerhalb eines Zeilenendkommentars haben die Zeichenpaare »/*«, »*/« und »//« keine besondere Bedeutung.
Im Vergleich zu Zeilenendkommentaren wird ein mit dem Zeichenpaar »/*« eingeleiteter Kommentar in der JLS7 als “traditional comment ” bezeichnet, man kann ihn also als traditionellen Kommentar bezeichnen.
Verschachtelte Kommentare ⃗
Da ein Kommentar mit dem ersten Zeichenpaar »*/« endet, kann man Kommentare nicht „verschachteln“. Im folgenden Beispiel endet der Kommentar also bereits mit »def */«.
- Ein Kommentar mit einem ihm folgenden Text » ghi */«
/* abc /* def */ ghi */
Kommentare als Leerraum ⃗
Kommentare werden am Anfang der Verarbeitung eines Programms praktisch durch ein Leerzeichen ersetzt. Daher können sie auch zum Trennen lexikalischer Einheiten verwendet werden.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( -/* Vorzeichenwechsel */-33 ); }}java.lang.System.out
33
Entfernte man den Kommentar in dem obigen korrekten Programm, so erhielte man das folgende fehlerhafte Programm.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( --33 ); }}
Kommentare werden vor der weiteren Verarbeitung eines Quelltextes bei der Übersetzung aber praktisch durch ein Leerzeichen ersetzt. Aus dem obigen Programm mit einem Kommentar wird also das folgende Programm gemacht.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( - -33 ); }}java.lang.System.out
33
Übungsfragen _
? Kommentare zählen _
Ist das folgende Programm korrekt, und, wenn ja: wie viele Kommentare finden sich darin?
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 78/* alpha /* // /** beta */ ); }}
Robustheit von Kommentaren *
Bei der Darstellung oder Übermittlung von Programmen werden lange Zeilen manchmal neu umbrochen. Dadurch kann es passieren, daß ein Teil eines Zeilenendkommentars plötzlich am Anfang der nächsten Zeile landet und das Programm dann nicht mehr korrekt ist.
Main.txt
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
(
-51 //
Vorzeichenwechsel
); }}
Die Struktur von Zeilenendkommentaren folgt nicht der üblichen Regelung, derzufolge im Quelltext ein Leerzeichen durch ein Zeilenende ersetzt werden kann, ohne daß dies die Bedeutung des Quelltextes verändern. Traditionalle Kommentare sind gegenüber einem unbeabsichtigten Umbruch robuster, weil sie der genannten Regelung entsprechen.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
(
-54 /*
Vorzeichenwechsel */
); }}java.lang.System.out
-54
Kommentare und Leerraum *
In Java sind außerhalb von Zeichenfolgenliteralen Zeilenenden und Leerzeichen gleichberechtigt: Ein Zeilenende kann immer auch durch ein Leerzeichen ersetzt werden, und umgekehrt.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( -51 /* Vorzeichenwechsel */
); }}transcript
-51
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( -51 /* Vorzeichenwechsel */ ); }}transcript
-51
Endzeilenkommentare stellen jedoch Fremdkörper in diesem System dar. Für sie gilt die Ausnahme, daß ein Zeilenende an ihrem Ende nicht durch ein Leerzeichen ersetzt werden darf. Insofern passen sie weniger zum Rest der Sprache als klassische Kommentare.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( -51 // Vorzeichenwechsel
); }}transcript
-51
Main.txt
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( -51 // Vorzeichenwechsel ); }}transcript
( -51 // Vorzeichenwechsel ); }}
^
Main.java:4: error: reached end of file while parsing
Zeichenfolgenliterale *
Die Kommentareinleiter »/*« und »//« leiten innerhalb einem Zeichenfolgenliterals keinen Kommentar ein, sondern gelten dann auch als Teil der Zeichenfolge.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( "ABC/*DEF//GHI" ); }}java.lang.System.out
ABC/*DEF//GHI
Umgekehrt gelten Anführungszeichen in Kommentaren nicht als Beginn eines Zeichenfolgenliterals.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 17/*"*/ ); }}transcript
17
Kommentardiagramm für Kommentare *
Die folgenden Kommentardiagramme beschreiben Kommentare.
Ein Kommentardiagramm ist genauso zu verstehen, wie ein morphologisches Diagramm. Wir nennen es aber nicht „morphologisches Diagramm“, da morphologische Diagramme lexikalische Einheiten beschreiben und ein Kommentar keine lexikalische Einheit ist. Kommentardiagramme werden in diesem Kurs mit »|/|« gekennzeichnet.
- Kommentardiagramm
Kommentar
.-. .-. .-------------.
|/|--->( / )--->.--->( / )----.------------------------.--->| Zeilenende |--->.---->|/|
'-' | '-' ^ | '-------------' ^
| | .---------------. | |
| | | jedes Zeichen | | |
| '---| ausser einem |<---' |
| | Zeilenende | |
| '---------------' |
| |
| .---------------. |
| | jedes Zeichen | |
| .---| ausser "*" |<--------. |
| | | und "/" | | |
| | '---------------' | |
| .-. v | |
'--->( * )--->'---------------------------->' |
'-' | ^ ^ |
| | | |
v | | |
.<-----------. | |
| | | |
v .-. | | |
'--->( / )---' .------------. |
| '-' | | |
| | | |
| v .-. | .-. |
'--------------->'--->( * )---'---( / )----------'
'-' '-'
„Auskommentieren“ von Quelltext *
Auch Quelltext kann in einem Kommentar enthalten sein. Der Quelltext wird dann vom Compiler ignoriert. Man nennt ihn auskommentiert.
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( - -19 ); }}/*
// fruehere Programmversion vom 4. Dezember 2033 (hier auskommentiert):
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( - -20 ); }}*/
- Was der Compiler davon sieht (etwas vereinfacht gesagt):
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( - -19 ); }}
Jedoch ist es nicht möglich, mit einem /*-Kommentar Programme auszukommentieren, die selber /*-Kommentare enthalten, da /*-Kommentare nicht verschachtelt werden dürfen (weil das erste »*/« den Kommentar immer beendet). Hier muß dann auf //-Kommentare ausgewichen werden:
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( - -19 ); }}// /* fruehere Programmversion vom 4. Dezember 2033 (hier auskommentiert): */
// public final class Main
// { public static void main( final java.lang.String[] args )
// { java.lang.System.out.println
// ( - -20 ); }}- Was der Compiler davon sieht (etwas vereinfacht gesagt):
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( - -19 ); }}