1. Der Einstieg in Java Lernziele: Am Ende dieses Kapitels sollen Sie wissen, aus welchen Bestandteilen ein Java-Programm besteht, Java-Programme übersetzen und ausführen können, Möglichkeiten der Kommentierung von Java-Programmen kennen, einfachste Java-Programme erstellen können und Regeln zur Formatierung von Java-Quelltext beherrschen (Übungen). Ein Übersetzer, der problemorientierte Programme in maschinennahe Programme transformiert, heißt Compiler. Werden Programme nicht vollständig übersetzt und später ausgeführt, sondern Anweisung für Anweisung übersetzt und später ausgeführt, spricht man von einem Interpreter. Der Java-Compiler übersetzt das sogenannte Quellprogramm in Java-Bytecode, der unabhängig von einem bestimmten Prozessor ist. Der Java-Interpreter analysiert den erzeugten Bytecode schrittweise und führt ihn aus. virtuelle Maschine (VM), Plattformunabhängigkeit Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 07 10 Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 07 12 Was heißt Programmieren? Java Quellprogramm Ein Programm ist ein Algorithmus, der in einer Programmiersprache formuliert ist. Arten von Programmiersprachen: Maschinensprache ist eine Sprache, die der Prozessor des Rechners direkt versteht. Notation aus Nullen und Einsen, schwer lesbar Assembler: Jedem binären Maschinencode ist für die leichtere Lesbarkeit ein Assemblercode aus Buchstaben und Ziffern zugeordnet. Abhängigkeit vom Prozessortyp Höhere bzw. problemorientierte Programmiersprachen: Es stehen Operationen zur Verfügung, die nicht eins-zu-eins auf eine Operation des Prozessors abgebildet werden können. einfachere Programmierung, nichttriviale Übersetzung in Maschinensprache notwendig Java VM für Windows Java Compiler Java Bytecode Java VM für Linux Java VM für Mac OS X ausführbares ausführbares ausführbares Windows Linux Mac OS X Programm Programm Programm Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 07 11 Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 07 13
Programmieren bedeutet, unter Einsatz einer Programmiersprache ein gegebenes Problem zu lösen. Hierfür sind eine Reihe von Arbeitsschritten notwendig, z.b.: Analyse, Modellierung, Codierung, Compilierung, Ausführung Das Schreiben des Programmtextes ist die Codierung. Dies geschieht unter Einsatz eines Texteditors. Meistens weisen Programme nach der erstmaligen Codierung Fehler auf. Dies können sein: Syntaxfehler (Fehler in der Grammatik) Semantikfehler (Das Programm macht nicht das, was es soll.) Mein erstes Java-Programm public class Berechnung { public static void main(string[] args) { int i; i = 3 + 4; Das Programm berechnet 3 plus 4 und gibt das Ergebnis aus! Compilierung und Ausführung Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 07 14 Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 07 16 Welches Problem ist zu lösen? Problem Was erwarte ich von meiner Lösung? Ausdruck, Variable, Zuweisung Analyse / Modellierung Programmierung / Codierung Übersetzung / Compilierung Ausführung / Interpretierung algorithmische Beschreibung Programm ausführbares Programm Wie lässt sich das Problem lösen? Wie bringe ich meine Idee dem Rechner bei? Z.B. durch ein Java Programm? Wie muss der ausführbare Code aussehen? Z.B. Java Bytecode oder Maschinencode? i = 3 + 4; Rechts vom Gleichheitszeichen findet eine Berechnung statt. Solch eine Berechnungsvorschrift heißt Ausdruck. Zu einem Ausdruck gehört immer ein Wert. Links steht der Name einer Variablen (hier i). Dieser wird der Wert des Ausdrucks zugewiesen. Man bezeichnet dies als Zuweisung. Eine Zuweisung ist eine spezielle Form einer Anweisung. Einfache Anweisungen werden durch ein Semikolon (;) abgeschlossen. Problemlösung Ist das Problem gelöst? Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 07 15 Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 07 17
Ganze Zahlen und Gleitkommazahlen Methodenaufruf Java unterscheidet zwischen ganzen Zahlen und Gleitkommazahlen. Beispiele für ganze Zahlen: 0 1-1 2147483647 Beispiele für Gleitkommazahlen: 0.0 1.0-1.0 2147483647.0 42.314159-3.7E2 1.9E-17.12345 System.out.println ist der Name einer Methode (ein Unterprogramm), mit der wir Text und Zahlen auf dem Bildschirm ausgeben können. In Klammern folgt nach dem Methodenname das, was wir der Methode übergeben wollen. Hier: der Wert der Variablen i. Die Methode System.out.println ist flexibel einsetzbar. Statt einer Zahl können wir auch Text ausgeben lassen: System.out.println("Das Ergebnis ist: "); Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 07 18 Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 07 20 int i; Variablendeklaration Damit geben wir bekannt, daß wir eine Variable mit dem Namen i verwenden wollen. Wir bezeichnen dies als Variablendeklaration. In Java gilt streng: Jede Variable muß vor ihrer Verwendung deklariert werden (declare before use). Will man beides in einer Zeile ausgeben, können wir System.out.print("Das Ergebnis ist: "); oder System.out.println("Das Ergebnis ist: " + i); verwenden. Ebenfalls gilt streng: Zu jeder Variablen gehört ein Datentyp. Hier int, d.h. ganze Zahlen (genauer ganze Zahlen zwischen 2 31 und 2 31 1). Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 07 19 Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 07 21
Blöcke Java nutzt zur Strukturierung des Quelltextes sogenannte Blöcke. Ein Block wird durch { und eingeschlossen. Unser Beispielquelltext hat zwei Blöcke: 1. Die Klasse Eine Klasse ist in Java die oberste Struktureinheit. Sie sieht folgendermaßen aus: public class Klassenname {... Wichtig: Der Dateiname, in der Sie den Quelltext der Klasse speichern, muß Klassenname.java lauten. Kommentare Wenn wir (oder andere) nach längerer Zeit einen Java-Quelltext analysieren, werden wir uns u.u. nicht mehr an den Sinn jeder Anweisung erinnern. Deshalb ist die Kommentierung von Programmen von großer Wichtigkeit. Java bietet hierfür drei verschiedene Möglichkeiten: Zeilenkommentar a = b + c; // dies ist ein Kommentar Mehrzeiliger Kommentar /* Kommentar... mehr Kommentar... letzte Kommentarzeile... */ Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 07 22 Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 07 24 2. Die Hauptmethode Methoden sind Struktureinheiten unterhalb von Klassen. Jede Klasse, die ein ausführbares Programm darstellen soll, muß eine Methode mit dem Namen main besitzen: public static void main(string[] args) {... Den Rest der ersten Zeile der Methode müssen Sie bis auf weiteres genau so wie hier angegeben verwenden. Erläuterungen zu Übersetzung und Ausführung. Dokumentationskommentar Solche Kommentare beginnen mit /** und enden mit */. Es sind spezielle Kommentare, aus denen mit dem Programm javadoc eine HTML-Dokumentation in standardisierter Form erzeugt werden kann. /** * Dieses Programm berechnet die Lottozahlen von naechster * Woche. Dabei erreicht es im Schnitt eine Genauigkeit * von 99,5% * * @author Hans Mustermann * @date 1998-10-26 * @version 1.0 */ Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 07 23 Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 07 25
Bezeichner Wir werden später oft in die Verlegenheit kommen, irgendwelchen Dingen Namen geben zu müssen, z.b. einer Variablen als Platzhalter, um eine Rechnung mit verschiedenen Werten durchführen zu können. In Programmiersprachen heißen solche Namen Bezeichner. Bezeichner bestehen aus: Buchstaben a,b,...,y,z,a,...,z dem Unterstrich dem Dollarzeichen $ Ziffern 0,...,9 Darüberhinaus gelten folgende Regeln: Bezeichner müssen mit einem Buchstaben, dem Unterstrich oder dem Dollarzeichen beginnen. Literale Ein Literal bzw. eine Literalkonstante beschreibt einen konstanten Wert, der sich innerhalb eines Programms nicht ändern kann. Literale haben, abhängig von ihrem Typ, vorgeschriebene Schreibweisen: ganze Zahlen (z.b. 23 oder -166), Gleitkommazahlen (z.b. 3.14), Wahrheitswerte (true und false), einzelne Zeichen (z.b. a ), Zeichenketten (z.b. "Hallo Welt"), das sogenannte Null-Literal für Referenzen, dargestellt durch die Literalkonstante null. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 07 26 Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 07 28 Reservierte Wörter dürfen nicht als Bezeichner verwendet werden. Reservierte Wörter und Schlüsselwörter Gültige Bezeichner (in Java): Hallo Welt _H_A_L_L_O_ hallo123 hallo 123 Keine gültigen Bezeichner (in Java) sind: 101Dalmatiner beginnt mit einer Ziffer Das war s Das Zeichen ist nicht erlaubt Hallo Welt Leerzeichen ist nicht erlaubt class ist ein reserviertes Wort Schlüsselwörter sind Wörter, die mit einer vordefinierten symbolischen Bedeutung belegt sind. Solche Schlüsselwörter dürfen ebenso wie die Literalkonstanten true, false und null nicht als Bezeichner verwendet werden. abstract assert boolean break byte case catch char class const continue default do double else extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 07 27 Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 07 29
Trennzeichen und Interpunktionszeichen Operatorsymbole Zu welcher Pferderasse gehören Blumentopferde? Heißt es der, die oder das Kuhliefumdenteich? Auch der Java-Compiler muß in der Lage sein, einzelne Bezeichner, reservierte Wörter und Literale voneinander zu trennen. Hierzu dienen: Leerzeichen Zeilenendezeichen Tabulatorzeichen Kommentare Operatoren (z.b. + oder *) Interpunktionszeichen., ; ) ( { [ ] Operatoren sind spezielle Symbole, die dazu dienen, jeweils bis zu drei unterschiedliche Werte die Operanden zu einem neuen Wert zu verknüpfen. Wir unterscheiden die Operatoren nach der Anzahl ihrer Operanden: monadische Operatoren sind Operatoren, die nur einen Operanden benötigen. Beispiele: ++ oder -- dyadische Operatoren vernüpfen zwei Operanden. Beispiele: +, - oder == triadische Operatoren verknüpfen drei Operanden. Davon gibt es in Java nur einen: signum = x >= 0? 1 : -1; Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 07 30 Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 07 32 Operatoren und Interpunktionszeichen haben in Java eine besondere Bedeutung. Sie dürfen daher nur dort eingesetzt werden, wo sie hingehören. Bezeichner, reservierte Wörter und Literale müssen durch mindestens eines der obigen Symbole voneinander getrennt werden. Hierbei ist es in Java eigentlich egal, welche Trennzeichen man verwendet und wie viele davon. Die Zeile public static void main (String[] args) ist äquivalent zu den folgenden Zeilen: public static/* */void main( //... String[] args) import-anweisung Viele Dinge, die wir in Java benötigen, befinden sich nicht im Kern der Sprache, sondern sind in Klassen ausgelagert, die sich wiederum in Paketen befinden. Dies gilt z.b. für die Bildschirmausgabe oder mathematische Funktionen wie Sinus oder Cosinus. Die meisten solcher Klassen müssen explizit importiert werden. Hierzu dient die import-anweisung. Beispielsweise sorgt die Anweisung import java.io.*; dafür, daß alle Klassen des Pakets java.io importiert werden und somit für die Programmierung benutzt werden können. import-anweisungen stehen vor der Klassendefinition. Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 07 31 Peter Becker, Programiersprache Java FH Bonn-Rhein-Sieg, SS 07 33