3. Java

 
3.1 Java, was ist das?
Seitenfuß  Bezug und Installation von Java 
Java, was ist das?  Seitenkopf 


"Java steht für einen der großen Namen des Kaffees. Java produziert einen aromatischen, säurearmen Kaffee, der von Natur aus mild und ausgewogen im Geschmack ist." (http://www.moccapur.de/anbau/asien.htm) Dies ist wahrscheinlich der Grund, warum Java die Lieblingskaffeesorte der Entwickler von Sun Microsystems ist. Als sie 1995 eine neue, objektorientierte Programmiersprache entwickelt hatten, aber noch einen Namen suchten, erschien es ihnen nur gerecht, sich auch einmal bei ihrem Lieblingsgetränk zu bedanken. So nannten sie die heute beliebteste Programmiersprache einfach Java. Das Logo Java's wurde eine dampfende Kaffeetasse.
Eigenschaften Java's lassen sich in wenigen Punkten formulieren:
Objektorientierung
Java integriert alle grundlegenden objektorientierten Konzepte.
Plattformunabhängigkeit
In Java geschriebene Programme laufen auf allen Systemen auf denen Java verfügbar ist, d.h. Programme müssen nicht für jede Plattform neu geschrieben oder angepasst werden (wie z.B. mit C++ geschriebene Programme). Die Plattformunabhängigkeit bewirkt auch, dass Java für kleine Programme im Internet (Applets) verwendet werden kann.
Integration moderner Technologien
wie z.B. Nebenläufigkeit (mithilfe von Threads), automatische Speicherverwaltung (Garbage Collector) oder strukturierte Fehlerbehandlung(Exceptions).
Grundlegende Funktionalität mithilfe der API
Java stellt eine eigene Klassenbibliothek(API) zur Verfügung. In dieser sind grundlegende, häufig benötigte Klassen vorhanden. So stellt die Klasse "Math" Methoden zum Wurzelziehen und Exponentieren zur Verfügung.
Diese Punkte bewirkten, dass Java sich zur heute beliebtesten und am häufigsten genutzten Programmiersprache entwickelte.


3.2 Bezug und Installation von Java
3.2.1 JDK
Seitenfuß  Hilfsmittel 
Java, was ist das?  Seitenkopf 


Java ist ein Produkt von Sun Microsystems und kann dementsprechend von deren Seiten heruntergeladen werden. Die aktuelle Version ist unter http://java.sun.com/j2se/1.3 zu finden. Alternativ findet man Java auch auf manchen Computerzeitschriften beigelegten CD's. Sun selbst stellt Java für Linux, Solaris und Windows zur Verfügung. Es finden sich jedoch auch Versionen von anderen Anbietern für andere Systeme. Bei jedem System ist zu beachten, dass man ein JDK (Java Development Kit) bzw. SDK(Sun Development Kit) erhält. Dies sind die synonym verwendeten Bezeichnungen der Entwicklungspakete für Java. Mit diesen kann man sowohl Java-Programme erstellen, als auch ablaufen lassen. Im Gegensatz dazu ist die JRE (Java Runtime Environment) nur für das Laufen von Java-Programmen verantwortlich. Sie ist Teil des JDK.
Wie oben erwähnt hat man die Wahl zwischen einer Linux-, Windows- und Solarisversion. Ich werde nur auf die beiden gebräuchlichen Systeme Linux und Windows eingehen.
 
Linux
Bei der Linuxversion besteht die Wahl zwischen einem RPM-Paket und einem Tar-Archiv. Die Größe beträgt bei beiden etwa 25MB. Für die Installation öffnet man eine Textkonsole und wechselt in das Verzeichnis in dem die Installationsdatei liegt.
Die Installation des RPM-Paketes erfolgt dann mittels:
rpm -i jdk-xxx.rpm
wobei xxx für die Versionsnummer steht.
Da das Tar-Archiv als Shellskript vorliegt, kann dieses folgendermaßen installiert werden:
./sdk-xxx.bin
Auch hier steht das xxx für die Versionnummer.
 
Windows
Unter Windows beträgt die Größe des JDK's etwa 33MB. Die Installation wird mit einem Doppelklick auf die Installationsdatei gestartet. Danach sollten die Anweisungen befolgt werden.


3.2.2 Hilfsmittel
Seitenfuß  Hello World! 
JDK  Seitenkopf 


Dokumentation
Ein sehr nützliches Hilfsmittel stellt die Dokumentation zur mitgelieferten Klassenbibliothek dar. Sie ist unter http://java.sun.com/j2se/1.3/docs.html als Zip-Datei erhältlich. Durch entpacken der Datei wird sie nutzbar.
Weiterhin ist das online kostenlos verfügbare Buch GoTo Java 2 (http://www.javabuch.de/) vor allem für Anfänger, aber auch für Fortgeschrittene sehr hilfreich.
 
Editoren
Generell können Java-Programme mit jedem Texteditor geschrieben werden. Es bieten sich jedoch spezielle Javaeditoren an, welche meist Funktionen wie Syntaxhighlighting(=Hervorhebung von Java-Schlüsselwörtern) und kompilieren/ausführen per Mausklick, zur Verfügung stellen. Unter Windows lässt sich mit dem JCreator besonders gut arbeiten. Er ist unter http://www.jcreator.com frei erhältlich.
Unter Linux kann man die meisten Editoren mittels eines Java-Plugins auch für Java nutzbar machen. Ob solch ein Plug-In für den Lieblingseditor verfügbar ist, kann meist der Homepage des jeweiligen Editors entnommen werden.


3.3 Hello World!
Seitenfuß  Javagrundlagen 
Hilfsmittel  Seitenkopf 


Da Java nun installiert ist, wird es Zeit für ein erstes Programm. Üblicherweise gibt das erste Programm in einer neuen Programmiersprache "Hello World!" auf dem Bildschirm aus. Und genau das tut unser Erstes auch:
HelloWorld.java
1: //HelloWorld
2:
3: class HelloWorld
4: {
5:   public static void main(String[] args)
6:   {
7:     System.out.println("Hello World!");
8:   }//main
9: }//class 
Die verwendeten Befehle werden in den nächsten Kapiteln erläutert, zunächst geht es um den Weg vom Quelltext zum ausführbaren Programm.
Zuerst muss der Quelltext in einen Editor übernommen werden. Abtippen ist hierbei der beste Weg, da sich so erste Elemente Java's einprägen. Dann wird der Quelltext abgespeichert. Der Compiler verlangt, dass die Quelldatei die Endung ".java" besitzt und dass der Dateiname mit dem Namen, der im Quelltext definierten Klasse, übereinstimmt. Der Name der Klasse ist immer hinter dem Schlüsselwort "class" zu finden. Demnach heißt unsere Quelldatei HelloWorld.java, wobei die Groß- und Kleinschreibung unbedingt beachtet werden muss.
Nun kann das Programm compiliert werden. Dies geschieht in Javaeditoren mittels eines Klickes auf "kompilieren" bzw. "compile". Ohne Javaeditor öffnet man eine beliebige Textkonsole (unter Windows die MS-Dos-Eingabeaufforderung) und wechselt in das Verzeichnis, in welches man die Datei gespeichert hat. Kompiliert wird das Programm nun durch:
javac HelloWorld.java
Nach dem kompilieren kann das Programm ausgeführt werden. Im Javaeditor reicht wieder ein einziger Klick, diesmal auf "start" bzw. "run". Ohne Javaeditor erfolgt das Starten durch die Eingabe von:
java HelloWorld
(Hinweis: Unter Windows muss zum Kompilieren und Ausführen von Java Programmen mit der Kommandozeile der Pfad zum JDK-Verzeichnis gesetzt sein. Dies wird standardmäßig bei der Installation vorgenommen.1)


3.4 Javagrundlagen
Seitenfuß 
Javagrundlagen
Hello World!  Seitenkopf 


Die meisten Elemente werde ich nur grob beschreiben, da sie in anderen Sprachen genau so, oder ähnlich verwendet werden. Sie sollen nur als Grundlagen für die Objektorientierung in Java dienen.
 
Kommentare
Wie in jeder Programmiersprache gibt es in Java Kommentare.Sie dienen dazu, die Funktionalität des Programmes festzuhalten. Kommentare werden in Java wie in C++ notiert, wobei man einzeilige und mehrzeilige unterscheidet:
1:   //Das sind einzeilige Kommentare. 
2:   //Einzeilige Kommentare werden durch einen 
3:   //Doppelslash eingeleitet und enden 
4:   //automatisch am Zeilenende.
5:
6:   /*Währenddessen endet der, durch Slash und
7:    *Sternchen eingeleitete, mehrzeilige
8:    *Kommentar erst durch das Auftauchen der
9:    *Kombination Sternchen-Slash.
10:    */
 
Anweisungen und Blöcke
Wiederum wie in C++ wird jede Anweisung durch ein Semikolon abgeschlossen. Zu den Anweisungen zählen Variablendefinitionen, Zuweisungen und Methodenaufrufe. Mehrere Anweisungen können mit geschweiften Klammern zum Block zusammengefasst werden.
 
Variablen und Datentypen
Bei der Deklaration von Variablen notiert man zuerst den Datentyp, gefolgt vom Namen der Variablen. Optional kann der Variablen gleich ein Wert zugewiesen werden.
Die Grunddatentypen in Java gleichen denen in anderen Programmiersprachen. Für ganze Zahlen werden, je nach Größe der Zahlen, die Datentypen byte(8 Bit), short(16 Bit), int(32 Bit) oder long(64 Bit) verwendet, für gebrochene Zahlen gibt es die Datentypen float(32 Bit) und double(64 Bit).
Wahrheitswerte werden durch boolean repräsentiert. Boolschen Variablen kann, im Gegensatz zu anderen Programmiersprachen, nur true oder false zugewiesen werden. Die übliche Belegung von 1 für wahr, und allen anderen Zahlen für falsch, ist nicht zulässig.
Der Datentyp für Zeichen ist char, welcher nicht ASCII-Zeichen, sondern Unicodezeichen aufnimmt.
Zur Verwendung von Variablen und Datentypen nun ein kurzes Beispielprogramm:
Variablen.java
1: //Variablen
2:   //Definiton einer Klasse (siehe Kapitel 4)
3: class Variablen
4: {
5:   //Definiton einer Methode (siehe Kapitel 4)
6:   public static void main (String[] args)
7:   {
8:     //Definitonen und Wertzuweisungen der Variabeln
9:       // Definiton einer Ganzzahlvariablen 
10:     int a;
11:       /* Definition und Initialisierung einer
12:        * Double-Variablen
13:        */
14:     double d=-1.234535657765484;
15:       // Zuweisung des Wertes 34 an die Variable a
16:     a=34;
17:       // Definition einer bool'schen Variablen
18:     boolean b=true;
19:       /* Definition einer Zeichenvariablen mit
20:        * Wertzuweisung
21:        */
22:     char c='d';
23:
24:     /* Ausgabe der Variablen
25:      * Mit System.out.println(xxx) wird xxx auf der
26:      * Standardausgabe ausgegeben (meist der
27:      * Bildschirm). Erläuterungen werden im
28:      * 4. Kapitel folgen.
29:      */
30:     System.out.println("a="+a);
31:     System.out.println("b="+b);
32:     System.out.println("c='"+c+"'");
33:     System.out.println("d="+d);
34:   }//main(String[])
35: }//class
Kompiliert und ausgeführt wird diesmal mit:
javac Variablen.java
java Variablen
 
Operatoren
Die algebraischen und relationalen Operatoren sind größtenteils selbsterklärend. So werden Ganzzahlvariablen beispielsweise mit "+" addiert, und mit "==" auf Gleichheit getestet. Die logischen Operatoren "und" und "oder" sind mit "&&" bzw. "||" realisiert.
Sollten weiterführende Operatoren benötigt werden, so werde ich sie im Kontext erläutern.
 
Bedingungen und Schleifen
Bedingungen werden durch das Schlüsselwort if, gefolgt von der in runden Klammern stehenden Bedingung, eingeleitet. Danach folgt ein Anweisungsblock, der ausgeführt wird, wenn die Bedingung wahr ist. Optional folgt darauf das Schlüsselwort else und ein weiterer Anweisungsblock. Dieser wird ausgeführt, wenn die Bedingung falsch ist. Zu beachten ist, dass Bedingungen immer (auch bei den Schleifen) in runden Klammern stehen, während der Anweisungsblock in geschweiften Klammern steht:
1:   if(Bedingung)
2:   {
3:     //Anweisungen 
4:   }
5:   else
6:   {
7:     //Anweisungen 
8:   }
Die Sclüsselwörter while, do und for leiten in Java Schleifen ein.
Bei der while-Schleife(kopfgesteuerte Schleife) steht die Bedingung, unter der die Schleife wiederholt werden soll, hinter dem while. Sie wird gefolgt von dem zu wiederholendem Anweisungsblock:
1:   while(Bedingung)
2:   {
3:     //Anweisungen 
4:   }
Ist die Bedingung schon am Anfang falsch, so wird der Anweisungsblock gar nicht durchlaufen.
Im Gegensatz dazu wird der, dem do direkt folgende, Anweisungsblock der do-Schleife(fussgesteuerte Schleife) mindestens einmal ausgeführt. Die Bedingung steht deshalb hinter einem, sich an den Anweisungsblock anschließendem, while:
1:   do
2:   {
3:     //Anweisungen 
4:   }while(Bedingung)
Die for-Schleife(Zählschleife) hat folgende Syntax:
1:   for(Startwert; Bedingung; Inkrement)
2:   {
3:     //Anweisungen 
4:   }
Meist wird beim Startwert eine Variable definiert, die pro Durchlauf um eins erhöht wird. Der Anweisungsblock wird dann solange ausgeführt, wie die Variable kleiner als ein weiterer angegebener Wert ist. Andere Formen sind auch möglich.
Das folgende Beispielprogramm zeigt die Anwendung von Bedingungen und Schleifen. Das Programm berechnet die Teiler von Zahlen eines bestimmten Bereiches.
Teiler.java
1: //Teiler
2: class Teiler
3: {
4:   public static void main(String[] args)
5:   {
6:     //Variablen Definitionen
7:       //untere Grenze des Bereiches
8:     int i=1;
9:       //obere Grenze des Bereiches
10:     int a=20;
11:       //erster Teiler der aktuellen Zahl?
12:     boolean erster;
13:     do
14:     {
15:       System.out.print("Teiler von "+i+" sind: ");
16:       /*der nächste ausgegebene Teiler ist der
17:        *erste dieser Zahl
18:        */
19:       erster=true;
20:       //jede Zahl <= i wird durchlaufen 
21:       for(int j=1; j<=i; j++)
22:       {
23:         /* es wird geprüft ob die Division von
24:          * i/j den Rest 0 lässt (% ist der
25:          * Modulooperator), ist dies der Fall,
26:          * ist j Teiler von i, und j wird
27:          * ausgegeben
28:          */
29:         if(i%j==0)
30:         {
31:           /* Wenn erster wahr ist, j also der
32:            * erste Teiler der Zahl ist, wird
33:            * j ohne Seperator ausgegeben.
34:            * Danach wird erster auf false
35:            * gesetzt, da der nächste Teiler
36:            * nicht mehr der erste ist.
37:            */
38:           if(erster)
39:           {
40:             System.out.print(" "+j);
41:             erster=false;
42:           }
43:           /* Ist erster falsch, wird j mit
44:            * Seperator ausgegeben.
45:            */
46:           else
47:           {
48:             System.out.print("; "+j);
49:           }
50:         }//if
51:       }//for
52:       /*i wird um eins erhöht
53:        *(++ ist eine Abkürzung für i=i+1)
54:        */
55:       i++;
56:       //und eine neue Zeile angefangen
57:       System.out.println();
58:       /*solange i<=a ist, wiederhole das
59:        *für jede weitere Zahl
60:        */
61:     }while(i<=a);
62:   }//main(String[])
63: }//class 
 
Felder
Felder werden in Java wie einfache Variablen deklariert, mit dem Unterschied, dass man eckige Klammern an den Datentyp anhängt :
1:   //Deklaration eines Integer-Arrays
2:   int[] zahlen;
3:   //Deklaration eines boolean-Arrays
4:   boolean[] b;
Um ein Array nun zu initialisieren gibt es zwei Möglichkeiten:
Bei der ersten wird nur die Länge angegeben. Die einzelnen Elemente werden mit Standardwerten belegt:
1:   //Initialisierung von zahlen mit 3 Integer-Werten 0
2:   zahlen=new int[3];
3:   //Initialisierung von mit 6 boolean-Werten false
4:   b=new boolean[6];
Bei der zweiten Möglichkeit übergibt man die einzelnen Elemente in geschweiften Klammern an das Array:
1:   zahlen={3,4,123};
2:   b={true,false,true,true,false,false};
Wie bei einfachen Variablen können Deklaration und Initialisierung zusammengelegt werden:
1:   int[] zahlen=new int[3];
2:   boolean[] b={true,false,true,true,false,false};
Auf einzelne Elemente kann nun folgendermaßen zugegriffen werden:
1:   //setzt den 3.Wert von zahlen auf 25 
2:   zahlen[2]=25;
3:   //erzeugt eine boolean-Variable und initialisiert 
4:   //sie mit dem 2.Element von b
5:   boolean a=b[1];
Zu beachten ist, dass die Indexnummerierung bei 0 beginnt. Das erste Element eines Arrays hat also den Index 0, das Zweite 1 usw.
 
Abschluss
Diese Grundlagen sollten ausreichen, um nun auf die Objektorienierung in Java überzugehen.



©2002 by Th. Zeume