Professionell von Beginn an!

Java-Tutorial für Einsteiger – Teil 2: die wichtigsten Sprachmerkmale

Dr. Veikko Krypczyk, Olena Bochkor

(c) Shutterstock / Curioso

Einführungskurse in die Sprache Java gibt es viele – offline in Form von Büchern oder auch online. Hier präsentieren wir Ihnen ein Java-Tutorial für den anspruchsvollen Einsteiger, der daran interessiert ist, Java-Anwendungen jenseits des “Hello-World” zu programmieren. Haben wir uns im ersten Teil mit der Einrichtung der Entwicklungsumgebung und dem Anlegen eines ersten Java-Programmes beschäftigt, geht es in diesem Teil um die wichtigen Sprachmerkmale von Java.

Die Sprache kennenlernen

Die Sprache Java liegt inzwischen in der Version 8 vor und wurde stetig an die aktuellen Herausforderungen angepasst. Neben klassischen Merkmalen wie Rechenoperationen, Schleifen und vielfältigen Datentypen wird nahezu das gesamte Spektrum der objektorientierten Programmierung unterstützt. Auch moderne Ansätze wie Generics oder funktionale Sprachaspekte haben Einzug in Java gehalten. In diesem Teil widmen wir uns den Sprachbasics.

Java-Tutorial für Einsteiger: Professionell von Beginn an!

java tutorialDieses Java-Tutorial führt Sie Schritt für Schritt in die Programmierung mit Java ein. Anhand einer durchgängigen GUI-Beispielanwendung werden die wichtigsten Programmierkonzepte, Sprachkonstrukte und Werkzeuge in einem professionellen Setting vorgestellt.

Java-Tutorial Teil 2: Wichtige Sprachmerkmale

Beginnen wir damit, die wirklich essentiellen Sprachmerkmale von Java vorzustellen. Dabei muss man sich bewusst sein, dass der Umfang der Sprache es nicht erlaubt, auch nur ansatzweise alle Möglichkeiten im Detail zu erörtern. Dies ist glücklicherweise nicht notwendig, denn mit den wesentlichen Merkmalen einer Programmiersprache kommt man schon weit. Diese Basics sind Bestandteil nahezu jeder modernen Programmiersprache. Wichtig ist es, sich mit der Syntax und der Anwendung in Java vertraut zu machen.

Am besten versteht man die Grundlagen, wenn man diese sofort in der Praxis nachvollzieht. Soweit möglich machen wir dieses mit Hilfe unseres Anwendungsbeispiels, das wir schon im ersten Teil des Online-Tutorials angelegt hatten.

Starten wir also die IDE Netbeans und öffnen gleich unser Projekt. Sie erinnern sich hoffentlich: Wir wollen einen Word-Cloud-Generator programmieren. Haben Sie die Schritte des ersten Teils nachvollzogen, so ist das Projekt bereits auf Ihren Rechner. Andererseits können Sie den aktuellen Stand auch direkt aus dem Repository in der Cloud über das Versionskontrollsystem laden. Dazu sind die folgenden Schritte auszuführen:

  1. Andere Projekte Schließen: Schließen Sie offene Projekte in Netbeans über den Menüpunkt.
  2. Verbindung zur Versionsverwaltung: Wählen Sie dann im Menüpunkt „Team“ den Eintrag Git|Clone.
    Abbildung_1

    Abbildung 1: Verbindung zur Versionsverwaltung Git herstellen.

    Danach erscheint ein Dialogfeld, in welches Sie den Pfad zum Repository eintragen können. Geben Sie dort an:
    https://github.com/veikkoEF/WordCloud

    Abbildung_2

    Abbildung 2: Eintragen der Angaben zum Repository.

    Unter User können Sie Ihre Einstellungen zum Account vornehmen. Für ein einfaches Herunterladen des Projektes von GitHub ist das jedoch nicht notwendig, da das Projekt öffentlich ist. Klicken Sie sich durch den Assistenten und machen Sie den Haken bei master.

    Abbildung_3

    Abbildung 3: Auswählen des Branches (hier master).

    Es wird ein lokaler Clone Ihres Projektes angelegt und auf Ihrem Rechner gespeichert.

  3. Projekt öffnen: Danach können Sie das Projekt ganz normal über das Menü Datei aus Ihrem lokalen Verzeichnis öffnen.

Wollen Sie gleich mit einer eignen Idee starten, empfehlen wir auch sofort die Arbeit mit der Versionsverwaltung. Legen Sie auf GitHub ein neues Projekt an und stellen Sie dann über den Eintrag Team aus Netbeans die Verbindung zur Online-Versionsverwaltung her. Die Vorzüge dieser Vorgehensweise haben wir bereits im ersten Teil unseres Tutorials erläutert.

Kommen wir nun zu den essentiellen Sprachmerkmalen.

Angular - Eine Einführung

Angular – eine Einführung

Manfred Steyer

In diesem Videotutorial erklärt Manfred Steyer alles, was man für einen professionellen Umgang mit Angular benötigt und zeigt anhand eines praxisnahen Beispiels, wie man Services und Dependency Injection integriert, Pipes zur Formatierung von Ausgaben nutzt, Komponenten mit Bindings verwendet, Angular-Anwendungen mit Modulen strukturiert und Routing gebraucht.

Kommentare

Kommentare sind Notizen, welche direkt im Quelltext eingefügt und durch den Compiler beim Übersetzungsvorgang ignoriert werden. Sie dienen später dazu, den Programmcode besser zu verstehen. Auch wenn Programmierer sich in fremden Quellcode einarbeiten müssen, sind sie über Kommentare dankbar. Innerhalb des Quelltextes wird ein Kommentar wie folgt geschrieben:

a = b + c; // die beiden Zahlen b und c werden addiert und der Variable c zugewiesen	

Mit dieser Methode ist ein Kommentar auf eine Zeile beschränkt. Soll ein Kommentar über mehrere Zeilen gehen, ist folgende Syntax zu wählen:

/* Beginn des Kommentars
    Zeile 2 des Kommentars
    Zeile 3 des Kommentars
*/ Ende des Kommentars

Wo finden wir Kommentare in unserem Projekt? Bereits eine Menge. Netbeans hat beim Erstellen des Projektes bereits einige Kommentare angelegt, damit der automatisch generierte Quellcode besser verständlich wird.

Öffnen Sie beispielsweise die Datei MainFrame.java und wechseln Sie in die Ansicht Source. Wie der folgende Screenshoot zeigt, gibt es dort eine Reihe von mehrzeiligen Kommentaren.

Abbildung_4

Abbildung 4: Der Assistent von Netbeans erzeugt beim Erstellen eines neuen Projektes einige Kommentare.

Bezeichner und Literale

  • Bezeichner: Bezeichner (engl. Identifier) sind Namen für Variablen, Objekte und Klassen. Dabei sollte man auf Buchstaben (A, B, C, a, b, c), den Unterstrich (_), das Dollarzeichen ($) und die Ziffern (1, 2, 3…) zurückgreifen. Bezeichner können mit all diesen Zeichen – außer einer Ziffer – beginnen. Es empfiehlt sich, aussagekräftige Namen zu verwenden, um sich auch später noch etwas Konkretes darunter vorstellen zu können. Geht es beispielsweise um eine Variable, welche den Preis eines Produktes speichert, verwendet man am besten Bezeichnungen wie PreisProduktA oder Preis. Zu Beginn sollte man sich auch für eine gewisse Syntax der Bezeichnung entscheiden, beispielsweise ob man englische oder deutschen Namen wählt. Den einmal gewählten Weg sollte man dann konsequent durchhalten.
  • Literale: Literale sind konstante Werte, die sich während der Programmausführung nicht ändern, also klassische Konstanten. Bezüglich der Bezeichnungen gelten ebenfalls die oben getroffenen Aussagen.

Sobald unser Programm mit einem Algorithmus für das Darstellen der Wörter ausgestattet ist, werden wir einige Variablen und Konstanten benötigen. Zu beachten ist, dass man nicht alle möglichen Wörter als Bezeichner verwenden kann. Jede Programmiersprache – so auch Java – hat ihre so genannten reservierten Wörter. Die reservierten Wörter sind üblicherweise der Wortschatz einer Programmiersprache, man bezeichnet sie auch als Befehlswörter oder Schlüsselwörter.

Java kennt die folgenden reservieren Wörter:

Abbildung_5

Abbildung 5: Schlüsselwörter aus Java. Diese stehen für eine anderweitige Verwendung nicht zur Verfügung.

Zu beachten ist zusätzlich, dass neben diesen reservierten Wörtern auch die Wortsymbole true, false und null nicht als Variablennamen verwendet werden dürfen. Die Entwicklungsumgebung erkennt automatisch diese Schlüsselwörter (wie auch andere Programmelemente) und hebt diese in einer anderen Schriftfarbe im Editor hervor.

Trennzeichen

Das Ende jeder Anweisung wird in Java durch ein Semikolon angezeigt. Also in der Form:

a = b + c;

Blicken Sie auf die obige Quellcodedatei (Abb. 4)! Sie werden feststellen, dass jede Programmzeile durch ein Semikolon (;) abgeschlossen wird. Zusammengehörige Befehle – zum Beispiel innerhalb einer Schleife – werden in geschweifte Klammern gesetzt:

{

   Anweisung 1;

   Anweisung 2;

   Anweisung 3;

}

Auch das können Sie sehr gut in der obigen Quelltextdatei sehen (Abb. 4). Zusätzlich sehen Sie noch am linken Rand Plus- (+) und Minuszeichen (-). Mit Hilfe dieser Symbole kann man zusammengehörige Quelltextabschnitte, welche üblicherweise durch die geschweiften Klammern eingegrenzt sind, ein und ausklappen. Dieses sorgt bei langen Quelltexten für mehr Übersicht. Die Überschriften bleiben bestehen, die konkrete Implementierung blendet man nur bei Bedarf ein.

Untersuchen Sie den Quelltext und verdeutlichen Sie sich dessen Struktur jetzt und im weiteren Verlauf des Kurses. Keine Angst! Selbst wenn Sie etwas „kaputt“ machen – die aktuelle Version können Sie jederzeit von GitHub laden. Programmieren lernt man auch durch ein intensives Studium von vorhandenem Quellcode und durch Probieren!

Datentypen

Variablen und Literale müssen zu einem bestimmten Datentyp gehören. Wie die meisten Programmiersprachen verfügt auch Java über ein Set von Basisdatentypen (Zahlen- bzw. Texttypen). Die wichtigsten Datentypen haben wir in der folgenden Tabelle zusammengetragen:

Datentyp Erläuterung/ Beispiele
boolean Nur Zwei Werte: true, false
char Einzelne in Hochkommata gestellte Zeichen: ‘c‘ , ‘ü‘

Escape-Sequenzen: ‘\n‘, ‘\\‘

Angabe des Unicodes des Zeichens: ‘\u0011

string Zeichenfolge, die in Anführungszeichen steht: „Dies ist ein String“
int Positive und negative ganze Zahlen: 12, -128

Oktalzahlen beginnen mit einer führenden 0: 012, -077

Hexadezimalzahlen beginnen mit 0x: 0x12, 0xEEFF

Binärzahlen beginnen mit 0b: 0b1011, 0b

long Wie int-Zahlen, aber mit angehängtem l oder L: 12l, -077L, 0xEEFFL
double Zahl mit Dezimalpunkt: 47.11, 0.0, .01

Zahl mit Exponentialschreibweise: 10e-2d, 3e4, 0.3e0.4

Zahl mit Suffix d oder D: 41.11d, 11d, 0D

float Fließkommazahlen, wie int-Zahlen, aber mit angehängtem f oder F: 47.11f, 0.0F, 0.1f, 10e-2F

Tabelle 1: Wichtige Datentypen der Sprache Java [1].

In der Programmierpraxis werden Sie es später mit deutlich komplexeren Datentypen zu tun bekommen, zum Beispiel Arrays (Daten in Tabellenform) oder Listen. Objekte von Klassen werden auch in Form einer Variablen definiert. Mit den Möglichkeiten der objektorientierten Programmierung werden wir uns indes ausführlich im kommenden dritten Teil beschäftigen. Hier geht es zunächst darum, die Basistypen kennenzulernen.

Operatoren und Vergleiche

Gemeint sind hier die mathematischen Operatoren für die Grundrechenarten, ergänzt um die sogenannte Modulo-Operation. Dabei wird der Rest einer Division zweier ganzen Zahlen ermittelt. Die folgende Tabelle zeigt die Syntax dieser Rechenarten.

Operator Bedeutung Beispiel
+ Addition var = 3 + 4;                                                     // var = 7;
Subtraktion var = 3 – 4;                                                     // var = -1;
* Multiplikation var = 3 * 4;                                                     // var = 12;
/ Division int         var = 7 / 4;                    // var = 1;

double   var = 7.0 / 4.0;                              // var = 1.75;

% Modulo (Rest einer Division) var = 7 % 4;                                                    // var = 3;

Tabelle 1: Operationen der Grundrechenarten und der Modulo-Operation [1].

In Java gibt es auch die üblichen Vergleichsoperationen, beispielsweise zwischen zwei Zahlenwerten.

Operator Vergleich Beispiel für i = 2
== Gleichheit if (i == 1)                                                                       // false
!= Ungleichheit if (i != 1)                                                                         / /true
< Kleiner als if (i < 1)                                                                         // false
<= Kleiner gleich if (i <= 1)                                                                       // false
> Größer als if (i > 1)                                                                        // true
>= Größer gleich if (i >= 1)                                                                       // true

Vergleichsoperatoren in Java [1].

Die Beispiele dürften selbsterklärend sein. Zu beachten ist dabei der Operator für die Identität (Gleichheit) der beiden Operatoren. Hier kommt das doppelte Gleichheitszeichen (==) zum Einsatz, da das einfache Gleichheitszeichen (=) als Zuweisungsoperator dient. Schreiben Sie also if (a = 3) wird immer der Wert true zurückgegeben, denn die Zuweisung der Zahl 3 zur Variablen a schlägt nicht fehl. Wollen Sie dagegen prüfen, ob die Variable a den Wert 3 hat, müssen Sie if (a == 3) schreiben.

Kontrollstrukturen

Mit Hilfe von Kontrollstrukturen wird der Weg durch den Code festgelegt. Dieses geschieht mittels Verzweigungen und unterschiedlichen Arten von Schleifen.

Art Typ Erläuterung Syntax
Verzweigungen if-Anweisung

 

Diese entscheidet, ob ein nachfolgender Anweisungsblock ausgeführt werden soll oder nicht. if (Bedingung) {

Anweisungen;

}

if-else-Verzweigung

 

Die if-Verzweigung kontrolliert nicht nur die Ausführung einer einzelnen Anweisung bzw. eines Anweisungsblocks; man kann auch alternativ einen Anweisungsblock A oder einen Anweisungsblock B ausführen lassen. Dazu wird eine if-Konstruktion um eine else-Konstruktion erweitert if (Bedingung) {

Anweisung(en);

}

else {

Anweisung(en);

}

Bedingungsoperator ?:

 

If-else-Verzweigungen können mithilfe des Bedingungsoperators ?: ausgedrückt werden. Dieser erwartet als einziger Operator drei Operanden: eine Bedingung und zwei Ausdrücke, von denen je nach Ergebnis der Bedingung einer ausgeführt wird. Bedingung ? Ausdruck1: Ausdruck2;
switch-Verzweigung

 

Diese dient dazu, den Wert einer numerischen Variablen/ Ausdrucks/ Strings mit einer Reihe von Konstanten zu vergleichen. switch (Ausdruck) {

case CONST1: Anweisungen;

break;

case CONST2: Anweisungen;

break;

default:           Anweisungen;

break;

Schleifen while-Schleife

 

Diese ist die allgemeinste Schleife. Jede Schleife besteht aus einem Schlüsselwort (in diesem Fall while), eine Bedingung und einem Anweisungsblock. while (Bedingung) {

Anweisungen;

}

do-while-Schleife

 

Diese ist mit der while-Schleife eng verwandt. Der einzige Unterschied besteht darin, dass bei der while-Schleife die Schleifenbedingung bereits vor dem ersten Ausführen des Anweisungsblocks getestet wird, während die do-while-Schleife den Anweisungsblock einmal ausführt und erst dann die Bedingung überprüft. Initialisierung;

do {

Anweisung(en) inklusive Veränderung;

} while (Bedingung);

for-Schleife

 

Die drei Anweisungen zur Bearbeitung der Schleifenvariablen (Initialisierung, Bedingung und Änderung) werden im Schleifenkopf zusammengezogen. Das macht diese Schleife sehr übersichtlich. for (Initialisierung; Bedingung; Veränderung) {

Anweisungen;

}

for-each-Schleife

 

Diese ist eine Variante der for-Schleife. Mit ihr können alle Elemente eines Arrays, einer enum-Aufzählung, einer Collection bzw. ganz allgemein jedes Objekts, das die Schnittstelle Iterable implementiert, durchlaufen werden. // gegeben ist ein Array ‘zahlen‘ mit 10 Integer-Elementen.

// Werte der Elemente mit ‘for-each‘-Schleife ausgeben

for(int i : zahlen) {

System.out.println(i);

}

Tabelle 3: Übersicht über wichtige Kontrollstrukturen.

Zusammenfassung und Ausblick

Im zweiten Teil dieses Java-Online-Tutorials haben Sie die wichtigsten Sprachmerkmale der Programmiersprache Java kennengelernt. Natürlich reicht dieses noch nicht aus, um alle Arten von Programmen zu schreiben. Aber wir kommen schon ein gutes Stück weit.

Programmieren lernt man schrittweise. Man steht vor einem aktuellen Problem und muss sich eine Lösungsmöglichkeit suchen bzw. erarbeiten. Später kann man bei ähnlichen Fragestellungen darauf zurückgreifen.

Im kommenden Teil behandeln wir ein ganz wichtiges Leistungsmerkmal der Programmiersprache Java. Wir beschäftigen uns mit den Möglichkeiten der Objektorientierung. Moderne Applikationen verwenden üblicherweise dieses Sprachparadigma. Implizit kommt es in unserem Quellcode bereits an allen Stellen vor. Wir müssen den Ansatz jedoch vollständig verstanden haben, um Programme in Java schreiben zu können, denn die gesamte Bibliothek basiert auf dem objektorientierten Ansatz. Ebenso werden wir uns einleitend mit der Projektstruktur unseres Beispiels und allgemein eines Java-Programms beschäftigen.

Geschrieben von
Dr. Veikko Krypczyk
Dr. Veikko Krypczyk
Dr. Veikko Krypczyk studierte und promovierte in Betriebswirtschaftslehre mit dem Schwerpunkt Wirtschaftsinformatik. Er ist Entwickler und Fachautor. Aktuell beschäftigt er sich mit der App-Programmierung für Windows Phone und Android.
Olena Bochkor
Olena Bochkor
Olena Bochkor studierte Betriebswirtschaftslehre u. a. mit dem Schwerpunkt Wirtschaftsinformatik. Weitere Informationen zu diesen und anderen Themen der IT finden Sie unter http://it-fachartikel.de.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.