Einführung Java

Im Gegen­satz zu bekann­ten Pro­gram­mier­spra­chen wie C++ wird Java-Code zunächst in Byte­code com­pi­liert, der dann über die spe­zi­el­le vir­tu­el­le Maschi­ne (Java Vir­tu­al Machi­ne, JVM) des Betriebs­sys­tems aus­ge­führt wird. Über die­sen Umweg reicht es also, wenn der Byte­code (Datei­endung .class) wei­ter­ge­ge­ben wird. Die­ser kann auf allen mög­li­chen Platt­for­men, z.B. Win­dows oder MacOS, aus­ge­führt wer­den. Hier­zu wird dann das Java Run­ti­me Envi­ron­ment benö­tigt.

Bei C++ sieht es ganz anders aus. Ein Win­dows-Pro­gramm kann nicht ohne Wei­te­res auf einem Mac gestar­tet wer­den und ande­res her­um genau so wenig.

Vom Quellcode zum fertigen Programm bei Java und bei anderen Programmiersprachen wie C++ und Objective-C.
Vom Quell­code zum fer­ti­gen Pro­gramm bei Java und bei ande­ren Pro­gram­mier­spra­chen wie C++ und Objec­ti­ve-C.

Hallo Welt

Der Quell­code eines Java-Pro­gramms ist eine ganz nor­ma­le Text­da­tei, kann also mit einem nor­ma­len Edi­tor erzeugt und bear­bei­tet wer­den. Es ist jedoch beque­mer, gleich eine Soft­ware wie Net­be­ans zu ver­wen­den. Hier­bei han­delt es sich um eine frei erhält­li­che Ent­wick­lungs­um­ge­bung, die in Java geschrie­ben wor­den ist und mit der man u.a. auch Java-Pro­gram­me ent­wi­ckeln kann.

Die Klas­se hel­lo­world ist hier­bei die Haupt­klas­se und main die Haupt­me­tho­de. Funk­tio­nen wer­den als Metho­den bezeich­net. Die Metho­de main hat die Eigen­schaf­ten public, sta­tic und void; public heißt öffent­lich und meint für alle ver­füg­bar, sta­tic hei­ßen Metho­den, die nicht ver­än­dert wer­den kön­nen und void meint, dass die Funk­ti­on kei­nen Wert zurück­gibt. In der Klam­mer hin­ter dem Metho­den­be­zeich­ner main fin­den wir String[] args, also kön­nen Argu­men­te vom Typ String an die Metho­de über­ge­ben wer­den.

Das klingt alles kom­pli­zier­ter als es ist. Für den Anfang mer­ken wir uns ein­fach den grund­sätz­li­chen Auf­bau des Soft­ware­ge­rüsts.

Wenn der Java Deve­lo­p­ment Kit (JDK) instal­liert ist, kann man als den Quell­code für hel­lo­world ein­fach wie er ist in eine Text­da­tei ein­fü­gen und anschlie­ßend als hel​lo​world​.java abspei­chern. Es ist wich­tig, dass sich der Name der Klas­se im Datei­na­men wie­der­fin­det. Anschlie­ßend kann auf der Kom­man­do­zei­len­ebe­ne (Win­dows cmd.exe, Mac Ter­mi­nal) das Pro­gramm mit dem Java-Com­pi­ler mit­tels

com­pi­liert wer­den und zwar in die Datei helloworld.class. Die­se Datei wird dann mit

aus­ge­führt und es wir Hal­lo Welt! aus­ge­ge­ben. Leich­ter lässt sich der Vor­gang selbst­re­dend in einer Ent­wick­lungs­um­ge­bung wie Net­be­ans bewerk­stel­li­gen.

Rechnen mit Integerzahlen und mit Gleitkommazahlen

Das fol­gen­de Pro­gramm zeigt die Anwen­dung der Grund­re­chen­ar­ten auf den Daten­typ Inte­ger, der in Java int heißt.

Varia­blen vom Typ Inte­ger sind ganz­zah­lig und wer­den mit int dekla­riert. Die meis­ten Berech­nun­gen ver­lau­fen erwar­tungs­ge­mäß. Ledig­lich bei der Divi­si­on gibt es Pro­ble­me, doch wir dür­fen nicht ver­ges­sen, dass wir nur mit Ganz­zah­len arbei­ten.

Was pas­siert, wenn wir statt­des­sen mit Gleit­kom­ma­zah­len arbei­ten? In Java gibt es hier­für zwei Daten­ty­pen, näm­lich float und das genaue­re dou­ble.

Jetzt kom­men wir auch bei der Divi­si­on auf das erwar­te­te Ergeb­nis. Übri­gens ist das Dezi­mal­trenn­zei­chen in Java wie­der der Punkt.

Arbeiten mit Zeichenketten (Strings)

Zei­chen­ket­ten wer­den mit dem Daten­typ String beschrie­ben. Mit Ihnen kön­nen ganz unter­schied­li­che Mani­pu­la­tio­nen durch­ge­führt wer­den, von denen wir uns eini­ge anschau­en wol­len.

So kann die Län­ge des Strings mit length() bestimmt wer­den. Mit cha­rAt kann man fest­stel­len, wel­ches Zei­chen an einer bestimm­ten Stel­le zu fin­den ist. Hier wird wie­der ein­mal mit 0 begon­nen. Mit indexOf kann in einem String gesucht wer­den. Die­se Funk­ti­on nutzt man häu­fig, wenn man mit sub­string einen bestimm­ten Teil der Zei­chen­ket­te kopie­ren will.

Manch­mal möch­te man mit toUp­per einen String in Groß­buch­sta­ben umwan­deln und mit toLower in Klein­buch­sta­ben. Des Wei­te­ren kön­nen Teil­strings durch ande­re Teil­strings ersetzt wer­den, was sich mit replace rea­li­sie­ren lässt.

Datenfelder (Arrays)

In Arrays kön­nen Wer­te vom glei­chen Typ, wie z.B. dou­ble, int oder String gespei­chert wer­den. Eine Mög­lich­keit, ein Array zu initia­li­sie­ren, ist das Ein­fü­gen in einer geschweif­ten Klam­mer. Danach kann man über das Anspre­chen des Arrayele­ments über eine ecki­ge Klam­mer auf die ein­zel­nen Wer­te zugrei­fen. Hier geschieht das über eine for-Schlei­fe, wie wir sie aus Java­script ken­nen.

Des Wei­te­ren haben wir hier eine Metho­de, also eine Funk­ti­on, vor­ge­se­hen, die die Wer­te der Arrays aus­ge­ben soll. Sie ist wie­der ein­mal vom Typ void, gibt also kei­nen Wert zurück. Ala Para­me­ter wer­den die Wer­te des Arrays bzw. das Array selbst über­ge­ben.

Ver­wun­dern könn­te die Tat­sa­che, dass die Funk­ti­on Aus­ga­be mehr­fach vor­han­den ist. In Java ist es mög­lich. Die Metho­den unter­schei­den sich hier aller­dings im Para­me­ter, einer­seits ist es ein int-Array und ande­rer­seits ein Array aus Strings. Bei der Aus­ga­be wird eine for-Schlei­fe durch­lau­fen bis das Ende des Arrays erreicht wird. Die lau­fen­de Num­mer und das Arrayele­ment selbst wer­den durch einen Tabu­la­tor \t getrennt.

Zum Sor­tie­ren der Arrays kann sort genutzt wer­den. Hier­zu muss dass Paket java.util.Arrays impor­tiert wer­den. Das Sor­tie­r­er­geb­nis unter­schei­det sich hier­bei je nach Art der zu sor­tie­ren­den Wer­te. Zah­len wer­den nach den Zah­len­wer­ten sor­tiert [2, 3, 5, 7, 11, 13] und String alpha­be­tisch [11, 13, 2, 3, 5, 7].

Eingabe und Ausgabe

Die Aus­ga­be in Java-Pro­gram­men lässt sich beson­ders ein­fach über System.out.println rea­li­sie­ren. Für die Ein­ga­be von der Kon­so­le muss java.util.Scanner impor­tiert wer­den.

Das soll an einem Bei­spiel zur BMI-Berech­nung demons­triert wer­den. Hier­zu wer­den wir Varia­blen ver­schie­de­ner Daten­ty­pen ver­wen­den. Zunächst muss name vom Typ String ein­ge­ge­ben wer­den. Zuvor jedoch wur­de für die Ein­ga­ben gene­rell die varia­ble Scan­ner vom Typ Scan­ner dekla­riert. Der String kann jetzt mit Scanner.nextLine() Ein­gel­sen wer­den.

Die Mas­se m besitzt den Typ dou­ble und wird über Scanner.nextDouble() ein­ge­ge­ben. Ähn­lich ver­hältst es sich mit der Grö­ße l in cm, die als Ganz­zahl mit scanner.nextInt() ein­zu­ge­ben ist.

Für die Berech­nung des BMI-Werts steht die Funk­ti­on berech­ne zur Ver­fü­gung, die einen Wert vom Typ dou­ble zurück­gibt und die Para­me­ter m und l hat. Für die Berech­nung des BMI dient die For­mel $BMI = \frac{m}{l^2}$, wobei die Mas­se in Kilo­gramm und die Grö­ße in Metern anzu­ge­ben ist. Da wir die Grö­ße in Zen­ti­me­ter ein­le­sen, müs­sen wir noch durch 100·100 rech­nen.

Lehrer als Objekte

Wir wol­len an die­ser Stel­le einen Ein­stieg in die objekt­ori­en­tier­te Pro­gram­mie­rung (OOP) wagen. Das hört sich zuge­ge­be­ner­ma­ßen zunächst ein­mal sehr kom­pli­ziert an, ist es aber gar nicht.

Als Bei­spiel wol­len wir uns die an einer Schu­le han­deln­den Per­so­nen vor­neh­men, wozu ja bekann­ter­ma­ßen Schü­ler, Leh­rer, Sekre­tä­rin­nen, Haus­meis­ter usw. gehö­ren. Dazu wol­len wir eine Klas­se Per­son pro­gram­mie­ren. Eine Per­son hat bei uns die Eigen­schaf­ten Vor­na­me, Nach­na­me, Roll in der der Schu­le und einen Spruch.

Des Wei­te­ren haben wir die Metho­den print() und print­Spruch() vor­ge­se­hen. Mit­tels print() wer­den die wich­tigs­ten Daten der Per­son aus­ge­ge­ben und mit print­Spruch() ledig­lich das Zitat.

Klasse
Person
Eigenschaften (Instanzvariablen):
Vorname
Nachname
Rolle (z.B. Lehrer)
Spruch (ein Zitat)
Methoden:
print()
printSpruch()
Klas­sen­dia­gramm der Klas­se Per­son.

Der fol­gen­de Quell­text zeigt die Klas­se als Java-Code. Zunächst ein­mal wird die Klas­se in der 1. Zei­le defi­niert. Es fol­gen die Varia­blen­ver­ein­ba­run­gen für die Eigen­schaf­ten. Dies sol­len hier alle vom Typ String sein. Die Varia­ble Spruch wird auch gleich mit einem String initia­li­siert. Dabei han­delt es sich übri­gens um eine iri­sche Volks­weis­heit, die mir sehr sym­pa­thisch ist.

Die Metho­den sind bei­de vom Typ void, es wird also kei­ne Rück­ga­be erwar­tet. Die Varia­blen inner­halb einer Klas­se wer­den über das Schlüs­sel­wort this ange­spro­chen. So kann man mit this.geschlecht auf das Geschlecht der Per­son zugrei­fen.

In einer wei­te­ren Klas­se Schu­le kön­nen wir dann mit der Klas­se Per­son arbei­ten. Dazu dekla­rie­ren wir zunächst eine Varia­ble vom Typ Per­son, die wir schlicht p nen­nen. Hier ist p ein Objekt der Klas­se per­son.

mmm­mm

mmmm

mmmm

mmm­m­mm

mmm­m­mm