Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
1 Java ist auch eine Sprache
2 Sprachbeschreibung
3 Klassen und Objekte
4 Der Umgang mit Zeichenketten
5 Eigene Klassen schreiben
6 Exceptions
7 Generics<T>
8 Äußere.innere Klassen
9 Besondere Klassen der Java SE
10 Architektur, Design und angewandte Objektorientierung
11 Die Klassenbibliothek
12 Bits und Bytes und Mathematisches
13 Datenstrukturen und Algorithmen
14 Threads und nebenläufige Programmierung
15 Raum und Zeit
16 Dateien, Verzeichnisse und Dateizugriffe
17 Datenströme
18 Die eXtensible Markup Language (XML)
19 Grafische Oberflächen mit Swing
20 Grafikprogrammierung
21 Netzwerkprogrammierung
22 Verteilte Programmierung mit RMI
23 JavaServer Pages und Servlets
24 Datenbankmanagement mit JDBC
25 Reflection und Annotationen
26 Dienstprogramme für die Java-Umgebung
A Die Begleit-DVD
Stichwort
Ihre Meinung?

Spacer
 <<   zurück
Java ist auch eine Insel von Christian Ullenboom
Das umfassende Handbuch
Buch: Java ist auch eine Insel

Java ist auch eine Insel
geb., mit DVD
1482 S., 49,90 Euro
Rheinwerk Computing
ISBN 978-3-8362-1506-0
Pfeil 2 Sprachbeschreibung
  Pfeil 2.1 Elemente der Programmiersprache Java
    Pfeil 2.1.1 Token
    Pfeil 2.1.2 Textkodierung durch Unicode-Zeichen
    Pfeil 2.1.3 Literale
    Pfeil 2.1.4 Bezeichner
    Pfeil 2.1.5 Reservierte Schlüsselwörter
    Pfeil 2.1.6 Zusammenfassung der lexikalischen Analyse
    Pfeil 2.1.7 Kommentare
  Pfeil 2.2 Anweisungen formen Programme
    Pfeil 2.2.1 Was sind Anweisungen?
    Pfeil 2.2.2 Klassendeklaration
    Pfeil 2.2.3 Die Reise beginnt am main()
    Pfeil 2.2.4 Der erste Methodenaufruf: println()
    Pfeil 2.2.5 Atomare Anweisungen und Anweisungssequenzen
    Pfeil 2.2.6 Mehr zu print(), println() und printf() für Bildschirmausgaben
    Pfeil 2.2.7 Die API-Dokumentation
    Pfeil 2.2.8 Ausdrucksanweisung
    Pfeil 2.2.9 Erste Idee der Objektorientierung
    Pfeil 2.2.10 Modifizierer
  Pfeil 2.3 Datentypen, Typisierung, Variablen und Zuweisungen
    Pfeil 2.3.1 Primitive Datentypen im Überblick
    Pfeil 2.3.2 Variablendeklarationen
    Pfeil 2.3.3 Variablendeklaration mit Wertinitialisierung
    Pfeil 2.3.4 Zuweisungsoperator
    Pfeil 2.3.5 Wahrheitswerte
    Pfeil 2.3.6 Ganzzahlige Datentypen und Literale
    Pfeil 2.3.7 Das binäre (Basis 2), oktale (Basis 8), hexadezimale (Basis 16) Stellenwertsystem *
    Pfeil 2.3.8 Die Fließkommazahlen »float« und »double«
    Pfeil 2.3.9 Alphanumerische Zeichen
    Pfeil 2.3.10 Gute Namen, schlechte Namen
  Pfeil 2.4 Blöcke, Initialisierung und Sichtbarkeit
    Pfeil 2.4.1 Gruppieren von Anweisungen mit Blöcken
    Pfeil 2.4.2 Initialisierung von lokalen Variablen
    Pfeil 2.4.3 Sichtbarkeit und Gültigkeitsbereich
  Pfeil 2.5 Ausdrücke, Operanden und Operatoren
    Pfeil 2.5.1 Ausdrücke
    Pfeil 2.5.2 Arithmetische Operatoren
    Pfeil 2.5.3 Unäres Minus und Plus
    Pfeil 2.5.4 Zuweisung mit Operation
    Pfeil 2.5.5 Präfix- oder Postfix-Inkrement und -Dekrement
    Pfeil 2.5.6 Die relationalen Operatoren und die Gleichheitsoperatoren
    Pfeil 2.5.7 Logische Operatoren: Nicht, Und,Oder, Xor
    Pfeil 2.5.8 Der Rang der Operatoren in der Auswertungsreihenfolge
    Pfeil 2.5.9 Die Typanpassung (das Casting)
    Pfeil 2.5.10 Überladenes Plus für Strings
    Pfeil 2.5.11 Operator vermisst *
  Pfeil 2.6 Bedingte Anweisungen oder Fallunterscheidungen
    Pfeil 2.6.1 Die if-Anweisung
    Pfeil 2.6.2 Die Alternative mit einer if-else-Anweisung wählen
    Pfeil 2.6.3 Der Bedingungsoperator
    Pfeil 2.6.4 Die switch-Anweisung bietet die Alternative
  Pfeil 2.7 Schleifen
    Pfeil 2.7.1 Die while-Schleife
    Pfeil 2.7.2 Die do-while-Schleife
    Pfeil 2.7.3 Die for-Schleife
    Pfeil 2.7.4 Schleifenbedingungen und Vergleiche mit ==
    Pfeil 2.7.5 Ausbruch planen mit break und Wiedereinstieg mit »continue«
    Pfeil 2.7.6 »break« und »continue« mit Marken *
  Pfeil 2.8 Methoden einer Klasse
    Pfeil 2.8.1 Bestandteil einer Methode
    Pfeil 2.8.2 Signatur-Beschreibung in der Java-API
    Pfeil 2.8.3 Aufruf einer Methode
    Pfeil 2.8.4 Methoden ohne Parameter deklarieren
    Pfeil 2.8.5 Statische Methoden (Klassenmethoden)
    Pfeil 2.8.6 Parameter, Argument und Wertübergabe
    Pfeil 2.8.7 Methoden vorzeitig mit return beenden
    Pfeil 2.8.8 Nicht erreichbarer Quellcode bei Methoden
    Pfeil 2.8.9 Rückgabewerte
    Pfeil 2.8.10 Methoden überladen
    Pfeil 2.8.11 Vorgegebener Wert für nicht aufgeführte Argumente *
    Pfeil 2.8.12 Finale lokale Variablen
    Pfeil 2.8.13 Rekursive Methoden *
    Pfeil 2.8.14 Die Türme von Hanoi *
  Pfeil 2.9 Zum Weiterlesen

»Wenn ich eine Oper hundertmal dirigiert habe, dann ist es Zeit, sie wieder zu lernen.« – Arturo Toscanini (1867–1957)

2 Sprachbeschreibung

Ein Programm in Java wird nicht umgangssprachlich beschrieben, sondern ein Regelwerk und eine Grammatik definieren die Syntax und die Semantik. In den nächsten Abschnitten werden wir kleinere Beispiele für Java-Programme kennenlernen, und dann ist der Weg frei für größere Programme.


Rheinwerk Computing - Zum Seitenanfang

2.1 Elemente der Programmiersprache Java  Zur nächsten ÜberschriftZur vorigen Überschrift

Wir wollen im Folgenden über das Regelwerk, die Grammatik und die Syntax der Programmiersprache Java sprechen und uns unter anderem über die Unicode-Kodierung, Tokens sowie Bezeichner Gedanken machen. Bei der Benennung einer Methode zum Beispiel dürfen wir aus einer großen Anzahl Zeichen wählen; der Zeichenvorrat nennt sich Lexikalik.

Die Syntax eines Java-Programms definiert die Tokens und bildet so das Vokabular. Richtig geschriebene Programme müssen aber dennoch nicht korrekt sein. Unter dem Begriff »Semantik« fassen wir daher die Bedeutung eines syntaktisch korrekten Programms zusammen. Die Semantik bestimmt, was das Programm macht. Die Abstraktionsreihenfolge ist also Lexikalik, Syntax und Semantik. Der Compiler durchläuft diese Schritte, bevor er den Bytecode erzeugen kann.


Rheinwerk Computing - Zum Seitenanfang

2.1.1 Token  Zur nächsten ÜberschriftZur vorigen Überschrift

Ein Token ist eine lexikalische Einheit, die dem Compiler die Bausteine des Programms liefert. Der Compiler erkennt an der Grammatik einer Sprache, welche Folgen von Zeichen ein Token bilden. Für Bezeichner heißt dies beispielsweise: Nimm die nächsten Zeichen, solange auf einen Buchstaben nur Buchstaben oder Ziffern folgen. Eine Zahl wie 1982 bildet zum Beispiel ein Token durch folgende Regel: Lies so lange Ziffern, bis keine Ziffer mehr folgt. Bei Kommentaren bilden die Kombinationen /* und */ ein Token. [Das ist in C(++) unglücklich, denn so wird ein Ausdruck *s/*t nicht wie erwartet geparst. Erst ein Leerzeichen zwischen dem Geteiltzeichen und dem Stern »hilft« dem Parser, die gewünschte Division zu erkennen. ]

Whitespace

Problematisch wird es in einer Sprache immer dann, wenn der Compiler die Tokens nicht voneinander unterscheiden kann. Daher fügen wir Trennzeichen (engl. whitespace) ein, die auch Wortzwischenräume genannt werden. Zu den Trennern zählen Leerzeichen, Tabulatoren, Zeilenvorschub- und Seitenvorschubzeichen. Außer als Trennzeichen haben diese Zeichen keine Bedeutung. Daher können sie in beliebiger Anzahl zwischen die Tokens gesetzt werden. Das heißt auch, beliebig viele Leerzeichen sind zwischen Tokens gültig. Und da wir damit nicht geizen müssen, können sie einen Programmabschnitt enorm verdeutlichen. Programme sind besser lesbar, wenn sie luftig formatiert sind.

Folgendes ist alles andere als gut zu lesen, obwohl der Compiler es akzeptiert:

class _{static long _
(long __,long  ___) {
return __==0 ?___+ 1:
___==0?_(__-1,1):_(__
–1,_(__, ___-1)) ;  }
static  {int _=2 ,___
= 2;System.out.print(
"a("+_+','+___+ ")="+
_ (_,  ___) ) ;System
.exit(1);}}//(C) Ulli

Neben den Trennern gibt es noch 9 Zeichen, die als Separator definiert werden:

; , . ( ) { } [ ]

Rheinwerk Computing - Zum Seitenanfang

2.1.2 Textkodierung durch Unicode-Zeichen  Zur nächsten ÜberschriftZur vorigen Überschrift

Java kodiert Texte durch Unicode-Zeichen. Jedem Zeichen ist ein eindeutiger Zahlenwert (engl. code point) zugewiesen, sodass zum Beispiel das große A an Position 65 liegt. Der Unicode-Zeichensatz beinhaltet die ISO-US-ASCII-Zeichen [http://en.wikipedia.org/wiki/ASCII ] von 0 bis 127 (hexadezimal 0x00 bis 0x7f, also 7 Bit) und die erweiterte Kodierung nach ISO 8859-1 (Latin-1), die Zeichen von 128 bis 255 hinzunimmt.

In den letzten Jahren hat sich der Unicode-Standard erweitert, und Java ist den Erweiterungen gefolgt. Die Java-Versionen von 1.0 bis 1.4 nutzen den Unicode-Standard 1.1 bis 3.0, der für jedes Zeichen 16 Bit reserviert. So legt Java jedes Zeichen in 2 Byte ab und ermöglicht die Kodierung von mehr als 65.000 Zeichen. Ab Java 5 ist der Unicode 4.0-Standard möglich, der 32 Bit für die Abbildung eines Zeichens nötig macht. Die Entwickler haben allerdings für ein Java-Zeichen nicht die interne Länge angehoben, sondern zwei 16-Bit-Zeichen – ein Surrogate-Paar – bilden in der UTF-16-Kodierung ein Unicode 4.0-Zeichen. Diese Surrogate vergrößern den Bereich der Basic Multilingual Plane (BMP).


Hinweis Obwohl Java intern alle Zeichenfolgen in Unicode kodiert, ist es ungünstig, Klassennamen zu wählen, die Unicode-Zeichen enthalten. Einige Dateisysteme speichern die Namen im alten 8-Bit-ASCII-Zeichensatz ab, sodass Teile des Unicode-Zeichens verloren gehen.


Unicode-Tabellen unter Windows *

Unter Windows legt Microsoft das nützliche Programm charmap.exe für eine Zeichentabelle bei, mit der jede Schriftart auf ihre installierten Zeichen untersucht werden kann. Praktischerweise zeigt die Zeichentabelle auch gleich die Position in der Unicode-Tabelle an.

Unter Erweiterte Ansicht lassen sich mit Gruppieren nach in einem neuen Dialog Unicode-Unterbereiche auswählen, wie etwa Währungszeichen oder unterschiedliche Sprachen. Im Unterbereich Latin finden sich zum Beispiel die Zeichen aus der französischen Schrift (etwa »Ç« mit Cedille unter 00c7) und der spanischen Schrift (»ñ« mit Tilde unter 00F1), und bei Allg. Interpunktionszeichen findet sich das umgedrehte (invertierte) Fragezeichen bei 00BF.

Abbildung 2.1  Zeichentabelle unter Windows XP

Anzeige der Unicode-Zeichen *

Die Darstellung der Zeichen – besonders auf der Konsole – ist auf einigen Plattformen noch ein Problem. Die Unterstützung für die Standardzeichen des ASCII-Alphabets ist dabei weniger ein Problem als die Sonderzeichen, die der Unicode-Standard definiert. Ein Versuch, zum Beispiel den Smiley auf der Standardausgabe auszugeben, scheitert oft an der Fähigkeit des Terminals beziehungsweise der Shell. Hier ist eine spezielle Shell notwendig, die aber bei den meisten Systemen noch in der Entwicklung ist. Und auch bei grafischen Oberflächen ist die Integration noch mangelhaft. Es wird Aufgabe der Betriebssystementwickler bleiben, dies zu ändern. [Mit veränderten Dateiströmen lässt sich dies etwas in den Griff bekommen. So kann man beispielsweise mit einem speziellen OutputStream-Objekt eine Konvertierung für die Windows-NT-Shell vornehmen, sodass auch dort die Sonderzeichen erscheinen. ]


Rheinwerk Computing - Zum Seitenanfang

2.1.3 Literale  Zur nächsten ÜberschriftZur vorigen Überschrift

Ein Literal ist ein konstanter Ausdruck. Es gibt verschiedene Typen von Literalen:

  • die Wahrheitswerte true und false
  • integrale Literale für Zahlen, etwa 122
  • Zeichenliterale, etwa 'X' oder '\n'
  • Fließkommaliterale, etwa 12.567 oder 9.999E-2
  • Stringliterale für Zeichenketten, wie "Paolo Pinkas"
  • null, steht für einen besonderen Referenztyp

Rheinwerk Computing - Zum Seitenanfang

2.1.4 Bezeichner  Zur nächsten ÜberschriftZur vorigen Überschrift

Für Variablen (und damit Konstanten), Methoden, Klassen und Schnittstellen werden Bezeichner vergeben – auch Identifizierer (von engl. identifier) genannt –, die die entsprechenden Bausteine anschließend im Programm identifizieren. Unter Variablen sind dann Daten verfügbar. Methoden sind die Unterprogramme in objektorientierten Programmiersprachen, und Klassen sind die Bausteine objektorientierter Programme.

Ein Bezeichner ist eine Folge von Zeichen, die fast beliebig lang sein kann (die Länge ist nur theoretisch festgelegt). Die Zeichen sind Elemente aus dem Unicode-Zeichensatz, und jedes Zeichen ist für die Identifikation wichtig. [Ob Zeichen Java-Identifier sind, stellen auch die Java-Methoden Character.isJavaIdentifierStart()/isJavaIdentiferPart() fest. ] Das heißt, ein Bezeichner, der 100 Zeichen lang ist, muss auch immer mit allen 100 Zeichen korrekt angegeben werden. Manche C- und FORTRAN-Compiler sind in dieser Hinsicht etwas großzügiger und bewerten nur die ersten Stellen.


Beispiel Im folgenden Java-Programm sind die Bezeichner fett und unterstrichen gesetzt.

class Application
{
  public static void main( String[] args )
  {
    System.out.println( "Hallo Welt" );
  }
}

Dass String fett und unterstrichen ist, hat seinen Grund, denn String ist eine Klasse und kein eingebauter Datentyp wie int. Zwar wird die Klasse String in Java bevorzugt behandelt – das Plus kann Zeichenketten zusammenhängen –, aber es ist immer noch ein Klassentyp.


Aufbau der Bezeichner

Jeder Java-Bezeichner ist eine Folge aus Java-Buchstaben und Java-Ziffern, [Ob ein Zeichen ein Buchstabe ist, stellt die statische Methode Character.isLetter() fest; ob er ein gültiger Bezeichner-Buchstabe ist, sagen die Funktionen isJavaIdentifierStart() für den Startbuchstaben und isJavaIdentifierPart() für den Rest. ] wobei der Bezeichner mit einem Java-Buchstaben beginnen muss. Ein Java-Buchstabe umfasst nicht nur unsere lateinischen Buchstaben aus dem Bereich »A« bis »Z« (auch »a« bis »z«), sondern auch viele weitere Zeichen aus dem Unicode-Alphabet, etwa den Unterstrich, Währungszeichen – wie die Zeichen für Dollar ($), Euro (€), Yen (¥) – oder griechische Buchstaben. Auch wenn damit viele wilde Zeichen als Bezeichner-Buchstaben grundsätzlich möglich sind, sollte doch die Programmierung mit englischen Bezeichnernamen erfolgen. Es ist noch einmal zu betonen, dass Java streng zwischen Groß- und Kleinschreibung unterscheidet.

Die folgende Tabelle listet einige gültige Bezeichner auf:


Tabelle 2.1  Beispiele für gültige Bezeichner in Java

Gültige Bezeichner Grund

mami

mami besteht nur aus Alphazeichen und ist daher korrekt.

__RAPHAEL_IST_LIEB__

Unterstriche sind erlaubt.

bóōlêáñ

Ist korrekt, auch wenn es Akzente enthält.

α

Das griechische Alpha ist ein gültiger Java-Buchstabe.

REZE$$SION

Das Dollar-Zeichen ist ein gültiger Java-Buchstabe.

¥€$

Tatsächlich auch gültige Java-Buchstaben


Ungültige Bezeichner dagegen sind:


Tabelle 2.2  Beispiele für ungültige Bezeichner in Java

Ungültige Bezeichner Grund

2und2macht4

Das erste Symbol muss ein Java-Buchstabe sein und keine Ziffer.

hose gewaschen

Leerzeichen sind in Bezeichnern nicht erlaubt.

Faster!

Das Ausrufezeichen ist, wie viele Sonderzeichen, ungültig.

null, class

Der Name ist schon von Java belegt. Null – Groß-/Kleinschreibung ist relevant – oder cláss wären möglich.



Hinweis In Java-Programmen bilden sich Bezeichnernamen oft aus zusammengesetzten Wörtern einer Beschreibung. Dies bedeutet, dass in einem Satz wie »open file read only« die Leerzeichen entfernt werden und die nach dem ersten Wort folgenden Wörter mit Großbuchstaben beginnen. Damit wird aus dem Beispielsatz anschließend »openFileReadOnly«. Sprachwissenschaftler nennen einen Großbuchstaben inmitten von Wörtern Binnenmajuskel.


Schreibweise für Unicode-Zeichen und Unicode-Escapes

Da ein Java-Compiler alle Eingaben als Unicode verarbeitet, kann er grundsätzlich Quellcode mit deutschen Umlauten, griechischen Symbolen und chinesischen Schriftzeichen verarbeiten. Allerdings ist es gut, zu überlegen, ob ein Programm direkt Unicode-Zeichen enthalten sollte, denn Editoren haben mit Unicode-Zeichen oft ihre Schwierigkeiten – genauso wie Dateisysteme.

Beliebige Unicode-Zeichen lassen sich für den Compiler jedoch über Unicode-Escapes schreiben. Im Quellcode steht dann \uxxxx, wobei x eine hexadezimale Ziffer ist – also 0...9, A...F (beziehungsweise a...f). Diese sechs ASCII-Zeichen, die das Unicode-Zeichen beschreiben, lassen sich in jedem ASCII-Texteditor schreiben, sodass kein Unicode-fähiger Editor nötig ist. Unicode-Zeichen für deutsche Sonderzeichen sind folgende:


Tabelle 2.3  Deutsche Sonderzeichen in Unicode

Zeichen Unicode

Ä, ä

\u00c4, \u00e4

Ö, ö

\u00d6, \u00f6

Ü, ü

\u00dc, \u00fc

ß

\u00df


Der beliebte Smiley, :-), ist als Unicode unter \u263A (WHITE SMILING FACE) beziehungsweise unter \u2639 (WHITE FROWNING FACE) :-( definiert. Das Euro-Zeichen € ist unter \u20ac zu finden.


Beispiel Zeige Pi und in einem Gui-Dialog einen Grinsemann:

System.out.println( "Pi: \u03C0" );                        // Pi: π
javax.swing.JOptionPane.showMessageDialog( null, "\u263A" );

Die Unicode-Escape-Sequenzen sind an beliebiger Stelle erlaubt, wo auch sonst ein Zeichen stehen würde.


Beispiel Deklariere und initialisiere eine Variable π:

double \u03C0 = 3.141592653589793;

Auch lässt sich an Stelle eines Anführungszeichens alternativ \u0027 schreiben, was der Compiler als gleichwertig ansieht. Beim Compiler kommt intern alles als Unicode-Zeichenstrom an, egal ob wir ein Anführungszeichen als \u0027 oder " schreiben. Das Unicode-Zeichen \uffff ist nicht definiert und kann bei Zeichenketten als Ende-Symbol verwendet werden.


Tipp Sofern sich die Sonderzeichen und Umlaute auf der Tastatur befinden, sollten keine Unicode-Kodierungen Verwendung finden. Der Autor von Quelltext sollte seine Leser nicht zwingen, eine Unicode-Tabelle zur Hand zu haben.

Die Alternativdarstellung lohnt sich daher nur, wenn der Programmtext bewusst unleserlich gemacht werden soll. Bezeichner sollten in der Regel aber so wie immer in Englisch geschrieben werden, sodass höchstens Unicode-Escapes bei Zeichenketten vorkommen.



Rheinwerk Computing - Zum Seitenanfang

2.1.5 Reservierte Schlüsselwörter  Zur nächsten ÜberschriftZur vorigen Überschrift

Bestimmte Wörter sind als Bezeichner nicht zulässig, da sie als Schlüsselwörter vom Compiler besonders behandelt werden. Schlüsselwörter bestimmen die »Sprache« eines Compilers. Nachfolgende Zeichenfolgen sind Schlüsselwörter (beziehungsweise Literale im Fall von true, false und null) [Siehe dazu Abschnitt 3.9, »Keywords«, der Sprachdefinition unter http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.9. ] und in Java daher nicht als Bezeichnernamen möglich. Obwohl die mit † gekennzeichneten Wörter zurzeit nicht von Java benutzt werden, können doch keine Variablen dieses Namens deklariert werden.


Tabelle 2.4  Reservierte Schlüsselwörter in Java

abstract

continue

for

new

switch

assert

default

goto

package

synchronized

boolean

do

if

private

this

break

double

implements

protected

throw

byte

else

import

public

throws

case

enum

instanceof

return

transient

catch

extends

int

short

try

char

final

interface

static

void

class

finally

long

strictfp

volatile

const

float

native

super

while



Beispiel Reservierte Schlüsselwörter sind im Folgenden fett und unterstrichen gesetzt.

class Application
{
  public static void main( String[] args )
  {
    System.out.println( "Hallo Welt" );
  }
}


Rheinwerk Computing - Zum Seitenanfang

2.1.6 Zusammenfassung der lexikalischen Analyse  Zur nächsten ÜberschriftZur vorigen Überschrift

Übersetzt der Compiler Java-Programme, so beginnt er mit der lexikalischen Untersuchung des Quellcodes. Wir haben dabei die zentralen Elemente schon kennengelernt, und diese sollen hier noch einmal zusammengefasst werden. Nehmen wir dazu das folgende einfache Programm:

class Application
{
  public static void main( String[] args )
  {
    String text = "Hallo Welt " + 21;
    System.out.println( text );
  }
}

Der Compiler überliest alle Kommentare, und die Trennzeichen bringen den Compiler von Token zu Token. Folgende Tokens lassen sich im Programm ausmachen:


Tabelle 2.5  Token des Beispielprogramms

Token-Typ Beispiel Erklärung

Bezeichner

Application, main, args, text, System, out, println

Namen für Klasse, Variable, Methode, …

Schlüsselwort

class, public, static, void

reservierte Wörter

Literal

"Hallo Welt", 21

konstante Werte, wie Strings, Zahlen, …

Operator

=, +

Operator für Zuweisungen, Berechnungen, …

Trennzeichen

(, ), {, }, ;

Symbole, die neben dem Trennzeichen die Tokens trennen



Rheinwerk Computing - Zum Seitenanfang

2.1.7 Kommentare  topZur vorigen Überschrift

Programmieren heißt nicht nur, einen korrekten Algorithmus in einer Sprache auszudrücken, sondern auch, unsere Gedanken verständlich zu formulieren. Dies geschieht beispielsweise durch eine sinnvolle Namensgebung für Programmobjekte wie Klassen, Methoden und Variablen. Ein selbsterklärender Klassenname hilft den Entwicklern erheblich. Doch die Lösungsidee und der Algorithmus werden auch durch die schönsten Variablennamen nicht zwingend klarer. Damit Außenstehende (und nach Monaten wir selbst) unsere Lösungsidee schnell nachvollziehen und später das Programm erweitern oder abändern können, werden Kommentare in den Quelltext geschrieben. Sie dienen nur den Lesern der Programme, haben aber auf die Abarbeitung keine Auswirkungen.

Unterschiedliche Kommentartypen

In Java gibt es zum Formulieren von Kommentaren drei Möglichkeiten:

  • Zeilenkommentare. Sie beginnen mit zwei Schrägstrichen [In C++ haben die Entwickler übrigens das Zeilenkommentarzeichen // aus der Vor-Vorgängersprache BCPL wieder eingeführt, das in C entfernt wurde. ] // und kommentieren den Rest einer Zeile aus. Der Kommentar gilt von diesen Zeichen an bis zum Ende der Zeile, also bis zum Zeilenumbruchzeichen.
  • Blockkommentare. Sie kommentieren in /* */ Abschnitte aus. Der Text im Blockkommentar darf selbst kein */ enthalten, denn Blockkommentare dürfen nicht verschachtelt sein.
  • JavaDoc-Kommentare. Das sind besondere Blockkommentare, die JavaDoc-Kommentare mit /** */ enthalten. Ein JavaDoc-Kommentar beschreibt etwa die Methode oder die Parameter, aus denen sich später die API-Dokumentation generieren lässt.

Schauen wir uns ein Beispiel an, in dem alle drei Kommentartypen vorkommen:

/*
 * Der Quellcode ist public domain.
 */
/**
 * @author Christian Ullenboom
 */
class DoYouHaveAnyCommentsToMake     // TODO: Umbenennen
{
  /*
   * Die main()-Methode wollen wir nicht.
   * – Steht sowieso nix drin
   * – Was soll schon darein?
   */

  //  public static void main( String[] args )
  //  {
  //  }
}

Für den Compiler sieht die Klasse mit den Kommentaren genauso aus wie ohne, also wie class DoYouHaveAnyCommentsToMake { }. Im Bytecode steht exakt das Gleiche – alle Kommentare werden vom Compiler verworfen.

Kommentare mit Stil

Alle Kommentare und Bemerkungen sollten in Englisch verfasst werden, um Projektmitgliedern aus anderen Ländern das Lesen zu erleichtern. Für allgemeine Kommentare sollten wir die Zeichen // benutzen. Sie haben zwei Vorteile:

  • Bei Editoren, die Kommentare nicht farbig hervorheben – oder bei einer einfachen Quellcodeausgabe auf der Kommandozeile –, lässt sich ersehen, dass eine Zeile, die mit // beginnt, ein Kommentar ist. Den Überblick über einen Quelltext zu behalten, der für mehrere Seiten mit den Kommentarzeichen /* und */ unterbrochen wird, ist schwierig. Zeilenkommentare machen deutlich, wo Kommentare beginnen und wo sie enden.
  • Der Einsatz der Zeilenkommentare eignet sich besser dazu, während der Entwicklungs- und Debug-Phase Codeblöcke auszukommentieren. Benutzen wir zur Programmdokumentation die Blockkommentare, so sind wir eingeschränkt, denn Kommentare dieser Form können wir nicht verschachteln. Zeilenkommentare können einfacher geschachtelt werden.

Eclipse
Die Tastenkombination Strg + 7 – oder Strg + / , was das Kommentarzeichen »/« noch deutlicher macht – kommentiert eine Zeile aus. Eclipse setzt dann vor die Zeile die Kommentarzeichen //. Sind mehrere Zeilen selektiert, kommentiert die Tastenkombination alle markierten Zeilen mit Zeilenkommentaren aus. In einer kommentierten Zeile nimmt ein erneutes Strg + 7 die Kommentare einer Zeile wieder zurück.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
 <<   zurück
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Java ist auch eine Insel






 Java ist auch
 eine Insel


Zum Katalog: Java SE Bibliotheken






 Java SE Bibliotheken


Zum Katalog: Professionell entwickeln mit Java EE 7






 Professionell
 entwickeln mit
 Java EE 7


Zum Katalog: Einstieg in Eclipse






 Einstieg in
 Eclipse


Zum Katalog: Einstieg in Java






 Einstieg in
 Java


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2011
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.


Nutzungsbestimmungen | Datenschutz | Impressum

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