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

Inhaltsverzeichnis
Vorwort
1 Java ist auch eine Sprache
2 Imperative Sprachkonzepte
3 Klassen und Objekte
4 Der Umgang mit Zeichenketten
5 Eigene Klassen schreiben
6 Exceptions
7 Äußere.innere Klassen
8 Besondere Klassen der Java SE
9 Generics<T>
10 Architektur, Design und angewandte Objektorientierung
11 Die Klassenbibliothek
12 Einführung in die nebenläufige Programmierung
13 Einführung in Datenstrukturen und Algorithmen
14 Einführung in grafische Oberflächen
15 Einführung in Dateien und Datenströme
16 Einführung in die <XML>-Verarbeitung mit Java
17 Einführung ins Datenbankmanagement mit JDBC
18 Bits und Bytes und Mathematisches
19 Die Werkzeuge des JDK
A Die Klassenbibliothek
Stichwort

Download:
- openbook, ca. 24,5 MB
- Aufgaben, ca. 1,1 MB
- Programme, ca. 12,8 MB
Buch bestellen
Ihre Meinung?

Spacer
Java ist auch eine Insel von Christian Ullenboom
Das umfassende Handbuch
Buch: Java ist auch eine Insel

Java ist auch eine Insel
Galileo Computing
1308 S., 10., aktualisierte Auflage, geb., mit DVD
ca. 49,90 Euro, ISBN 978-3-8362-1802-3
Pfeil2 Imperative Sprachkonzepte
Pfeil2.1 Elemente der Programmiersprache Java
Pfeil2.1.1 Token
Pfeil2.1.2 Textkodierung durch Unicode-Zeichen
Pfeil2.1.3 Bezeichner
Pfeil2.1.4 Literale
Pfeil2.1.5 Reservierte Schlüsselwörter
Pfeil2.1.6 Zusammenfassung der lexikalischen Analyse
Pfeil2.1.7 Kommentare
Pfeil2.2 Von der Klasse zur Anweisung
Pfeil2.2.1 Was sind Anweisungen?
Pfeil2.2.2 Klassendeklaration
Pfeil2.2.3 Die Reise beginnt am main()
Pfeil2.2.4 Der erste Methodenaufruf: println()
Pfeil2.2.5 Atomare Anweisungen und Anweisungssequenzen
Pfeil2.2.6 Mehr zu print(), println() und printf() für Bildschirmausgaben
Pfeil2.2.7 Die API-Dokumentation
Pfeil2.2.8 Ausdrücke
Pfeil2.2.9 Ausdrucksanweisung
Pfeil2.2.10 Erste Idee der Objektorientierung
Pfeil2.2.11 Modifizierer
Pfeil2.2.12 Gruppieren von Anweisungen mit Blöcken
Pfeil2.3 Datentypen, Typisierung, Variablen und Zuweisungen
Pfeil2.3.1 Primitive Datentypen im Überblick
Pfeil2.3.2 Variablendeklarationen
Pfeil2.3.3 Konsoleneingaben
Pfeil2.3.4 Fließkommazahlen mit den Datentypen float und double
Pfeil2.3.5 Ganzzahlige Datentypen
Pfeil2.3.6 Wahrheitswerte
Pfeil2.3.7 Unterstriche in Zahlen *
Pfeil2.3.8 Alphanumerische Zeichen
Pfeil2.3.9 Gute Namen, schlechte Namen
Pfeil2.3.10 Initialisierung von lokalen Variablen
Pfeil2.4 Ausdrücke, Operanden und Operatoren
Pfeil2.4.1 Zuweisungsoperator
Pfeil2.4.2 Arithmetische Operatoren
Pfeil2.4.3 Unäres Minus und Plus
Pfeil2.4.4 Zuweisung mit Operation
Pfeil2.4.5 Präfix- oder Postfix-Inkrement und -Dekrement
Pfeil2.4.6 Die relationalen Operatoren und die Gleichheitsoperatoren
Pfeil2.4.7 Logische Operatoren: Nicht, Und, Oder, Xor
Pfeil2.4.8 Kurzschluss-Operatoren
Pfeil2.4.9 Der Rang der Operatoren in der Auswertungsreihenfolge
Pfeil2.4.10 Die Typanpassung (das Casting)
Pfeil2.4.11 Überladenes Plus für Strings
Pfeil2.4.12 Operator vermisst *
Pfeil2.5 Bedingte Anweisungen oder Fallunterscheidungen
Pfeil2.5.1 Die if-Anweisung
Pfeil2.5.2 Die Alternative mit einer if-else-Anweisung wählen
Pfeil2.5.3 Der Bedingungsoperator
Pfeil2.5.4 Die switch-Anweisung bietet die Alternative
Pfeil2.6 Schleifen
Pfeil2.6.1 Die while-Schleife
Pfeil2.6.2 Die do-while-Schleife
Pfeil2.6.3 Die for-Schleife
Pfeil2.6.4 Schleifenbedingungen und Vergleiche mit ==
Pfeil2.6.5 Ausbruch planen mit break und Wiedereinstieg mit continue
Pfeil2.6.6 break und continue mit Marken *
Pfeil2.7 Methoden einer Klasse
Pfeil2.7.1 Bestandteil einer Methode
Pfeil2.7.2 Signatur-Beschreibung in der Java-API
Pfeil2.7.3 Aufruf einer Methode
Pfeil2.7.4 Methoden ohne Parameter deklarieren
Pfeil2.7.5 Statische Methoden (Klassenmethoden)
Pfeil2.7.6 Parameter, Argument und Wertübergabe
Pfeil2.7.7 Methoden vorzeitig mit return beenden
Pfeil2.7.8 Nicht erreichbarer Quellcode bei Methoden *
Pfeil2.7.9 Methoden mit Rückgaben
Pfeil2.7.10 Methoden überladen
Pfeil2.7.11 Sichtbarkeit und Gültigkeitsbereich
Pfeil2.7.12 Vorgegebener Wert für nicht aufgeführte Argumente *
Pfeil2.7.13 Finale lokale Variablen
Pfeil2.7.14 Rekursive Methoden *
Pfeil2.7.15 Die Türme von Hanoi *
Pfeil2.8 Zum Weiterlesen

2 Imperative SprachkonzepteZur nächsten Überschrift

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

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.


Galileo Computing - Zum Seitenanfang

2.1 Elemente der Programmiersprache JavaZur 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.


Galileo Computing - Zum Seitenanfang

2.1.1 TokenZur 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.[48](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:

; , . ( ) { } [ ]

Galileo Computing - Zum Seitenanfang

2.1.2 Textkodierung durch Unicode-ZeichenZur 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[49](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. Mehr Details zu Unicode liefert Kapitel 4, »Der Umgang mit Zeichenketten«.


Galileo Computing - Zum Seitenanfang

2.1.3 BezeichnerZur 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.[50](Die Java-Methoden Character.isJavaIdentifierStart()/isJavaIdentiferPart() stellen auch fest, ob Zeichen Java-Identifier sind.) 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,[51](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óo-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.


Galileo Computing - Zum Seitenanfang

2.1.4 LiteraleZur 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.
Beispiel

Im folgenden Java-Programm sind die beiden Literale fett und unterstrichen gesetzt.

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


Galileo Computing - Zum Seitenanfang

2.1.5 Reservierte SchlüsselwörterZur 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.

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" );
}
}

Schlüsselwörter und Literale in Java

Nachfolgende Zeichenfolgen sind Schlüsselwörter (beziehungsweise Literale im Fall von true, false und null)[52](Siehe dazu Abschnitt 3.9, »Keywords«, der Sprachdefinition unter http://java.sun.com/docs/ books/jls/third_edition/html/lexical.html#3.9.) und sind in Java daher nicht als Bezeichnernamen möglich.

Tabelle 2.3: Reservierte Schlüsselwörter in Java

abstract continue for new switch
assert default gotopackage 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
constfloat native super while

Obwohl die mit † gekennzeichneten Wörter zurzeit nicht von Java benutzt werden, können doch keine Variablen dieses Namens deklariert werden.


Galileo Computing - Zum Seitenanfang

2.1.6 Zusammenfassung der lexikalischen AnalyseZur 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.4: 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, ...
Separator (, ), {, }, ; Symbole, die neben dem Trennzeichen die Tokens trennen

Galileo Computing - Zum Seitenanfang

2.1.7 KommentareZur nächsten ÜberschriftZur 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:

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

/*
* Der Quellcode ist public domain.
*/
// Magic. Do not touch.
/**
* @author Christian Ullenboom
*/

class DoYouHaveAnyCommentsToMake // TODO: Umbenennen
{
// When I wrote this, only God and I understood what I was doing
// Now, God only knows
public static void main( String[] args /* Kommandozeilenargument */ )
{
}
}

Für den Compiler sieht die Klasse mit den Kommentaren genauso aus wie ohne, also wie class DoYouHaveAnyCommentsToMake { public static void main( String[] args ) {} }. 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.

Abbildung
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.

Abbildung
Strg + ª + C in kommentiert eine Zeile bzw. einen Block in NetBeans ein und aus.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.







<< zurück
  Zum Katalog
Zum Katalog: Java ist auch eine Insel





Java ist auch eine Insel
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Java 7 – Mehr als eine Insel





 Java 7 –
 Mehr als eine Insel


Zum Katalog: Android 3






 Android 3


Zum Katalog: Android-Apps entwickeln






 Android-Apps
 entwickeln


Zum Katalog: NetBeans Platform 7






 NetBeans
 Platform 7


Zum Katalog: Einstieg in Eclipse 3.7






 Einstieg in
 Eclipse 3.7


Zum Katalog: Einstieg in Java






 Einstieg
 in Java


Zum Katalog: Einstieg in Java 7






 Einstieg in
 Java 7


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 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.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de