Java Kurs

 
c 1998-2000 Kurt Huwig jun. Mainzer Straße 35 D-66111 Saarbrücken Tel: +49-(0)-681 / 685 0100 Fax: +49-(0)-681 / 685 0101

A Erstellt mit L TEX 2ε unter Linux

% !     ¢ ©    % %# " ¦ ¦ ¥1 0¥§)(§'§&$§§© !     ¢ © ¨ ¦ ¤ ¢ ¥ §¥§¥£¡
2. September 2000

Inhaltsverzeichnis
1 Einführung 1.1 Was ist Java? . . . . . . . . . . . 1 1 3 3 4 4 5 5 6 7 7 9 9 12 13 13 14 14 15 15 16 17 17 17 18 18 18 19 19 20 20 21 21 22 i

2

Installation 2.1 Installation des JDK 2.2 Hello Web! . . 2.3 Was ist passiert? .

. . .

. . .

. . .

. . .

. . .

. . .

. . .

. . .

. . .

. . .

3

Erste Schritte 3.1 Ein Java-Programm analysiert 3.2 Ein erstes Applet . . . 3.3 Datentypen . . . . 3.4 Variablen - ein Rechteck . 3.5 Zuweisungen . . . 3.6 Kontrollstrukturen . . 3.7 Kommentare . . . 3.8 Übungen . . . . 3.9 Zusammenfassung . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

4

Etwas Übung 4.1 Einfache Ein- / Ausgabe . . 4.2 Bessere Ein- / Ausgabe . . 4.3 Passwortabfrage . . . . 4.4 Zeichenketten in Zahlen umwandeln Arrays 5.1 Erzeugung von Arrays . 5.2 Mehrdimensionale Arrays 5.3 Zugriff auf Arrayelemente 5.4 Länge eines Arrays . 5.5 Übungen zu Arrays . Methoden 6.1 Was sind Methoden? 6.2 lokale Variablen . 6.3 Parameter . . 6.4 Rückgabewerte . 6.5 Überladung . . 6.6 Übungen . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

5

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

6

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

@ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553

2

c 2000 iKu Netzwerklösungen

Inhaltsverzeichnis 7 Klassen 7.1 Einführung in Klassen . . . . 7.2 Eine Fensterklasse . . . . 7.3 Übungen zu Klassen . . . . 7.4 Objekterzeugung . . . . . 7.5 Übungen zur Überladung . . . 7.6 Statische Elemente . . . . 7.7 Übungen zu Klassenfeldern und -methoden 7.8 Objektfreigabe . . . . . 7.9 Arrays von Objekten . . . . 7.10 Ausnahmen . . . . . 7.11 Übungen zu Ausnahmen . . . 7.12 Zusammenfassung . . . . Erbung, Pakete und Sichtbarkeit 8.1 Wozu Erbung? . . . 8.2 Unterklassen . . . 8.3 Überdeckung und Überschreibung 8.4 Polymorphie . . . 8.5 Übungen zur Polymorphie . 8.6 Packages und der 8.7 Sichtbarkeit . . . 8.8 Übungen zur Sichtbarkeit . 8.9 Finale Elemente . . . 8.10 Abstrakte Methoden und Klassen 8.11 Interfaces . . . . 8.12 Mehrfacherbung . . . 8.13 Übungen . . . . 8.14 Zusammenfassung . . Innere Klassen 9.1 Was sind innere Klassen? . 9.2 Elementklassen . . . 9.3 Lokale Klassen . . . 9.4 Anonyme innere Klassen . 9.5 Neue Syntax für innere Klassen 9.6 Übungen . . . . 23 23 23 25 26 26 27 28 28 29 29 30 30 31 31 31 32 33 33 34 35 35 36 36 37 37 38 38 39 39 39 39 40 41 42 43 43 47 49 50 50 50 50 50 51 51 ii

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

8

. . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

9

10 AWT 10.1 Layout-Manager . 10.2 Ereignisse (Events) 10.3 Zeichnen . .

11 Applets 11.1 Was sind Applets? . . 11.2 Applet-Konventionen . . 11.3 Einschränkungen von Applets 11.4 Unterschriebene Applets . 11.5 Das APPLET-Tag . . 11.6 Der Appletviewer . .

@ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553

d c Y b a a Y X 575`5`5W
. . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . .

. . .

. . .

. . .

. . .

. . .

. . .

. . .

. . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

2

c 2000 iKu Netzwerklösungen

. . . . . . . . . . . . . . . . . . . . . . . 52 52 53 54 54 54 54 55 13 Nützliches 13. .4 Javadoc . . . . . . . .2 13.1 Was sind Threads? 12. . . . . 13.2 . . . . .Inhaltsverzeichnis 12 Threads 12. .1 Java Runtime Environment 1. . @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 2 U Q R D I q p 3h I f 7Sg£BSFi`ge . .2 Java Runtime Environment 1. . . .1 13. . . c 2000 iKu Netzwerklösungen iii . . . . . . .3 JAR-Dateien . . . .

wie z. wie etwa einer Waschmaschine.Kapitel 1 Einführung Seitdem Java im Jahre 1995 vorgestellt wurde.Unterroutinen können abstürzen.B.B. sondern objektorientiert aufgebaut. die unabhängig von einem Web-Browser laufen. Viele Entwickler schätzen mittlerweile die Eleganz und Plattformunabhängigkeit von Java. Waren es am Anfang hauptsächlich Java-Applets auf Webseiten. Dies sind einige Schlagwörter. sondern auf Fehlerfreiheit an. Java wurde ursprünglich dazu entwickelt. Als Folge davon hat Java viele eingebaute Sicherheitsmechanismen. die Programme fehlertoleranter und weniger fehlerträchtig machen. die sie von vielen Problemen bei der Programmentwicklung befreit. Bei den meisten Anwendungen. Videorekorder und Waschmaschinen.Internetfähigkeit und die Unabhängigkeit vom Betriebssystem und Prozessor. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 2 r r r r r r r r r r r einfache objektorientierte verteilte interpretierte robuste sichere architekturneutrale portable hoch-performante multithreaded dynamische c 2000 iKu Netzwerklösungen 1 . Im Einzelnen: einfach Java ist sehr einfach zu lernen. denn wer will schon eine “nicht behebbare Schutzverletzung” im Schleuderprogramm? Ganz nebenbei eignet sich die Sprache auch für “herkömmliche” Anwendungen. 1. Eine genaue Erklärung dieses Begriffes finden sie in Kapitel 7. ohne dass die Anwendung abstürzt . wobei einige der komplizierteren Eigenschaften von C++ weggelassen wurden. die das ganze recht gut beschreiben. Als Nachteil nimmt man etwas geringere Geschwindigkeit in Kauf. so findet man heutzutage immer mehr Java-Applikationen. da es sich in den Sprachkonstrukten an C und C++ anlehnt. Hier freut man sich über stabile Programme . wie z. erfreut es sich wachsender Beliebtheit und Verbreitung. Konsumentenprodukte. einer Textverarbeitung. zu programmieren.1 Was ist Java? In einem frühen Dokument über die Sprache beschrieb Sun ihr Java als Sprache. objektorientiert Moderne Programmiersprachen sind nicht mehr prozedural. kommt es weniger auf Geschwindigkeit.

architekturneutral Java läuft auf jedem Gerät.B. ein Programm unter Linux entwickeln und ihre Kunden benutzen es unter Windows. sondern in den der JVM. Was ist Java? verteilt Java ist netzwerkfähig. solche Anwendungen leicht und sicher zu programmieren. so dass Java-Programme unverändert darauf laufen können. Bei manchen Systemaufrufen wird man von der Sprache dazu gezwungen den Fehler abzufangen. Im Gegensatz zu anderen Internetsprachen. dass Java-Programme nicht in den Binärcode eines bestimmten Prozessors.B. Mit Java sind sie in der Lage. es spielt keine Rolle.1. Während sie eine Datei herunterladen. hoch-performant Durch die Verwendung von Just-In-Time-Kompilern erreicht Java die Geschwindigkeit von C++ und ist damit auch für rechenintensive Anwendungen geeignet. eines Pentiums übersetzt wird. z. können sie weiter im Internet surfen. sondern einzelne Teile können zur Laufzeit bei Bedarf geladen werden. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 2 c 2000 iKu Netzwerklösungen 2 . ActiveX . z.1. Sie können also ihre Hardware an ihre Leistungsanforderungen anpassen und müssen nicht ihre Programme an die Hardware anpassen.B. Ein Beispiel hierfür ist ein Download mit Netscape Navigator . Dies bedeutet. die Programmierung ist die gleiche. Durch digitale Unterschriften können sie die Sicherheit noch weiter erhöhen. dynamisch Netzwerkverbindungen sind immer zu langsam! Java Anwendungen werden nicht zu Beginn komplett in den Speicher geladen. so dass man sich als Programmierer darüber Gedanken machen muss. wie z. multithreaded Multithreaded ist “multi-tasking innerhalb einer Anwendung”. Sie können z. Sie können sogar einzelne Teile im Betrieb austauschen um z. Für viele Betriebssysteme und Prozessoren gibt es Implementationen der JVM. Dies fängt bei 8-Bit Mikroprozessoren an. robust Java verfügt über Sprachelemente zur Ausnahmenbehandlung. 64-Bit Alpha-Prozessoren bis zu HighEnd-Unix-Servern.B. von Deutsch auf Englisch unzuschalten. für das es eine JVM gibt. interpretiert Java wird in einer vituellen Maschine (JVM) ausgeführt. ein Fehler beim Lesen einer Datei. sicher Bei Netzwerkzugriffen sind Sicherheitsmechanismen wichtig. ob sie Daten von der Festplatte oder aus dem Internet laden. ist es bei Java nicht möglich zerstörenden Code auf eine Arbeitsstation zu schleusen und Zugriffe auf das System können sehr genau kontrolliert werden.B. geht über PDAs wie den PalmPilot über 32-Bit Intel-Prozessoren. portabel Java-Programme laufen unverändert auf jeder kompatiblen JVM.

Tragen sie dort folgendes ein: h – g – '`7• b ‰ eC a ‚ a a Y X W ‰ X s wC w v u t s8 W‘  d c Y b a a Y X W  † d c Y b a ‚ v ‰ t c ‚ Ff“0S``7``s '`gd£5g5)T)’S`55B57575S557`5Fˆ7`a „ c ” ‚ a ˜‰ @ — ‚ v a  55`™'…55``'u p – •C 4 p ‰ X s ‚ ” t s xC w v u t s8 W‘  d c Y b a a Y X W  † d c Y b a ‚ v ‰ t c ‚ ``y5gs '`5g5S“£5g5)T)’S`55B57575S557`5Fˆ7`a „ Y ‡ Y t s8 W † d c Y b a a Y X W c ‚ `5P5)05S557`577…7`a xC w v u t s8 y§7P5)W Als Installationsverzeichnis geben Sie bitte diesem Kapitel nicht immer! Y ‡ Y t s8 55B5)W 2 e Q ED Ff• d c Y b a ‚ v‰ 557`5Ft ˜ s F‰ 5x „ c 5Y r r „ r r das Java-Development-Kit (JDK) und den Jikes installieren ein Java-Programm kompilieren und ausführen Program Files (Programmdateien) Library and Header Files (Bibliotheken) an. Installationsprogramm starten Die minimale Installation umfasst Der erste Befehl wird für das Finden der Java-Klassen. Es ist kostenlos erhältlich und darf auch kommerziell genutzt werden. Zur Installation unter Windows gehen sie wie folgt vor: 1.1 Installation des JDK Das Java-Development-Kit von Sun beinhaltet alles Notwendige. Das JRE ist deutlich einfacher zu installieren als das JDK und wird im Abschnitt 13.1 verwenden wollen. so muss der folgendermaßen lauten: Wenn sie Java-Programme nur verwenden aber nicht schreiben wollen. wie sie 2. JDK in den Pfad aufnehmen Starten sie “Sysedit” mit “Start . 4. brauchen sie nicht das JDK zu installieren. ist ein etwa 30x schnellerer Ersatz für den Javakompiler von Sun.Kapitel 2 Installation In diesem Kapitel lernen sie. das sie mit ihren Programmen zusammen kostenlos ausliefern dürfen. Starten sie Windows neu C W ‚ ƒ ‚  c € Y s8 S55B'`PyW 2.Ausführen” und gehen sie dann in die Datei . JIKES installieren Starten sie das Jikes-Installationsprogramm und geben sie dort als Zielverzeichnis an. Erstellen sie das Verzeichnis 5. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen C w v u t s8 §§5P5yW 3. der zweite für Jikes benötigt und der dritte erleichtert die Arbeit mit einer DOS-Eingabeaufforderung. sonst stimmen die Pfadangaben in 3 . sondern er reicht das Java-Runtime-Environment (JRE). Wenn sie das JDK 1.1 ausführlich beschrieben. um Java-Applikationen und -Applets zu schreiben.

2.class’ sucht. 5. Sie dürfen nicht eingeben. eine Fehlermeldung ausgegeben. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen h – g – 'S`5• e e – i 5'7Ph C e Q ED '™f• Auch hier auf die Schreibweise achten! Alternativ können sie statt zen um den Geschwindigkeitsunterschied zu sehen. Öffnen sie den Editor und geben sie folgendes Programm ein. Achten sie auch hierbei auf die Schreibweise! Wenn sie ’Notepad’ verwenden. die Klasse aber ’HelloWeb’ heißt. Speichern sie die Datei im Verzeichnis unter dem Namen . kompilieren und ausführen: 1. . Hierbei wird der Quellcode auf syntaktische und semantische Fehler überprüft und ggf.2 Hello Web! Sie werden jetzt ihr erstes Java-Programm schreiben. die den ByAuf der Festplatte findet sich nach dem Kompilieren eine Datei mit Endung tecode enthält und der von der JVM ausgeführt werden kann. Kompilieren sie ihr Programm Sie erhalten die Ausgabe: 2. Achten sie dabei auf die Groß/Kleinschreibung! 2. da sonst die JVM nach einer Klasse mit Namen ’HelloWeb. die gestartet werden soll. Hello Web! 2. geben sie als Dateityp “Alle Dateien” an! 3. der Textdateien mit Java-Quellcode in Bytecode für die JVM umwandelt. Hierzu muss man dem Programm den Namen der Klasse angeben.3 Was ist passiert? Jikes ist ein Kompiler .2. Starten sie ihr Programm den Y ‡ Y t s8 55B5)W – g – •C h Q l q i i Q `7y9P'B75Sd ‚ ‚ ‘ w | h Q l q i i Q d| q I i 4 I D p 6C 4 G qC o Q 4 e f €9B'~75SS&}0g'5™iS{SPyz™g`a m w g s p – vt s ID p 4 a q ID – o U D q g h D 4 – 4 e h D i h G yx75`j“uS™i5PrT™fipgfSk7i`Fj7'f576 m h Q l q i i Q d e e – i h h D i h G nP'P77Sk5'``j7'f756 Y ‡ Y t s8 57P5)W e e – i C h Q l q i i Q d – g – 5'7Ph 9P'B75SyP5• — ˜ — Š• ”Ž “’ ‘ ‘ Ž   Ž Œ Š ‰ ‡ ˆ ‡† …„ g™™–¥€B€™FgBrBBdg‹Bg&€g{£ƒ benut- ”Ž “’ ‘ ‘ Ž  — ˜ — Š ‰ ‡ ˆ‡† …„ €B€™FgB™F™™‹Bg&€g{£ƒ 2  h Q l q i i Q uP'~755d – g – `7• 4 . Starten sie eine DOS-Eingabeaufforderung und wechseln sie in das Verzeichnis 4.

die bei Programmstart aufgerufen wird.) abgeschlossen werden.1 Ein Java-Programm analysiert Schauen wir uns noch einmal das Beispiel aus dem letzten Kapitel an. wie man im Beispiel sieht. kompilieren. Ein Stück Programmcode zwischen zwei geschweiften Klammern heißt Block. die in Zeile 4 endet.1: Textausgabe c 2000 iKu Netzwerklösungen 5 . dass sich hier die öffentliche Klasse “HelloWeb” befindet. indem sie ein Pluszeichen (+) dazwischenschreiben. In Zeile 2 beginnt eine Methode . Auf diese Weise kann der Kompiler notwendige Klassen finden und ggf. die den Text “Hello Web!” ausgibt.1. dass der Dateiname dem Namen der Klasse entsprechen muss und jede Klasse muss in einer eigenen Datei stehen. Wenn Sie keinen Zeilenvorschub haben wollen. Sie können mehrere Texte ausgeben. bzw. Methoden werden in Kapitel 6 erläutert. Blöcke können geschachtelt werden. jetzt müssen sie nur wissen. müssen sie verwenden. Es ist üblich nur eine Anweisung pro Zeile zu schreiben. Die Methode gibt den Parameter als Text mit Zeilenvorschub auf der Standardausgabe aus. obwohl Zeilenvorschübe. Es handelt sich hierbei um einen Methodenaufruf mit einer Zeichenkette als Parameter. Alle Anweisungen in Java müssen mit einem Strichpunkt (. Hier ist nur wichtig. Es ist üblich den Code innerhalb eines Blockes einzurücken. sie dienen nur der besseren Lesbarkeit. die Shell unter Unix ist. dass die Methode ist. Die öffnende geschweifte Klammer gibt den Anfang der Klassendefinition an. Tabulatoren und Leerzeichen vom Kompiler als “Whitespace” ignoriert werden. Die erste Zeile gibt an.Kapitel 3 Erste Schritte In diesem Kapitel lernen sie 3. die schliessende in Zeile 5 das Ende. wobei Zahlen automatisch in Zeichenketten gewandelt werden: @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 ‚ ž ‚ ‘ w | h Q l q i i Q d | q I i 4 I D p 6C 4 G qC o Q 4 e f y€9B'~75SS&}0g'7™iS–uSPyœFgPa x m w g s p – vt s ID p 4 a q ID – o U D q g h D 4 – 4 e h D i h G yx75`j“uS™i5PrT™fipgfSk7i`Fj7'f576 m h Q l q i i Q d e e – i h h D i h G 6 …P'P`5Sp5'``j7'f75šw › ¯ ® ° ¬ « — ˜ — † « ª © ‘ ¡ © Œ ¨ ¦• ¡ ¥ ’• £ Ž ¡    ~™­5g™€¢™§¢BBdBB§§Bd{¤dg¢P&Ÿ ¯ ® «  ¨ ¥ « ¬ « — ˜ — † « ª ¡ © Œ ¨ ¦• ¡ ¥ ’• £ Ž ¡    S™`PB™y­5F™&¢r£BdBB§§Bd{¤dg¢P&Ÿ I i 4 ID p 6C 4 G qC o Q 4 e f BS&iS{u5PyzFSg`a ID – ™fio 2 4 I D p 6C 4 G qC o Q 4 e f S™iS–uSPyœFgPa r r r r Details über das Beispiel des letzten Kapitels die Datentypen von Java kennen wie sie Variablen definieren und benutzen Kontrollstrukturen kennen Beispiel 3. In Zeile 3 steht eine Anweisung. Klassen werden im Kapitel 7 genauer erläutert. was normalerweise die DOS-Eingabeaufforderung unter Windows. damit man leicht die Länge des Blockes erkennen kann.

Damit bezeichnet man die ganzen Helferlein. die ohne einen Browser lauffähig sind. sollten sie eine Linie von links oben nach rechts unten erhalten. Man kann es sich so vorstellen.2: HTML-Datei c 2000 iKu Netzwerklösungen – g – •C w i Q D 6e D P5y5B£F7'Q Beispiel 3. Browser/Appletviewer starten Es empfiehlt sich den im JDK enthaltenen Appletviewer an Stelle eines Browsers. Natürlich brauchen sie noch eine HTML-Datei.B.erstellen können. da nach jeder Änderung eines Applets der Browser neu gestartet werden muss und der Appletviewer hierbei deutlich schneller ist. Eine Linie Das erste Beispiel zeichnet nur eine einfache Linie auf den Bildschirm und bietet ihnen die Möglichkeit. z. sich mit Applets vertraut zu machen. Später werden sie lernen. da mit ihnen vieles leichter zu erklären ist. Unter Java ist ein Applet eine kleine JavaAnwendung.so wie das Beispiel aus dem letzten Kapitel . Der Entwicklungszyklus dieser einfachen Beispiele ist immer der gleiche: 1.1: Eine Linie e e – i C 4 Q i 6 6 Y e p G 5'7Ph u`7'57g57v ‚ ‘ w §·µ µ µ Fw q Q D ID ¤B£™i ‚ ¶ r´ ž m } w q I Q ´ 53 h D Q R U D q k´ &0B'¤žF7'S³gfg I m 4 Q i 6 6 Y e p G v e U I Q 4 ² Q w i Q D 6e D ³``f57gfS7kfB5`±fSB£F`fQ 5'``j7'f756 e e – i h h D i h G „ „ ‘ £ ¡ ¿• ½ ‘ Ž Œ  Œ Ž ¼ ¨ Ž ¾ Ž Œ ˜ ¡ Ž ‘ ¦ ¦ — ‰ ‡ ˆ ‡ † …„ 5¢B§S`g&7¦ FBB‹™B€&PF™&`F€±BF™€g{iƒ — ˜ — Š• ½ ‘ ŽŒ  Œ Ž ¼  Ž Œ Š ‰ ‡ ˆ ‡† …„ g™™{S`g&7¦ FBB}gPdg‹BF™€g{iƒ – g – P7t 2 ¸ ¸ ¸ ¸ ¸ ¸ ¸ 6 . wie sie eigenständige Anwendungen .2. die das Applet enthält. Ein erstes Applet 3. wie z.2. was mit Java möglich ist. Im Abschnitt 11. die meist auf einer Webseite läuft. als wenn ein Programmfenster (ohne Rahmen) in eine Seite eingebaut wurde. da sonst die Beispiele nicht funktionieren werden. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 i£oB4S{§wSQB£6™7DfQ 3C i D e „ º X ¹ c d S55B@ º — u '5P @ ºc5‚PXSb5b5YB@ ¸ Sµ5µ †SS37™DfQ'3kµ xS†374`UgD£A»|'e5S–7Ph C§iSQB£6™7DfQ |i7QSU7Ph…57S57Y º 4 s e i w D e † q c ‚ X b b„ ž „ › º — u '5P º'555B@ „ u Y ‚ d º'7XS™icP@ ¸ wjiSgD£6F7DfQ º'‚7XSc™‰ic ¸ ‚ c‰ Q e „ º u Y ‚ '557d º X ¹ c S57d Beispiel 3. stellen Applets nur einen kleinen Teilaspekt dessen dar.2. für alle weiteren Beispiele können sie diese HTML-Datei als Vorlage nehmen. zu verwenden.3. Netscape . um die Uhrzeit am PC einzustellen. dass sie HTML können. Programmcode kompilieren 3.B. Programmcode schreiben/ändern 2. Für dieses Beispiel schreiben sie Achten sie bitte unbedingt auf Groß-/Kleinschreibung.5 finden sie eine ausführlichere Erläuterung des verwendeten HTML-Tags. Kopieren sie diese bitte in ihrem -Verzeichnis. Obwohl es vielen anders vorkommt. Der erste Teil dieses Kurses wird mit Applets arbeiten. Es ist für diesen Kurs nicht wichtig. da es sonst nicht funktioniert! Wenn sie alles richtig gemacht haben.2 Ein erstes Applet Ein Applet ist eine „kleine Anwendung (Application)”. Um den Einstieg so leicht wie möglich zu gestalten. finden sie auf der Kurs-CD eine Datei namens .

alle Datentypen (bis auf ) sind vorzeichenbehaftet.4 Variablen . Um eine Linie zu zeichnen. Die Anweisung zeichnet also eine Linie vom Startpunkt 5 10 zum Endpunkt 50 60 .alle anderen Koordinaten kann man daraus bestimmen.40239846e-45 bis 3. die mehrere integrale Datentypen und andere Klassen. diese also die enthaltenen Werte verändern können. sowie die dazugehörenden Methoden enthalten. Klassen werden später in Kapitel 7 detailliert behandelt.B. fehleranfällig und man muss sie für jedes Rechteck neu eingeben. wobei immer zuerst die X-Koordinate angegeben wird. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen p – 3 `'Fh  Á À Q e i – PSSSà U Q I sD e I 77FSi7G Ä Q G p '774 2 w ·µ Ä p – 3 `'™h  Á À µ µ Fw q Q D ID ¤B£™i ¶ r´ }´ ž ´ ¤ž Q i h G q 7'5PSU 4 – q i P57à p – 3 `'Fh s I q SP7i 4 I S™D 4 p q 3 7`'Fe Q 4 f 5Sh I – Q i q q P5`S5'h 7 . die der linken oberen und der rechten unteren Ecke . Besser wäre es. wobei als Zeichensatz Unicode verwendet wird. ein Zeichen zu enthalten. von ’ u0000’ bis ’ uffff’ (0 bis 65535) 32-bit.3.und ein Endpunkt angegeben werden. wobei sich der Startpunkt 5 Pixel rechts und 10 Pixel unterhalb und der Endpunkt 50 Pixel rechts und 60 Pixel unterhalb der linken oberen Ecke befindet.94065645841246544e-324 bis 1.79769313486231570e+308 Tabelle 3. IEEE 754. Datentypen Java-Grafiksystem Die folgende Beschreibung wird etwas mathematisch.ein Rechteck Als nächsten wollen wir ein Rechteck zeichnen.1: integrale Datentypen In Java gibt es das Schlüsselwort nicht. Klassen integrale Datentypen Java kennt acht verschiedene integrale Datentypen: 1 Bit. 1. dass Klassen per Referenz (by reference) an Methoden übergeben werden.3 Datentypen Java kennt zwei verschiedene Datentypen 1. ist aber recht intuitiv und sollte mit normalen Schulkenntnissen leicht verständlich sein. Klassen Klassen sind komplexere Datentypen. integrale Typen 2. Der Typ ist dazu gedacht. wofür vier Linien notwendig sind: von links oben nach rechts oben. ein standardisierter Zeichensatz. Die X-Achse geht nach rechts und die Y-Achse nach unten. von -2147483648 bis 2147483647 64 Bit. mit dem sich die Schriftzeichen aller Sprachen darstellen lassen. 3. 4. von -32768 bis 32767 32 Bit. z. Die Angabe dieser Koordinaten ist mühselig. Um ein Rechteck genau zu bestimmen. muss ein Start. von -9223372036854775808 bis 9223372036854775807 16 Bit. wenn man nur die wesentlichen Angaben zu machen braucht und der Rest automatisch geht. benötigt man nur zwei Koordinaten.40282347e+38 64-bit. IEEE 754. Das Java-Grafiksystem verwendet ein kartesisches Koordinatensystem mit Nullpunkt in der linken oberen Ecke.3. Punkte in diesem Koordinatensystem sind durch ihre Xund Y-Koordinate genau bestimmt. von rechts oben nach rechts unten usw. Hier nur soviel. 3. wahr ( ) oder falsch ( ) 8 Bit. von -128 bis 127 16 Bit. dass der Endpunkt jeder Linie gleich dem Startpunkt der jeweils nächsten Linie ist. Wenn man das ganze programmiert fällt auf.

der sich über einen Namen . Variablendefinitionen müssen ebenfalls mit einem Strichpunkt abgeschlossen werden.und Endpunkte des zu zeichnenden Rechtecks lassen sich jetzt durch diese Koordinaten genau beschreiben.ein Rechteck Jede dieser Koordinaten ist durch seine beiden Werte x und y bestimmt. d. so können sie diese mit Komma getrennt angeben. In diesem Skript werden Variablen meistens in der sogenannten „ungarischen Notation“ angegeben. statt ) beruhen. Diese erleichtert die Suche von Fehlern.4. als auch Methodennamen. Variablen . Innerhalb eines Blocks muss jeder Variablenname eindeutig sein. in dem sie definiert wurde.3. Variablen in Java enthalten entweder einen integralen Datentyp oder eine Klasse. ohne dass der genaue Wert der Koordinate bekannt sein muss. Als Variablennamen können sie beliebig viele Unicode-Zeichen verwenden. Durch Verändern dieser Koordinaten kann man dann jedes beliebige Rechteck zeichnen.h. . Damit Java den Typ einer Variable kennt. insbesondere also bei . muss er bei der Definition durch Voranstellen angegeben werden. die von anderen Klassen aus angesprochen werden. Variablen sind „benannte Speicherbereiche”.1: Variablendefinitionen Ein Fehler in Jikes erlaubt es zur Zeit nicht. Speicher im Computer. nennen wir sie x1 y1 und x2 y2 . Lokal verwendete Variablen und Methoden sind davon nicht betroffen. Zeiger auf Variablen (Pointer) gibt es in Java nicht und damit auch keine Zeigerarithmetik. Eine Variable ist innerhalb des Blocks bekannt. eine Variable hat immer den gleichen Datentyp.h. Zuweisungen mit anderen Datentypen erzeugen (meistens) einen Fehler.ansprechen lässt. Initialisierung Variablen dürfen bei ihrer Definition gleich mit einem Wert vorbelegt werden. Umlaute in Variablen oder Methodennamen zu verwenden. Java ist streng typisiert. Variablen lassen sich überall dort verwenden.h. d. Beispiel 3.wie z. sowohl Variablennamen. die auf falschen Typen (z.4. d. Wollen sie mehrere Variablen vom gleichen Typ haben. benötigen wir Variablen . Beispiel 3. dies muss bei jeder Variable einzeln erfolgen. Die Linien gehen Um das ganze in Java zu schreiben.4. wobei sie nicht mit Zahlen beginnen dürfen und natürlich “Buchstaben und Zahlen” verwenden müssen.2: Variablendefinitionen @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen w §² 4 – q i P57à ‘ §gi`7U w 4 e A ¹ ¶ ‘ w§4geiA`¹7U sP–p545p`SPU i7PPSy7'5PSU Q h Å Q o o G a U Q i h G q ¶ ´ ‘ f ´ ² §f §³S™D w w ² 4 I ´ ’…S™D › ´ › ´ ‘ – 4 I 4 I S™D ´ µ5µyCTµˆyP55`SPU i7PPSy7'5PSU † s – p 4 p Q h Å Q o o G a U Q i h G q ‘ f ² …k´ §f nk§³S™D µ † w µ † w ² 4 I ´ › ´ › ´ wq Q D ID &¤B£&'i 2 Á Á Á Á Á Á Á Á von x1 von x2 von x2 von x1 y1 y1 y2 y2 nach x2 nach x2 nach x1 nach x1 y1 y2 y2 y1 Á Á r r r r 8 . sich in mindestens einem Zeichen von allen anderen Namen unterscheiden.B. Da wir zwei Koordinaten benötigen. der den Typ der Variablen angibt.B. mit einem Präfix. Dies geschieht durch ein Gleichheitszeichen gefolgt vom gewünschten Wert. Die Start. wo man einen Wert auch direkt angeben könnte.

keinem anderen Datentyp zuweisen.2). @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen I – Q i q q P77S5'h s I q SP7i 4 I 5™D  w x Ï@ ž 4 I Q 4 f 5™D 5Sh I – Q i q q P77S5'h w Î – † Ðυ³– x Í – † yˆˆ³– ‘ C Ó Ò ‘ 55Ñ ž Ó Ò Ñ ¶ 5557ž 2 ¯ ¬ — É Ì È i°±™™±Ëp” ¯ ½ ¬ — È SË™±— ¯S®Ë½~¬ËÊ(ª…‹™±— É ° È ¯ ° È i™±— ¯ ” Æ — ¡ © Çi±BdŒ Beispiel 3. indem sie nach dem Variablennamen ein Gleichheitszeichen und dann den Wert schreiben. 3. aber nicht umgekehrt. In allen Kontrollstrukturen werden Ausdrücke auf ihren Wahrheitsgehalt geprüft. die Umwandlung mittels Casting zu erzwingen. dann erfolgt die Division auch ganzzahlig abgerundet.3. d. was man tut. sowie Klammern zur Verfügung. gibt es Kontrollstrukturen. 3. Sie können den zuzuweisenden Wert auch aus verschiedenen Werten oder Variablen berechnen. Multiplikation (*) und Division (/). Casting Variablen unterschiedlichen Typs kann man nur bedingt einander zuweisen.oder einer -Variablen zuweisen. das ein Rechteck zeichnet.2: Casting Der Kompiler geht dann davon aus.5 Zuweisungen Variablen können sie beliebige (gültige) Werte zuweisen.h. Hierbei gibt man den Zieldatentyp in Klammern vor dem Quelldatentyp an: Beispiel 3.einen kann man damit immer noch nicht umwandeln.3). um eine bestimmte Reihenfolge zu erzwingen (siehe Beispiel 3.) dividieren. die Modulo-Operation (%).6 Kontrollstrukturen Um den Programmfluss zur Laufzeit zu verändern.5. Für verschiedene häufig vorkommende Zuweisungen gibt es Abkürzungen Wenn sie ganzzahlige Variablen ( . Dagegen kann man immer einen Datentyp in einen mit “höherer Genauigkeit” zuweisen.6.B. usw. da man dabei Daten verlieren könnte.5. Ihnen stehen mehrere Operatoren zur Verfügung. um Ausdrücke zu schreiben (Tabelle 3. mit denen sich das Verhalten in Abhängigkeit von Variablen verändern lässt. Zusätzlich können sie mit dem Ausrufungszeichen ( ) eine Bedingung invertieren. Es funktionieren jedoch nur “sinnvolle” Casts . Sie können Klammern verwenden. Der Typ lässt sich z.5. Java lässt es jedoch zu. wobei Java die Regel “Punkt vor Strich” beachtet.1: Zuweisungen ‘ U w 4 IDq † TpiS™&Õ~D ‘ i w 4 IDq † ¤iS™&Õ~D ‘ D 4 I ÔS&D x ÐÏy7f5P5U w † U Q i h G q  x › І w i s I q nSP`i  › Q i h G q 7f7PSU Î Î 5`– r x † Í …Bˆ– r entspricht entspricht 9 . ergibt . Man kann daher eine -Variable einer . Subtraktion (-). Zuweisungen Übung Schreiben sie ein Programm. Sie können mehrere Ausdrücke mit logischen Verknüpfungen zusammenfassen (siehe Tabelle 3. Hierzu stehen ihnen die 4 Grundrechenarten Addition (+).1). dass man weiß.

sonst ( ) mache etwas anderes. müssen sie diese in einen Block schreiben. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen E – Q p `5SSh ¯ ÊÊÌ È ™F±™— ¯ ® « â © ¥ ¡ Œ Ž ¨ à  ¨ Ž ” á  ¿ à Œ Ž ¨ Ž ¼ « ª © ‘ ¡ © Œ ¨ ¦• ¡ ¥ ’• £ Ž ¡    kSBF€€BgB¿ FP™P™d7dFgg™B)r¢gBdPBߧB¢{1dg€P€Ÿ Þ ® ÊÊÌ ‰ — ª Ý rp™FËË$£€Œ -Schleifen Q e i Q H à PSSBgD Beispiel 3. -Schleifen Die -Schleife unterscheidet sich von der -Schleife nur dadurch. gleich kleiner als kleiner.6.3.3: logische Verknüpfungen Beispiel 3. auch die folgenden.2: Vergleiche Tabelle 3. Hinter und darf jeweils nur eine Anweisung stehen.6. In einer -Schleife werden die Anweisungen solange ausgeführt. wie die angegebene Bedingung erfüllt ist. dass die Bedingung erst geprüft wird.2: à gD Q i D 3 7P£5A Q e i PSQ ¯ Ü È i˙— ¯Ë奩 B™`yr¢gBdPBߧB¢{1dg€P€Ÿ ® « Ú Œ Ž ‘ « ª © ‘ ¡ © Œ ¨ ¦• ¡ ¥ ’• £ Ž ¡    Þ Ž‘ ‹&FgŽ ã ¯ ÊÊÌ È ™F±™— ¯ ® « Ú æ ’ ¨ â « ª © ‘ ¡ © Œ ¨ ¦• ¡ ¥ ’• £ Ž ¡    Ë姀BFår¢gBdPBߧB¢{1dg€P€Ÿ Þ ® ä̽ ‰ — ª Ý r~&¢pË$£€Œ ®pÜdpÛË$ª™rÙF…®j­Ë$ª ½ — Ú Ù ” ‰ — ®~°ËFÈË(ª}Fم®j”­Ë$ª È — Ù ‰ — ” ‰ ؋— ° ÈÈ ™F±— 2 ¯ Ü È — ® Ü Û — ª Ý ˱Ø~™Ë$£€Œ × 5× Ö 5Ö logisches Und logisches Oder Q G ID 4 I q '5&iSPPh † ¸ ¸ † `º º † V † 5† Tabelle 3. nachdem die Anweisungen ausgeführt wurden.1: logische Ausdrücke 10 Gleichheit Ungleichheit größer als größer. Kontrollstrukturen Bedingungen Die einfachste Kontrollstruktur ist eine Bedingung: Wenn ( ) etwas wahr ist. wobei der -Zweig auch weggelassen werden kann.6. Alle Schleifen. dann mache etwas. gleich Q e i BSQ Q i D 3 7Pi5A Q i D 3 AH q `P£5™'SU à gD Q e i PSQ Q i D 3 AH q 7B£5™f5U ã ã Q i D 3 7P£7A . wollen sie mehrere Anweisungen ausführen. der Befehl springt wieder zum Schleifenanfang. können mit abgebrochen werden.

der einen Integer liefern muss. kann man dies benutzen. sondern nur ein weiterer Einsprungpunkt. sondern die Ausführung wird nach dem fortgesetzt. Abhängig vom Wert dieses Integers wird dann in den entsprechenden Zweig gegangen. Kontrollstrukturen -Schleifen vor dem ersten Ausführen der Schleife nach jedem Schleifendurchlauf ausgeführt werden. denn ein weiteres bedeutet nicht das Ende der Verzweigung.6. um mehrere Integer abzudecken. Wie in Beispiel 3.6. Achten sie immer darauf alle Zweige mit einem zu beenden. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen QP'Bh e – Q e – P'Bh 4 i G – à Q PfPS`SU 3h 4D A FF£™e E – Q p `5Sh p q PSà E – Q p `7Sh Q e – P'Ph 3h 4D A FFiFe ã ¯ ® — ª © ‘ ¡ © Œ ¨ ¦• ¡ ¥ ’• £ Ž ¡    pè¢gBdPBߧB¢{1dg€P€Ÿ Þ ® ¬¬— ¯ ½ Û — ¯ ½ È — ª ¨’ }pFF$iÜ p‹SË(£&BÝ ã ¯ ¬¬ iF™— ¯®p—誩¢‘g¡B©dŒPBߧB¢{1dg€P€Ÿ ¨ ¦• ¡ ¥ ’• £ Ž ¡    Þ ® ܽ Û — ª Ž‘Œ ¿ }~dk‹$i&™7™¾ ¯ ½ È 5Ë— Q i D 3 `P£5A Q e – P'Bh 2 4 i G – à Q BfPS75U Q e – PPh p q `Sà Eine -Schleife ist eine -Schleife mit zwei zusätzlichen Anweisungen. so wird der Zweig ausgeführt. so gibt es keinen Fehler. bietet sich die -Anweisung an. müssen sie den Befehl angeben.3: ¯ Ü S®pd½~Û˗êi™™`™¾ ã ª Ž‘Œ ¿ ¯iF™— ¬¬ ¯®p—誩¢‘g¡BdŒPBߕ§B¥¢{•1£dg¡€P€Ÿ © ¨ ¦ ¡ ’ Ž   Þ Ë’ é ¯ Ü È ±Ë— ¯ ÊÊÌ Èç — ® ÊÊÌ ‰ — ª Ž‘Œ ¿ ™F‹¢~ØpFF™‹$i&™7™¾ ¯ ÜÜ ½ È iFFÜ Ë— r r p q `5à r r 11 .6. die Beispiel 3. Um eine Verzweigung zu beenden. Hier können sie einen Ausdruck angeben.6 gezeigt. Die einzelnen Zweige werden mit angegeben.6.3. entspricht Verzweigungen Wenn sie viele Fälle zu unterscheiden haben. Sollte keine der Zahlen bei zutreffen.5: Q i D 3 AH q 7P£5&fSU Beispiel 3. Fehlt der -Zweig und trifft kein zu.4: Q i D 3 7B£5A ¯ ® ÊÊÌ ‰ — ª Ž‘Œ ¿¾ ¯ ÊÊÌ Èç — pFF™‹$i&™7™(™F±¢p™’ é ¯ ÜÜ ½ È iFFÜ Ë— ã ¯ ¬¬ iF™— ¯®p—誩¢‘g¡B©dŒPBߧB¢{1dg€P€Ÿ ¨ ¦• ¡ ¥ ’• £ Ž ¡    Þ ® ܽ Û — ª Ž‘Œ ¿ }~dk‹$i&™7™¾ ¯ Ü È ±Ë— Beispiel 3. Die -Anweisungen verstehen sich als Sprungadressen.6.

lässig und führt zu einem Fehler! Einzeilige Kommentare sind hingegen erlaubt: c 2000 iKu Netzwerklösungen @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 Beispiel 3.Es gibt zwei Arten von Kommentaren. d.7. Kommentare sind speziell markierte Textstellen.6. ihr Programm automatisch zu dokumentieren.7. Mehrzeilige Kommentare dürfen nicht geschachtelt werden. eine Konstruktion wie ist unzu- @ Í I q D 4 E G p 4 e I q v Q e Q D U I – o 4 3h G – p h q `…BBi5S`5giPSjB'B…Pip5FiP5jPe PP57i I Q e e – I Q à G – i I Q i D Q e Q p Q p 3 Q o p Q h ó Q p – 4 I Q o oq v I – o i i D l Í BSP7nB7Pf5jS`SPP'5kS`SP5FÏP´ i‹5B£~S@ Q i D Q e Q I i Q R ID Q Q ID Q p Q h ó p – 4 I Q o oq v ID Q 4 e D e – u @ 7Bf5y'gSS™'Ï™fÏ`'7`SBi5F…™f…g`…j7@ Nicht jedes Stück Programmcode ist auf Anhieb verständlich.4 lernen sie. ã ¯ —Ž¨ €Fgg” ¯S®™«Sâ™gk™FBF€P¢PFFyr¢gBdPBߧB¢{1dg€P€Ÿ — ì ¨ Ž ¡ © © —  Ž ” © ò« ª © ‘ ¡ © Œ ¨ ¦• ¡ ¥ ’• £ Ž ¡    „ ¡‘ ¥—Ý §&`¢g™Ž é ¯ —Ž¨ €Fgg” ¯ ® « © Ž © Ž ¿ à ’ “ « ª © ‘ ¡ © Œ ¨ ¦• ¡ ¥ ’• £ Ž ¡    ±5Ž é €P€BdgP)r¢gBdPBߧB¢{1dg€P€Ÿ „ ñ Ž — £Ë&B&à „ Ê Ž — i±&B&à ¯ —Ž¨ €Fgg” ¯ ® « ⠗ ¡ Œ Ž ¨ ð « ª © ‘ ¡ © Œ ¨ ¦• ¡ ¥ ’• £ Ž ¡    ËS™g¢BgFår¢gBdPBߧB¢{1dg€P€Ÿ „ ï Ž — §™&B&à ¯ —Ž¨ €Fgg” ¯®±S&g€P™BF¢P)r¢gBdPBߧB¢{1dg€P€Ÿ « ⠗ ¡  ¨ Ž © © ’ î « ª © ‘ ¡ © Œ ¨ ¦• ¡ ¥ ’• £ Ž ¡    „ ° Ž — £Ë&B&à ¯ —Ž¨ €Fgg” ¯SË'¿dgP¾&F€Œ`)r¢gBdPBߧB¢{1dg€P€Ÿ ® « à ’ ¡ ¡ í « ª © ‘ ¡ © Œ ¨ ¦• ¡ ¥ ’• £ Ž ¡    „ Ì Ž — i±&B&à ¯ —Ž¨ €Fgg” ¯ « â ¡  Ž î ª ‘ © Œ ¨ ¦• ¡ ¥ ’• £ Ž ¡    S®ËS™—g€`©€&Œ`)«r©¢g¡BdPBߧB¢{1dg€P€Ÿ „ ½ Ž — ~&B&à ¯ —Ž¨ €Fgg” ¯ « —¡ ’ « © ®ËSâ™FB©¢Pí)rª¢‘g¡B©dŒP¨BߧB¢{1dg€P€Ÿ ¦• ¡ ¥ ’• £ Ž ¡    „ Ü Ž — £Ë&B&à Þ ® â—ìŒ ª ¿à ¡Œ ¾ }y™F€ëdB€`¢ 3.h.7 Kommentare Beispiel 3. wie sie spezielle Kommentare dazu einsetzen können.1 versteht: Im Abschnitt 13. Mehrzeilige einfassen.1: Q p – 4 I Q o oq S`SP5Fv Einzeilige Kommentare werden mit Kommentare muss man in und vom Kompiler ignoriert.6: 3h 4D A FF£™e 3. die man am schnellsten an Beispiel 3. Deshalb schreibt man Kommentare in den Quellcode.7. alles zwischen diesen beiden Symbolen wird 12 2 @ PÍ I Q U I Q Q 4 e p Q p Q U i i q e p QD P5Pjgf`…`Sy5SP·`g£3 @ Í Q 4 e 3h ô I p Q U p Q D 3 U I G Í PÏgi™''³`SÏ`B£y7~@ p – 4 I Q o oq v ID Q 4 e D p QD 3 Í PSPi7Fϙf…g7Ô`g£~S@ @ PÍ @ 5@ Í @ . die vom Kompiler ignoriert werden. die diesen beschreiben.2: Falscher Kommentar eingeleitet und gehen bis zum Zeilenende.7. Kommentare Beispiel 3.

BLAU. *Zeichnen sie ein Gitter mit 10 auf 10 Linien. HELLGRAU. 3.3: Korrekter Kommentar nicht 35. 9. *Erweitern sie das obere Programm so. sind Breite und Höhe gleich. Schreiben sie ein Programm. das die Quadrate der (natürlichen) Zahlen von 1 bis 10 ausgibt! (das Quadrat einer Zahl berechnen sie am einfachsten. das eine Multiplikationstabelle für die (natürlichen) Zahlen von 1 bis 10 ausgibt. Welchen Datentyp brauchen Sie. *Schreiben sie ein Programm. GRAU. dass statt einem Kreis jeweils 5 konzentrische Kreise mit unterschiedlichen Radien gezeichnet werden (”Zielscheiben”). Als Farben stehen ihnen SCHWARZ. In den folgenden Kapiteln lernen sie mehr über die Vorteile objektorientierter Programmierung. ORANGE und ROSA in genau dieser Schreibweise zur Verfügung. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen w Î x q I i 4 ID p 6C 4 G qC o Q 4 e f …ë’BS&iS{u5PyzFSg`a 3. Mit können sie ein Oval zeichnen.8 Übungen 1. Erweitern sie das obere Programm so. dass der 3.8. ROT. Wir kann man erreichen. Welches Zeichen muss nach jeder Anweisung stehen? 2. DUNKELGRAU.7. Mit können sie die Farbe des Zeichenstiftes für alle folgenden Zeichenoperationen umschalten (”Stiftwechsel”). 8. 7. Netzwerkzugriff und Grafikausgabe. Übungen 3. dass stattdessen 35 ausgegeben wird? 5. GRUEN. MAGENTA.3.9 Zusammenfassung In diesem Kapitel haben sie gelernt was das Beispiel im vorherigen Kapitel bedeutet welche Datentypen Java hat wie sie Variablen definieren und benutzen welche Kontrollstrukturen sie benutzen können Sie sind jetzt in der Lage kleinere Programme selbst zu schreiben. GELB. Schreiben sie ein Programm. 10.200 darzustellen? 4. CYAN. also 6. Kreis gelb gezeichnet wird. WEISS. um die Zahlen von 1 . sondern 8 aus? ´ Q 4D Q p ™fSh 2 I Í ~xI I w C C C q Q h p – r55…1'7`Sà ´ f ´ ² q i – g Ø1SPq r r r r 13 . das 10 Kreise nebeneinander Zeichnet. indem sie die Zahl mit sich selbst ) multiplizieren. so entsteht ein Kreis. Warum gibt ž w Q 3 Q q n'B5'3 @ Í Q U I ‚ e – U p Q D 3 @ `nS7~'S³PB£5@ p Q sD i D Q R ID Q ID Q p Q D 3 @ `™'PfSS™fn™f…`Biy5@ p – 4 I Q o oq v ID Q 4 e D p QD 3 Í PSPi7Fϙf…g7Ô`g£~S@ Beispiel 3.

/ Ausgabe haben sie schon kennengelernt. nauso wie Es ist möglich.1. Alle Ausgaben auf erscheinen normalerweise auf dem Bildschirm. liefert einen zurück. Wichtig ist hier der Cast nach .Kapitel 4 Etwas Übung Wir werden jetzt das Gelernte an ein paar Beispielen vertiefen. Wie das genau geht. die Anweisungen hierzu lauten und . nur Fehlermeldungen angezeigt bekommt. oder . wenn die Datei zu Ende ist. Hierbei ist es leider notwendig etwas vorzugreifen. die Standardausgabe für Texte.1. dann keine Sorge . damit die Beispiele nicht zu trocken werden.1 zeigt ein kleines Programm. das dies alles beachtet und seine Eingabe auf die Ausgabe kopiert. statt selbst über die Tastatur einzugeben: @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen – g – •C 4 – `5Vu`SW mit dem -Zeichen leiten sie hierbei den Inhalt der Datei gramm weiter. denn Java fordert hier ein Abfangen von eventuellen Lesefehlern.1 Einfache Ein. die Eingabe dafür aus einer Datei zu lesen. 4. Beispiel 4. Um das Programm zu testen. Fehlermeldungen nach zu schreiben. eine der beiden Ausgaben in eine Datei umleiten zu lassen. weil sonst die Unicode-Werte der Zeichen als Zahlen ausgegeben werden. ist für die “normale” Ausgabe eines Programmes vorgesehen und heißt “Standardausgabe”. Das gleiche gibt es auch zum Lesen von Zeichen: . Aus diesem Grund sollte man sich angewöhnen. Leider kann man nicht so einfach verwenden.1: ein einfaches ’cat’ 3h 4 – ™`Ph ã ã Þ ® Ž ©’Œ ¡ ¦Žà ú ù ª à ¡— ã rk~¢™PB¢&Pg(¿ P™&à ã ã ¯ ® à ® ¨ — ¿ ઠª ¡ Œ ¨ ¦• ¡ ¥ ’• £ Ž ¡    ‹Ë`™PdVp£B© PB§§g¢{¤dF€P&Ÿ Þ}®Ë½gçp–³p)ª é ™gø¥d{¤dg€B&±™$‹i™™`™¾ ÈÚ ® ® — Ž ¨• ©Œ• £Ž ¡    Ÿ È à ª ª Ž ‘ Œ ¿ Þ  ¨ ‹F™¡ ¯ à ¡ fkB© Œ Þ ® ˜ â ¨ — öõ ⠌ ¨ ¡ Ÿ ª © Œ — rF™™k÷B© PF&ê§dB7£ é gB™FP&g€±FF`FF¦ Œ ’ ˜ àŒ ¡— ¡ àŒ‘ ”¥ Þ ¡—ƒ  —‘à àŒ‘ ”¥ k&FËFB™&±Fg`™F¦ f p 754 p – 3 `'Fh p p QC oQ 4 e f 5`VzFgf`a p p QC oQ 4 e f 5`yz™g`a ¸ — ˜ —Š• ¡ — ƒ Û ¡ — ƒ — ˜ — Š ‰ ‡ ˆ ‡† …„ g™&{§™Frk™FËg™™‹BF™€g{iƒ 2 p p QC oQ 4 e f 7`yzFSg`a 4 G qC oQ 4e f SPyœFgPa 4 G qC oQ 4e f SPyœFgPa 4 G qC oQ 4e f SPyœFgPa als Eingabe an das Pro- 14 . ist die “Standardfehlerausgabe” und ist für Fehlermeldungen vorgesehen.10. w€q0IFi'4SI™DpS{Cu4SBqyCzoFQF`a 6 G 4e f wq U – Q pC I DC o Q 4 e f ¢’75{9™dz™g`a w SH 4 SI™D wq U – Q pC I DC o Q 4 e f wq U – Q ¢’75{9™dz™g`a &¤75p I C oQ 4 e f ™D zFgf`a IDC oQ 4 e f ™dzFSg`a Beispiel 4. so als wenn sie den Inhalt über die Tastatur eingeben. so dass man z. der einzelne Lesen von Zeichen mittels das nächste Zeichen enthält.es wird später alles genau erklärt. wie . empfiehlt es sich. erfahren sie im Abschnitt 7.B. ge. Wenn sie also etwas nicht verstehen. Leider unterstützt nicht mehr als das .

und wenden sie also die Methoden . Arabisch) und achten sie auf die korrekte Behandlung von koreanischen und japanischen Schriftzeichen.2. die der Großbuchstaben und die der Kleinbuchstaben in einem Text zählt./ Ausgabe wq Q e – W p Q A q X e DC p Q 4h – p – 3 &1PSS5P'PSB`du`F'`'PW 4. das man ohne sie die Ein-/Ausgabefunktionen nicht (leicht) nutzen kann. dass es Sprachen gibt. Ver.Þ ® Ž ©’Œ ¡ ¦Žà ú ù ª à ¡— ã rk~¢™PB¢&Pg(¿ P™&à ã ¯®™«)ÚS«‹7£ B£‹»FFgg)ËdBBdPg§§B¢–¤dg€B&Ÿ ¬ Ž — ¢  ¬ « ’ ‘ ‘ — « ª © ‘ ¡ © Œ ¨ ¦• ¡ ¥ ’• £ Ž ¡    ¯ ®ª Ž ©Œ — Ž ¨• ¨ ” È Ž £— ¢  â ©Œ ¨ ¡ )Pd`ü é Fgø§gr±7dg£~BdP™&Ÿ ¯ ® «   ¥ î ¡  æ Œ Ž ¿ Ž Œ “« ª © ‘ ¡ © Œ ¨ ¦• ¡ ¥ ’• £ Ž ¡    Ë7¡™Ë€`dBPr&P)ËdBBdPg§§B¢–¤dg€B&Ÿ ¯®Ë®Ï©dŒ“1dg€P€»£&Ž é FŽ þ dFgF€BBFF© ~&P© • £Ž ¡  Ÿ ª ¨ — £—Ž ¨¡Ÿ ¡ ¥¦ ÿ ¾Ž þ Ž ¨ŽÝÝ ¥¼ ¾Ž © È ¨ ” ¨ — þ Ž ¨Ž ÝÝ ¥ ªi™Ž é —FŽ ™é g™FFB™±€Pr±gk™Ž é FŽ ™é g™gFg™¼ ¨ Þ  ¨ ‹F™¡ Þ ® ˜ â ¨ — öõ ⠌ ¨ ¡ Ÿ ª © Œ — rF™™k÷B© PF&ê§dB7£ é gB™FP&g€±FF`FF¦ Œ ’ ˜ àŒ ¡— ¡ àŒ‘ ”¥ Þ ¥î¡Œ ¼¨Ž “  —‘à àŒ‘ ”¥ ™&€F`™&BrFB™&±Fg`™F¦ ¯ ɕ ’Œ• — ˜—Š ¡ ¨’ ¦ £ f“i&“£g™&kF&`gåŒ Das zeichenweise Einlesen von Eingabezeichen ist etwas unkomfortabel. wie oder vergleichen. deshalb kann man sie nicht mit 4. hier reicht es zu wissen. Von daher hier noch etwas mehr “Voodoozauber”.B.2 Bessere Ein.6 erläutert. Es gibt in Java dafür die Methode e i – G ¤ S`¥Q Q i h G q 7f5P5U 4 I S™D : c 2000 iKu Netzwerklösungen Beispiel 4. 4 p q 6 o 7`''¢D ¯S®Ë«åÚFÚF§™¡BF¦€Pr€F~Fdk&`)r¢gBdPBߧB¢{1dg€P€Ÿ Ú ¡ ¥ — ¡  Œ í ˆ † Ž Œ î « ª © ‘ ¡ © Œ ¨ ¦• ¡ ¥ ’• £ Ž ¡    Þ Ž‘ ‹&FgŽ ã ¯ « © ®Ë5âBF¥F© é ¨&ý~d±g™FBår¢gBdPBߧB¢{1dg€P€Ÿ © Œ  Ž ‘ ‘ ‡ « ª © ‘ ¡ © Œ ¨ ¦• ¡ ¥ ’• £ Ž ¡    Þ ® ® ¿à ª Ž — ƒ ¨Ž ¾’ üŒ• ¨Ž ¡à — ¨— ¿ƒ ª Ý }±d­&BFg&B€P¢™“§™g¢Bg™P¢$£€Œ ¯ û áû È ¿ à ¨ — ¿ F§ˆkdk™Pdà Hinweis: Sie programmieren in eine Sprache.2. Beachten sie hierbei. Bessere Ein. die für internationale Zwecke bestimmt ist. Q e i – PS5à Q G p '754 p – 3 `'™h wq Q e – W p Q 6 6 €e DC p Q 4 h – p – 3 wq p Q 4 4 Q X e C p Q 4 h – p – 3 &¥P'55P'55™7duPg'P'`W ¢TP7`SB7D u`g`'`W Schreiben sie jetzt ein Programm./ Ausgabe 15 2 e i – G ¤ S'`¦Q C C @ 55C 5@ ‚ m w w | 4 p G v| q e i – G ¤ QC Q o– ˜e q à yρ§5S7€Ë5'`¥yTiFg˒FD † 7† s ID p 4 S™i5Pa ã ã ã .1: @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 Beispiel 4. Übung Beispiel 4.1 zeigt.1: Java ist freundlich .und Kleinbuchstaben unterscheiden (z. wie man in Java eine Zeichenkette einliest und ausgeben kann. das die Anzahl der Buchstaben. die alle einen haben wollen und oder zurückliefern.2: Beispiel für Q e – W p Q A q X e P'5S`'P5B7D 4. Beachten sie die Zeile mit am Anfang! Was sie bedeutet wird in Abschnitt 8. die nicht zwischen Groß. den sie später noch besser verstehen werden.3.1. Beispiel 4.2. wenn man Benutzereingaben verarbeiten will.3 Passwortabfrage s sind keine integralen Variablen.

das eine Passwortabfrage vornimmt und bei Eingabe des richtigen Passworts ein kleines Geheimnis ihrer Wahl preisgibt! 4.4 Zeichenketten in Zahlen umwandeln Von der Tastatur kann man in Java nur Zeichenketten lesen. so muss man diese Zeichenketten nach dem Einlesen umwandeln. Er soll einen DM-Betrag von der Tastatur einlesen und ihn in Euro umrechnen. Zeichenketten in Zahlen umwandeln Schreiben sie mit diesem Wissen ein Programm. Hierfür ist wieder etwas “Zauber” notwendig: Schreiben sie jetzt einen Eurorechner.4. der DM-Beträge in Euro umrechnen kann.4. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 ‘£w&q¤Q'GgiS–‡`Q7i'h5GPqSUVC¥wˆer¤`f5P…P'jÏy7f5P5U q Q i h G q u A Q I † U Q i h G q ‘ £| C x 5ЁˆS™i5Pa w | † e s ID p 4 Ò Ñ ¶ 555ž  › Beispiel 4.4. Will man Zahlen einlesen. Verwenden sie dabei den Kurs 1 Euro = 1.1: Zeichen in Zahlen umwandeln 2 c 2000 iKu Netzwerklösungen 16 .95583 DM.

Die erste verwendet wie groß das Array sein soll: ‘ v T³µ › t v µ w t 4 I D A Q I † vt v I Q i 3 – e p 3 Q ¹ D – 4 I ³™ËuS™ÐP'jp{u“t P`fP55PFf…S&D ‘ ‘ ž ‚ r´  ´ ‘ m vt 4 ID A Q I † I Q i 3 – e D ϓ9S™ÐP'j³P`fP5B'– Ò ´ Ñ x´ ‚ }’}’¶ w m † I Q i 3 – e D – vt 4 I ԈjP7fP7Bfϓ9S&D ž ‚ r´  ´ ´ › ´ ‘ v T³µ Q e i – BSSà › x t 4 ID A Q I † v I Q i 3 – e D – 4 I 9S&ÐB'³“t P7'P5Bf…S&D ´ › ´ w m † I Q i 3 – e D – vt 4 I ԈjP7fP7Bfϓ9S&D I – Q i q q P5755'h 2 I Q i 3 – e D – vt 4 I P7fB5Bfϓ95™D µ 4 I S&D r r r wie sie Arrays erzeugen und initialisieren wie sie auf Arrayelemente zugreifen wie sie die Länge eines Arrays bestimmen und gibt an.Kapitel 5 Arrays Arrays sind Variablen. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen v I Q i 3 – e D – 4 I “t P`fP5B'n5™D A Q PI Es gibt in Java zwei Möglichkeiten. Auf jedes Objekt kann mit einem Index zugegriffen werden. als auch hinter die Variable schreiben ( ).1 möglich): 5.1 Erzeugung von Arrays Die Elemente eines Arrays werden mit den Standardwerten für den Variablentyp initialisiert. Die zweite Möglichkeit ein Array zu erzeugen ist ein Initialisierer : Bei einer Neubelegung muss man allerdings folgende Syntax verwenden (erst ab Java 1. d. bei ist dies und bei ist er . indem sie einfach mehrere eckige Klammern hintereinander schreiben. Die einzelnen Elemente eines Arrays müssen also getrennt initialisiert werden. 17 .2 Mehrdimensionale Arrays In Java ist ein mehrdimensionales Array ein “Array von Arrays”. Sie definieren ein mehrdimensionales Array. oder auch beides mischen. die Elemente der ersten Dimension sind Arrays mit einer Dimension weniger. In diesem Kapitel lernen sie 5. alle diese Verwendungen sind erlaubt und identisch. dass jedes Element einer Dimension die gleiche Anzahl an Elementen hat Sie können in Java bei Variablendefinitionen die eckigen Klammern sowohl hinter den Datentyp ( ). die mehrere Objekte enthalten können. In Java ist es nicht notwendig. Arrays zu erzeugen.h.

*Schreiben sie ein Programm.4 Länge eines Arrays Sie können die Länge eines Arrays herausfinden. das ausgibt. wieviele Parameter ihm übergeben wurden.3.die Indizes beginnen wie in C/C++ bei 0! Die JVM überprüft bei jedem Zugriff auf ein Array. 5. aufsteigend sortiert. geben sie einfach einen Index in jeder Dimension an. 3. 2.3 Zugriff auf Arrayelemente Um auf ein Element eines Arrays zuzugreifen. der das Element beschreibt . Zugriff auf Arrayelemente 5. Ausnahmen sind in Abschnitt 7.5.10 beschrieben. so kommt es zu einer Ausnahme . das ein Array von @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen ´ ž ‚  ’r´ w ´ Ó ´ Ñ ’}’­´ › ´ ¯ 㠙F(gdp&Bǣ˙Bd~€P© £™dèB© ~&PØÞ ö Ü° õ ¡ ©Œ ¾Ž © Æ ö ÜÌ õ ¡ ©Œ ¾Ž Æ ö ܽ õ ¡ Œ ¾Ž © È öõ ö ° õ © Ž ‘ ¿ — § Œ — ¡ © ‹÷§™(1€&`€F¨g‹BdŒ ‘ §w·375sSB7)0– 4 I Q iC Î~|Ë8u4ge`DÔ{t–nIPqgysSPô5XyQBi&rTBSS™i5{uSPVzFgf`a v Q I D u| q I i 4 I D p 6C 4 G qC o Q 4 e f ‘ Tv t 4 ID A Q I † – vt 4 I 95™xP'j…³“95™D ž x ³m 4 I S™D ID – ™fio ¯ ö Ì õ © Ž ‘ ¿ — § Œ — È © Ž ‘ ¿ — § ¨ Ž ⠌ © Ž “ Œ — öõ ¡ © i™$1€™P€F¨B™j¢™`€F™g€7¢B¢B‹§BdŒ ¯ ½ õ ö Ü õ ©Ž‘ ¿—§Œ — È — ¡ © £ö è™$1¢™`€F©B˙‹BdŒ 2 3 4 s I Q i `5SP7yC 18 . Schreiben sie ein Programm. ob der Zugriff innerhalb der Arraygrenzen liegt. Sollte ein Fehler auftreten. das aus dem Array die größte und die kleinste Zahl heraussucht und ausgibt. Schreiben sie ein Programm. Hinweis: Schauen sie sich die Definition von an. indem sie hinter den Namen des Arrays schreiben: 5.5 Übungen zu Arrays 1.

aber es ist nicht sonderlich elegant. oder . wobei eine Methode auch andere Methoden aufrufen darf. Eine einmal definierte Methode lässt sich beliebig oft im Programm verwenden.1 gezeigt. Man gibt einer Folge von Anweisungen einen Namen und kann dann diese über den Namen aufrufen. den Namen von Methoden klein zu schreiben. In kleinen Programmen kann man sich mit Kopieren und Einfügen etwas Arbeit ersparen. Alle Methoden müssen innerhalb einer Klasse definiert werden (man sagt im “Klassenkontext”). sind Methoden „benannter Programmcode”.Kapitel 6 Methoden In diesem Kapitel lernen sie 6. Ein Beispiel hierfür ist das Rechteck aus dem Abschnitt 3. sondern Änderungen können viel leichter und weniger fehleranfällig durchgeführt werden.1: Eine einfache Methode Es ist in Java üblich.1. zumal auch deutlich mehr Anweisungen notwendig sein können. Um dieses Problem zu beheben. wobei man bei zusammengesetzten Namen die jeweils ersten Buchstaben der hinteren Teile groß schreibt. so musste man bisher den Programmcode kopieren. dass man die gleichen Anweisungen an mehreren Stellen des Programms benötigt. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen wq q s q X ID Q &¤S`S™'io R 4 – e I Q 4 – u I Q 4 e p ‚ Q hD Q p 3h SBPiBSPSBg5P'™f5F5e ‘·µ w µ 5x ‘w·µ  ´ ‘ w › µ ´x Ô7’ž › ´ wq I Q I 3h D Q &0B'5F7'SR µ´ ‚ µ q Q D ID 1B£™'i ´ µ ´ 5x› ’µž › 1B£™'i q Q D ID ´ › 1B£™'i q Q D ID ´ žq q › k€¤’`SS™fipgfSg m ¤w r´ sž q X I D Q o U D q 2 ‚ ‘ wq q s q i ID Q §&¤``f™fio m wq I Q I 3h D Q R UD q k€0P'5™7fS³gfSg Q U q 3 4 Q ¹ Q ID Q 57'7`S`'™fo r r r r r was Methoden sind was lokale Variablen sind wie sie Methodenparameter angeben wie sie Rückgabewerte zurückliefern wie sie Methoden überladen 19 .1 Was sind Methoden? In der Programmierung steht man häufiger vor dem Problem. weil man das Programm nur noch an einer und nicht an vielen Stellen ändern muss. Analog zu Variablen. Man sieht hier in den Aufruf der Methode .1. die „benannter Speicher” sind.B. Auf diese Weise erspart man sich nicht nur sehr viel Tipparbeit. Beispiel 6.4. Will man mehrere Rechtecke ausgeben. es ist nicht möglich eine Methode innerhalb einer anderen Methode zu definieren. wie in Beispiel 6. gibt es “Methoden”. z.

insbesondere eigene Variablen definieren und verwenden. Man hätte also die auch direkt angeben können. die ein Rechteck ausgibt. also z. diese so auf mehrere Zeilen aufzuteilen. d. Man muss sich zuerst überlegen. wie man so etwas implementieren kann. werden aber mit dem übergebenen Wert initialisiert. die innerhalb einer Klasse definiert sind und für alle Methoden gleich sind. so ist es üblich. die in anderen Methoden definiert werden. dass beim Neuzeichnen des Applets ausgeführt wird. wie die Definition von Variablen. so haben diese keinen Einfluss aufeinander. Wir werden später noch Variablen kennenlernen.3. alle Methoden können auf diese Variablen zugreifen und es sind immer die gleichen Variablen. wenn die Verwendung im Programmtext vor der Definition steht. d. Man sieht. als in eine Zeile passen.3.h. in der sie definiert wurden und sie sind unabhängig von allen Variablen. wenn man die Koordinaten von der linken oberen und der rechten unteren Ecke angibt.1: Methode wq I Q 3h D Q €0P'F`fSR – – wq q s q X ID Q &¤S`S™'io m jw › f 4 I ³S™D  wq I Q I 3h D Q &0P'7F7fSR ´ › wq I Q I 3h D Q &0B'5F7'SR ² 4 I …S&D ´ wq I Q I 3h D Q &0P5F7f5R wq q s q X ID Q &¤PS™fo – ‘ w µ µ ·5Fw ‚ C Ae G @ 9Fy5@ ‘ w w j§f ² §f §»1B£™'i w w ² q Q D ID w f 4 I §³S™D §³´ S›™­Tg'S´ SF'5™fipgfSg w ² 4 I D q´ E h Q 4 3 h Q ” I D Q o U D q ´ ‘ w µ µ ˆ5Fw ‚ µ w ™w µ q E h Q 4 3h Q ” ID Q TgSF'SS™fio ´ ž ´ ´ m wq I Q I 3h D Q R UD q ¤ž k€0P'5™7fS³gfSg µ w ™w µ q Eh Q 4 3h Q ” ID Q TF'SFS™fo ´ ž ´ ´ ¤ž – q s q X ID Q `S&fio 2 wq q s q X ID Q &¤PS™fo wq I Q I 3h D Q &0P5F7f5R wq q s q X ID Q &¤PS™fo ž 20 . Die Definition der Parameter bei der Methodendefinition sieht so ähnlich aus. d. dass zusammengehörende Teile in der gleichen Spalte anfangen. was wir auch in gemacht haben. ob man Konstanten oder Variablen übergibt. Als Beispiel wollen wir eine Methode schreiben.3 Parameter lassen vermuten. lokale Variablen Im Gegensatz zu C/C++ oder Pascal braucht man eine Methode nicht zu deklarieren.B. dass man den Methoden Werte übergeben kann Die Klammern hinter und genauso ist es. wie man oben sieht. Die Zuordnung von übergebenen Wert zum Namen des Parameters @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen wq E h Q 4 3h Q ” ID Q &TgSF'SS™fio Beispiel 6. wenn man sie verwenden will. bevor sie definiert wurde. Lokale Variablen sind nur innerhalb der Methode bekannt.6. wobei dies hier sehr einfach ist: die beiden Koordinaten jeweils mit x und y-Wert In Beispiel 6. heißen lokale Variablen .1 sehen sie. Benötigt eine Anweisung mehr Zeichen. man kann mehrere Parameter mit dem gleichen Typ nicht zusammenfassen. eine Veränderung von in verändert den Wert von in nicht.h. Eine Methode gehört zur Klasse und ist deshalb überall verfügbar. dass bei jedem Parameter der Typ einzeln anzugeben ist. Hierbei ist es egal.2. Hierbei ist nur zu beachten. Parameter wirken innerhalb einer Methode wie lokale Variablen. welche Parameter man dieser Methode übergeben will.2 lokale Variablen von nur die KonvenTechnisch gesehen unterscheidet die Methode tion. selbst wenn diese den gleichen Namen haben. dass beim Methodenaufruf die Parameter mit Komma getrennt angeben werden.h. 6.h. Variablen. d. Wenn sie also in eine Variable benutzen und in ebenfalls eine Variable mit Namen definieren. die innerhalb einer Methode definiert sind. egal wann sie definiert wird. Wir können also in alles machen. 6.

Hierzu muss man nur den Typ des Rückgabewertes anstelle von schreiben und am Ende der Methode mit den Wert angeben. d. indem man die Methode einfach so aufruft.h. wenn man Parameter des falschen Typs angibt. um diese Einschränkung zu umgehen. d.1 sehen sie eine Methode. einer -Anweisung stehen. da man.3.h. nur der Wert. Dies ist auch ganz logisch. wo auch ein Wert stehen kann. Im Beispiel 6. die für die ersten beiden Parameter einen und als dritten einen haben will. Wichtig ist nur. Beispiel 6. die das Quadrat der übergebenen Zahl zurückliefert. die nicht verändert werden können. der erste übergebene Wert wird in den ersten Parameter geschrieben. Man kann allerdings auch Methoden schreiben.B. die Parameter werden “by value” übergeben. man sagt. Man könnte also auf die Idee kommen genau so eine Methode zu schreiben und das funktioniert sogar! @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen ‘ w µ ·Fw 4 ² Q 5P4 U D q gfSg ‚ µ w q 4 – p U – G ¤ Î | 4 e T`7`'`pÐg7D I q g 4 – p U – G  e – u| q 4 ² Q Py`S77'B'S&kT5`4 ´ › ´ ž ž m wq I Q I 3h D Q R UD q k€0P'5™7fS³gfSg  21 ž 3h q I p Q o oD 4e D – @ ™''j`i5dxF7Ô³5@ 4 I S™D I p G 4 Q 7S7Pp U D q gfSg ‘ w µ §Ô5x à FD ´ | iµ | §™£~fP'j`'k'5™‹T5`S4 | ²D I i 3 q A p – A e – U| q 4 ² Q › ´ s ID p 4 S™i5Pa ‘·–ë0IBS4S™DiS–uSPyœFgPa w q i I p 6C 4 G qC o Q 4 e f ‘ w – q 3 4 Q ·}07`o ‘ – I 4 w·ëq0BiSSI™DipS–CuSPyœFgPa 6 4 G qC oQ 4e f ‘ ……S&D † – 4 I ž ‚ ‘ D Í D I p G 4 Q ……Ô`S7`p m w D 4 ID q 4 – p U – G ¤ 4 I jÏÔS™ËT`S77'`S&D I p G 4 Q 7S``p 2 ‚ ‘ x † ’……² m yw ³S&Ë07`ipg'g ² 4 ID q 3 4 Q o UD q I p G 4 Q 757`p UD q gfSg . nicht die Variablen selbst wird weitergegeben (siehe Beispiel 6.1: Methode “quadrat” Die Anweisung beendet die Methode sofort und liefert den angegebenen Wert zurück. auch Konstanten übergeben kann. d. Beispiel 6. Man erhält eine Fehlermeldung vom Kompiler. Eine Methode kann den Wert eines Parameters verändern.5 Überladung Was passiert.2). Man kann immer nur einen Wert zurückliefern. dass irgendwie immer ein ausgeführt wird.2: Parameterübergabe als Wert 6.4 Rückgabewerte Bisher stand vor den Methodennamen immer ein (“leer”).4. also z. auch in Zuweisungen oder Methodenaufrufen. der zurückgeliefert werden soll. dass die Methode keinen Wert zurückliefert.h. bevor das Ende der Methode erreicht ist. dass es keine Methode gibt. allerdings hat dies keinen Einfluss auf das aufrufende Programm. Man kann den Rückgabewert auch ignorieren. wie man oben gesehen hat. Dieses gibt an. 6.6. der zweite in den zweiten usw. Sie kann auch innerhalb eines Blocks.B.3. Wir werden in Kapitel 9 sehen. was man machen muss. Der Aufruf der Methode kann überall dort stehen. z. Rückgabewerte erfolgt hierbei über die Position.4.4. die einen beliebigen Wert zurückliefern.

um eine Version von zu schreiben. wie und immer einen Abstand von 2 Pixeln verwendet. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 ‚ ‘w³QSsSIPôSXBFf5gЅf SSPSBFf5gx…² f èTgSF'SS™fio I Q 4D Q a D Î Q s I ô X I Q 4D Q a D Î ² q E h Q 4 3h Q ” ID Q m w Q s I ô X I Q 4D Q a D 4 I j³SP5PF´ '5BÔS™D ³S™D ³S™´ ­Tg'SSF'5™fipgfSg f 4 I ²´ 4 ID q E h Q 4 3h Q ” ID Q o UD q ´ ´ ‚ C Ae G @ 9Fy5@ ‘ w xf SSPSBFf5gx…² f »1B£™'i Q s I ô X I Q 4D Q a D Î ² q Q D ID m w Q s I ô X I Q 4D Q a D 4 I j³SP5PF'5BÔS™´ D ³S™D ³S™­Tg´ 'SS´ F'5™fipgfSg f 4 I ² 4 ID q E h Q 4 3h Q ” ID Q o UD q ´ ´ c 2000 iKu Netzwerklösungen Eh Q 4 3h Q ” ID Q F'SFS™fo wq E h Q 4 3h Q ” 4 i Q 6 6 q &’g'S™'5P5'5PSU 4 I S&D wq E h Q 4 3h Q ” 4 Q i 6 6 q &Tg'SSF'7`7f5BSU E h Q 4 3h Q ” ID Q g'SSF'5™fio 2 wq Eh Q 4 3h Q ” ID Q &TF'SFS™fo 22 . Und wer weniger tippt. wie 1. Schreiben sie einige Aufgaben aus den vorherigen Kapiteln so um. macht weniger Fehler! 6. Schreiben sie eine Methode bekommt. Einfacher ist es.B. wenn man die Aufrufe der Methoden miteinander „verkettet”. dass beispielsweise Methoden mit weniger Parametern gleichnamige Methoden mit mehr Parametern aufrufen und die fehlenden Parameter durch Standardwerte ersetzen. die nur drei statt vier bekommt und damit ein Quadrat zeichnet mit dem dritten Parameter als Kantenlänge. oder wie in diesem Fall. sowie einen zusätzlichen. die die gleichen Parameter bekommt. Übungen Man nennt diesen Vorgang “Überladung”. die fehlenden Parameter errechen.6. Benutzen sie Überladung. Hierbei definiert man mehrere Methoden. wobei das eine mit dem angegebenen Abstand innerhalb des anderen liegen soll.h. Bei diesem Ansatz macht man sich doppelte Arbeit. d. die sich in Anzahl und/oder Typ der Parameter unterscheiden.6. der einen Abstand in Pixeln angibt. Dieser Ansatz ist deutlich eleganter und spart zudem noch einiges an Tipparbeit.6 Übungen . 2. 3. Eine sinnvolle Anwendung dafür wäre z. dass diese Methoden verwenden. eine weitere Methode . Die Methode soll dann zwei Rechtecke zeichenen. die genausoviele Parameter bekommt.

Kapitel 7 Klassen In diesem Kapitel lernen sie 7. Nach dem Schlüsselwort folgt der Name der Klasse. 7. der zu diesem Objekt gehört.B. diese beginnen mit und enden mit .1 zeigt (im Ansatz). Beendet wird die Klassendefinition mit einer schließenden geschweiften Klammer. globale Prozeduren oder Variablen. zeigt die Methode eines s dieses am Bildschirm an. wobei hier kein Strichpunkt folgt. Als letztes kommt die Definition der Methoden.B. d. z. z. Ein Objekt in Java heißt Klassse und besteht aus zwei Teilen: Feldern Methoden oder . wie z. alles nach den Schrägstrichen bis zum Zeilenende wird vom Kompiler ignoriert. Die Zeile mit den zwei Schrägstrichen ist ein Kommentar. einem Computer. Methoden sind Programmcode.B. nicht erlaubt ist. gibt es nicht. Beachten sie bitte. Diese Objekte haben Eigenschaften oder Zustände: 64MB RAM. für den die gleichen Einschränkungen wie für Variablennamen gelten. aber nicht notwendig. sondern aus Objekten. Danach kommt als erstes die Definition der Felder. dass sich die gesamte Klassendefinition innerhalb der geschweiften Klammern befindet und eine Definition ausserhalb. ausgeschaltet. Idealerweise wird der Zustand einer Klasse nur über Methoden und nicht über direkte Zugriffe auf die Felder geändert. wie in Pascal. die wie Variablen definiert werden. umherschieben usw.B. Im Beispiel aus Kapitel 2 haben sie deshalb die Klasse “HelloWeb” definieren müssen und die eine Methode “main” innerhalb der Klasse angegeben. grau usw. die Felder an den Anfang einer Klasse zu schreiben. einschalten.h. Mit diesen Objekten kann man verschiedene Dinge tun.2. C oder C++. denn dies erlaubt eine Prüfung der Änderungen. die aus @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen @ `Í s ID p 4 S™i5Pa Í S@ 4 I S™D p – 3 `Fh 4 I S™D A q U ID PS™il e e – i 5'``h 2 A q 3 P'Fe r r r r r r r r r wie sie Klassen definieren wie sie Instanzen erzeugen und benutzen wie sie Konstruktoren definieren wie sie Methoden überladen wie sie Klassenfelder und Klassenmethoden definieren wie sie Arrays erzeugen und verwenden wie sie Ausnahmen abfangen und erzeugen 23 .1 Einführung in Klassen Die reale Welt besteht nicht aus und . Genau wie in C oder C++ gibt es in Java Kommentare über mehrere Zeilen. die Felder einer Klasse Ein Feld enthält einen beliebigen Datentyp. Die objektorientierte Programmierung versucht dies in eine Programmiersprache abzubilden. speichern Ihren Zustand. wie eine Klasse für ein Fenster aussehen könnte. gefolgt von einer öffnenden geschweiften Klammer. in C++. Es ist üblich. z.2 Eine Fensterklasse Beispiel 7. In Java muss sich jedes Stück Programmcode innerhalb einer Klasse befinden.

7. können wir auf dessen Felder zugreifen. sie entspricht einer Bauanleitung und keinem konkreten Objekt. Sie können den Wert jeder Variablen zuweisen und damit den Verweis auf eine Instanz ungültig machen. Als Rückgabetyp dürfen sie alle Variablentypen angeben. dass noch keine Instanz der Variablen zugewiesen wurde. Aber diese Variable ist nur ein Name.2. Zugriff auf Felder Nachdem wir nun ein Objekt erzeugt haben. Bei Java müssen alle Objekte dynamisch erzeugt werden. hat den Wert . Für den Methodennamen gilt das gleiche. Die Parameter einer Methode werden ähnlich wie lokale Variablen definiert. um herauszufinden. obwohl sie damit im Gegensatz zu C/C++ keine Zeigerarithmetik machen können). wie für Variablen und Klassennamen. Eine Fensterklasse Rückgabetyp Methodenname Parameter Programmcode bestehen. nach denen. ob bereits eine Instanz zugewiesen wurde. Wir benötigen ein bestimmtes Fenster. Objekte sind Instanzen einer Klasse Nachdem wir nun (zumindest teilweise) die Klasse definiert haben. mit dem A q U ID BS™£l A q U ID PS&£l ¯ Ž‘ ”ŒŒ ˆŒ ©—Ž‘’’ i™PdFF`dF€F&FF`” ¯ Ž ¿! Œ Æ Ž¡Œ Ž¨¼Œ ¡ © iB¢¡¢èiF€BggdpBdŒ ¯iŽF¡™—PdŒ é FP£Œ iF™PdŒ é &FP£pBdŒ © ’’  Æ Ž¡— © ¨’’ Œ ¡ © ¾ €’ é © `™&Fg™P™Ž é ™Ž é gFð  Œ “ Ž —‘  ¨ ¨ ‘Ž  Þ ¾ p€’ é © `rFB™&±Fg`™F¦ Œ “  —‘à àŒ‘ ”¥ U D q gfSg 2 ‘ wq A q U ID l A Q I † §&0PSS™£³P'jˆA ‘ A A q U ID jBS™£l A ‘ A A q U ID jBS™£l r r r r ã Beispiel 7. wollen sie nichts zurückliefern.2. wollen wir auch etwas mit ihr anfangen. der anzeigt. mit dem gearbeitet werden soll.1: die Klasse . der auf eine Fensterobjekt verweist. teilweise implementiert 24 . Mit der Window-Klasse selbst können wir nichts anstellen. Dies geschieht nahezu immer mit dem Schlüsselwort : Hiermit haben wir eine Instanz der Klasse erzeugt und sie der Variable zugewiesen. Solange dies noch nicht geschehen ist. ebenso können sie eine Variable mit vergleichen. eine Instanz der Klasse. er ist nicht das Objekt selbst (er handelt sich hierbei genaugenommen um einen Zeiger auf ein Objekt. wobei sie hier allerdings bei jedem Parameter den Typ angeben müssen. Den Programmcode müssen sie in geschweifte Klammern fassen. kein Strichpunkt folgt. so müssen sie den Typ (leer) angeben. genau wie bei Klassen. Die Syntax sollte C-Programmierern vertraut sein: @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen i i G 5f7I A Q B'I h i7if5I G i i G 5f7I A q U ID PSS™£l h A q U ID P5™£l Durch die Definition der Klasse wir Variablen definieren können: ¯ Ž ¡Œ Ž ¨ ¼Œ ©¨ ¥¡Ž ¨ Þ ®ª Ž ¡Œ Ž¨¼¡Žâ ¡ © ã ig€ggg¢€B&™gr™)ig€ggg™™F±BdŒ ¼Œ Þ ® Ž ¡Œ Ž ¨ ” ¡ Œ ª Ž ¡Œ Ž¨ ¼¡Ž Œ’ ã ¯iŽg¡€ŒBŽF¨B”rȋŽg¡€ŒgŽg¨g¢Ë}g€ggB™B© èig€BFg™™& é gB˜ ¯ Ž‘ — Ý È Ž‘ ”ŒŒ ˆŒ Þ ®ª Œ Œ’ ã i&Fgg™‹&`dFFP¢F‹ryiŽ é 7¿ é gB˜ ¯ Ž ¥¨¡ È Ž‘ ”ŒŒ ˆŒ Þ ®ª ¾’ ¿ Œ’ ã iB&F™‹&`dFFP¢F‹ry§€`d é gB˜ ¾ ©Œ “ Ž —‘  ¨ €’ é dPË&FB™B™Ž é €Ž é `&™gí  © ’ ¿¡Ž  haben wir einen neuen Variablentyp erzeugt.

um den obigen Programmcode etwas eleganter zu schreiben: Sehen sie? Der Name des Parameters ist identisch mit dem des Klassenfeldes. Übungen zu Klassen Verwendung von Methoden Die Verwendung von Methoden geschieht genauso. Mit Hilfe von kann man auf verdeckte Klassenfelder zugreifen und braucht sich daher bei der Wahl der Parameternamen nicht unnötig viele Gedanken zu machen.3 Übungen zu Klassen 3. nicht der Funktionsaufruf. Warum funktioniert es nicht? @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen – g – •C A q U ID `5yuPS™il 1. 7. dass wir nicht geschrieben haben. Durch die Angabe des Objektes vor dem Methodennamen weiß die Methode immer. um dem Programmierer Schreibarbeit zu sparen. speichern sie das ganze in der Datei und kompilieren sie diese. d.3. Wir können aber verwenden. mit welcher Klasse sie arbeiten soll? Sie bekommt beim Aufruf einen impliziten Parameter mitgegeben. Woher weiß die Methode.7. der auf das Objekt verweist. Versuchen sie die Klasse zu starten.h. Welche Fehlermeldung erscheint? ‚ Q 4D Q 4 Q F'p `Be „ ‘ Q 4D Q D † Q 4D Q ’F'p xp™fp D ¤7£7yynFfp ÔS™™¤SFfp `Pˆgfg C e D 3 4 m w Q 4D Q D 4 ID q Q 4D Q 4 Q e UD q „ „ „ „ ‚ ‘ Q 4D Q p h † Q 4D Q DC e D 3 4 m w Q 4D Q p h 4 ID q Q 4D Q 4 Q e UD q ’SFfSj~SFfp d¤7£`jynFfSSjS™™¤SFfp `Pˆgfg „ „ ‚ ‘ Q 4D Q p h † Q 4D Q D m w Q 4D Q p h 4 ID q Q 4D Q 4 Q e UD q ’FfSS³ySFfp ·ynFfSSjS™™¤SFfp `Pˆgfg „ „ A q U ID P5™£l ‘ µ µw ¤5FІ Q 3 " dDC 'B#Fd9A ‘ µ µ x † Q 4D Q DC ¤55…FfSp d9A ‘ w q A q U I D l A Q I † A A q U„ I D §&0PSS™£³P'jˆjBS™£l ‘ wq A q 3 C &0B'Fe 9A ‘ w µ µ q Q 4D Q 4 Q C §Ô57x ¤SFfp `Pe 9A ‘ w q A q U I D l A Q I † A A„ q U I D §&0PSS™£³P'jˆjBS™£l 2 e D 3 7i74 e D 3 7£74 e D 3 7£74 ‘ w A q A q 3 ÐØTP'Fe ‘ wq A q 3 C &0PFe 9A e D 3 7£`4 25 . Der Programmcode lautet in Wirklichkeit Der Kompiler nimmt diese Umsetzung automatisch vor. mit welchem Objekt sie arbeiten soll. wie der Zugriff auf Felder: Das interessante hierbei ist. 2. sondern Aus diesem Grund spricht man von “objektorientierter Programmierung”: das Objekt bildet den Mittelpunkt. Parameter und lokale Variablen überdecken Klassenfelder. Vervollständigen sie die Klasse . setzt immer die Breite des angebenen Objektes und nicht irgendeines anderen. so dass man diese nicht mehr direkt verwenden kann.

B.4. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen A q U ID PSS™£l Beispiel 7.2). dem Konstruktor . der keine Argumente bekommt und nichts besonderes macht. Jede Klasse in Java besitzt mindestens einen solchen Konstruktor.5 Übungen zur Überladung 1. Einen Konstruktor definieren Unsere Window-Klasse sollte bei der Erzeugung sinnvolle Startwerte haben. ein Fenster gleich mit den Koordinaten und der richtigen Größe. Dies muss allerdings als erster Befehl im Konstruktor stehen! 7. bei denen man mit unterschiedliche Datentypen ausgeben kann. 2.4. Aus diesem Grund können sie mehrere Konstruktoren angeben.1: ein Konstruktor für die Klasse – g – •C 4 e Q c A q U ID P5yugSPSS™£l wq Q 4D p &¤™iSA – g – •C h Q l q i i Q `5V9P'P`5Sd e D 3 7£74 • • • ’ ƒ ¨ Ž ¿ à Œ ‘ â © á ¨  ¨ ¥• •  FF£Ž é g&PdFggBF&B¦ PB§F™•  Þ ¾ ~€’ é © `}FB&™à Œ “  —‘ 2 – g – •C 4 e Q c A q U ID `7yug'SSPS&£l ‘ wq A q U ID l A Q I † A A q U ID §&0PSS™£³P'jˆjBS™£l ã ¯ Ž ‘ —Ý È Ž‘ ŒŒ ˆ i&ggF™‹™`” FF`¢™Œ ¯iܱ±Pd¡¢k±F€BggdŒ È Ž ¿! Œ È Ž¡Œ Ž¨¼ ¯i±‹F™PdŒ é &FP$Œ Ü È Ž¡— © ¨’’  ¯ Ü È Ž¡— © ¨’’  i±‹F™PdŒ é &FP£Œ Þ ®ª ¾ ©Œ ™)§€’ é d`“ A q U ID PSS™£l ã 26 . Dies wird zum Beispiel bei den Dateizugriffsmethoden verwendet. Wollen sie innerhalb eines Konstruktors einen anderen Konstruktor der gleichen Klasse aufrufen. darf deshalb nicht angegeben werden. so erhält sie einen Standardkonstruktor.1 zeigt.7.4. Damit der Kompiler sie unterscheiden kann. Erweitern sie so. Es reicht nicht aus. 7. An dem Namen erkennt ihn der Kompiler und der Rückgabetyp ist implizit immer eine Instanz der Klasse selbst. Objekterzeugung 4. Beispiel 7. dass die neuen Konstruktoren verwendet werden.4. wenn sich überladenen Methoden im Typ des Rückgabewertes unterscheiden. Schreiben sie analog zu eine Klasse . wird er nicht angegeben. müssen sie sie allerdings im Typ und/oder Anzahl der Parameter unterscheiden (Beispiel 7. Der Konstruktor ist eine Methode mit dem Namen der Klasse und ohne Rückgabetyp.es sieht aus wie ein Methodenaufruf: In der Tat handelt es sich hierbei um den Aufruf einer speziellen Methode. Sie können beliebige Methoden überladen. die Fensterbreite setzt und dann die Fensterbreite aus der Instanz ausliest und ausgibt. z. Mehrere Konstruktoren Manchmal wollen sie ein Objekt auf mehrere Arten initialisieren.3). solange sich diese in Typ und/oder Anzahl der Parameter unterscheiden. Implementieren sie die vorgestellten Konstruktoren. so können sie das mit dem -Schlüsselwort machen (siehe Beispiel 7.4. wie eine solche Initialisierung aussehen kann.4 Objekterzeugung Bei der Erzeugung einer Instanz schreibt man nach dem Namen der Klasse immer ein Paar runder Klammern . Die hier angewandte Technik nennt man Überladung . die eine Instanz von erzeugt.

7.6. wieviele Fenster bereits erzeugt wurden (siehe Beispiel 7. d.h.6 Statische Elemente Unsere Klasse besitzt mehrere Felder. Als Um ein Feld als Klassenfeld zu definieren.1: Statisches Klassenfeld h D 4 – 4 7`ge wq e D 3 &§7£74 Beispiel 7. die anderen bleiben unverändert. Klassenfelder davor. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen µ 㠕•  ™F•  Þ ® ¨— ”¡ ¿àŒ ©—Ž‘’’ ” Æ Ž ¡Œ Ž¨ ¼Œ ¡ Œ Æ Ž ¿! Œ ¡ ©Œ Æ Œ ¡ Œ Æ Œ ¡ ©Œ ª ¾ ©Œ }y™P€BdFFy¢F™FFPig€BFg¢pB© ëiP¢%¢pBdꧣpB© 룩pgd맀’ é d`“ ã ¯ ¨— ”¡ ¿àŒ È Ž‘ ŒŒ ˆ £™B&BdF™‹‹™`” FF`¢™Œ ¯ ® Ž ¿! Œ Æ Ž ¡Œ Ž ¨ ¼Œ Æ Œ Æ Œ ª Œ ¿ `Pd¡¢èig¢Bgg¢ê§£ë££ëfF7€¡ Þ ® ¨— ”¡ ¿àŒ ©—Ž‘’’ ” Æ Ž ¿! Œ ¡ ©Œ Æ Ž ¡Œ Ž ¨¼Œ ¡ ©Œ Æ Œ ¡ Œ Æ Œ ¡ ©Œ ª ¾ ©Œ }y™P€BdFFy¢F™FFPÇiP¢%¢pBdèg€BgF¢pBdꧣpB© 룩pgd맀’ é d`“ Beispiel 7. Statische Elemente 7.6.1). die also mit der Klasse und nicht einem Objekt verbunden ist. Felder und Variablen mit Werten vorzubelegen. in diesem Fall mit . Manchmal braucht man aber eine Variable. Diese Daten “gehören der Instanz”. In Java ist es erlaubt.4. Bei Klassenfeldern ist dies besonders wichtig. Solche Felder heißen statische Felder oder Klassenfelder .3: Verwendung von in einem Konstruktor A q U ID PS&£l 㠕•  ™F•  Þ ® Ž ¡Œ Ž¨ ¼Œ ¡ Œ Æ Ž ¿! Œ ¡ ©Œ Æ Œ ¡ Œ Æ Œ ¡ ©Œ ª ¾ ©Œ ­g€BFg¢pB© ëiP¢%¢pBdꧣpB© 룩pgd맀’ é d`“ ‘ µ † p Q 4 e I Q & i 3 – R I YD 4 ID h D 4 – 4 ¤n~`gP¡fBS7FÔS&³7i`Fe m A q U ID l e e – i nPSS™£‹5'``h • • • ’ ƒ ¨ Ž ¿ à Œ ‘ â © á ¨  ¨ ¥• •  FF£Ž é g&PdFggBF&B¦ PB§F™•  Þ ¾ ~€’ é © `}FB&™à Œ “  —‘ ‚ ‘ Î Î p Q 4 e I Q & i 3 – R I Y T7S`gP¡fBS7FD m wq A q U ID p&TPS™il 2 A q U ID PSS™£l 㠕•  ™F•  Þ ®ª ¾ ©Œ ™)§€’ é d`“ ••  F™•  Þ ¾ ~€’ é © `}FB&™à Œ “  —‘ C C @ 75C 7@ C C @ 75C 7@ ‚ ã ã Beispiel 7. jedes Objekt hat ihre eigenen Daten und eine Veränderung wirkt sich nur auf dieses aus. ob das Feld schon initialisiert wurde. da man nie weiß. oder nicht.2: mehrere Konstruktoren für die Klasse 27 . die Daten enthalten.6.4. von der es nur eine Kopie gibt. schreibt man das Schlüsselwort Beispiel wollen wir zählen.

dass vorher bereits eine Instanz der Klasse erzeugt wurde. Man kann also statt einem Zugriff über eine Instanz auch über den Namen der Klasse zugreifen Hierbei ist es nicht notwendig. Übungen zu Klassenfeldern und -methoden Ohne dass Schlüsselwort würde das Feld in jeder Instanz den Wert enthalten. Da das Feld jetzt ein Klassenfeld ist. brauchen sie keine Instanz der Klasse. um sie aufrufen zu können! Ein Beispiel für statische Methoden ist die Sinus-Funktion in Java . Um auf ein Klassenfeld zuzugreifen.7. Das ganze frisst natürlich Rechenzeit.freigegebener und danach trotzdem verwendeter Speicher . Erweitern sie so. dass sie auch direkt ausgeführt werden kann und das Funk2. Statische Methoden haben eine Einschränkung gegenüber normalen Methoden: sie dürfen nur statische Felder und andere statische Methoden der eigenen Klasse benutzen. dass sie sich als Java-Programmierer nicht mehr mit Speicherlöchern (ein Programm braucht immer mehr Speicher.8 Objektfreigabe Nachdem sie jetzt gesehen haben. dass die Methode sie beim Programmstart direkt aufgerufen werden. Dies bedeutet. weil vergessen wurde ihn freizugeben) befassen müssen. Umgekehrt dürfen allerdings normale Methoden auf statische Methoden und Felder zugreifen. aber dafür laufen Java-Programme deutlich stabiler! @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen h D 4 – 4 `i`ge ID – ™'io Dies ist auch der Grund dafür. Die Antwort lautet: Gar nicht! In Java werden nicht mehr benutzte Objekte vom Garbage Collector automatisch freigegeben.diese ist statisch definiert und kann deshalb direkt verwendet werden: 7. Der Grund hierfür ist klar. wie sie Objekte erzeugen und verwenden.entfallen damit komplett. Der Garbage Collector läuft ständig mit niedriger Priorität im Hintergrund und durchsucht den Speicher nach nicht mehr verwendeten Objekten und gibt diese frei.7. p Q 4 e I Q & i 3 – R I Y `giB¡fP57FD als ‘ p Q 4 e I Q & i 3 – R I YDC A q U ID ’`SgfP¡'PS7™d9PSS™£l e D 3 7£74 ‘ w µ q ID C 3 4 – §ÔØT™Se 9``¹ ‘ p Q 4e I Q & i 3 – R I YDC 0`FiP¡'PS7™d9A h D 4 – 4 7i`Sge 2 – g – •C A q U ID `5yuPS™il – g – •C A q U ID `5V9PS&£l † U Q i h G q ny`f5PSU † …– † …– w definiert wurde: nur so kann 28 . da jedesmal eine eigenständige Kopie davon erzeugt wurde. bekommt daher keine -Variable mitgeliefert und kann deshalb nur über den Klassennamen zugreifen. ist die nächste Frage. Auch viele der Gründe für “Nicht behebbare Schutzverletzung” . Welchen Vorteil haben dann statische Methoden? Man benötigt keine Instanz. so. die Methode “gehört zur Klasse”. 7. Klassenmethoden Genau wie Felder können sie auch Methoden als statisch definieren. wie diese Objekte wieder entfernt und der davon benötigte Speicherplatz wieder freigegeben wird. dass alle Konstruktoren den Zähler erhöhen.7 Übungen zu Klassenfeldern und -methoden 1. Erweitern sie tionieren des Zählers überprüft. erhöht jeder Aufruf des Konstruktors das Feld um eins und zählt somit die Anzahl der erzeugten Fenster.

Das Abfangen geschieht mit einem -Block. Am Ende des Arrays tritt eine Ausnahmen auf. Der Programmierer zählt den Index immer weiter hoch.B. Tritt in Java ein fehlerhafter Zugriff auf. allerdings braucht eine Ausnahme auch etwas Zeit. aber oft hält man sich an das Motto “never check for errorconditions that you cannot handle!” (“Prüfe nie auf Fehler. Der Standardwert bei Objekten ist Übungen zu Arrays Schreiben sie ein Programm. aber dazu in Abschnitt 8 mehr). zugreift? In C wird der Zugriff ausgeführt. Eine Exception ist eine Instanz der Klasse (genaugenommen einer Unterklasse davon. Natürlich sind Bereichsüberschreitungen nicht die einzigen Fehlerquellen .1: - I q D 4 6 Q h ² BBiSPB5‚ 3h 4 – Ff`Ph ‘ 29 ‚ i i G 5f5I f p 554 ã ¯ ® ª Ž à — ¨ ì  à — ¡ Ÿ ¡ © Œ ¨ ¦• )&BgFgdBg&gBdPBߣŽ ¯k)g™&FgB™™g÷£»dBBdPg§§F™ø¤dg€B&Ÿ ® ®ª Ž ⠗   Ž í ¡ Ž ╠Ž ª © ‘ ¡ © Œ ¨ ¦• ¨ ¨ Ž• £ Ž ¡    Þ ® Ž ©’Œ ¡ ¦Žà ú ù ª à ¡— rk~¢™PB¢&Pg(¿ P™&à ã ã ¯S®~öˬF¬™—(õ1€™`¢F¨B— ¢BB© PB§§g¢{¤dF€P&Ÿ © Ž ‘ ¿ — § Œ ª © ‘ ¡ Œ ¨ ¦• ¡ ¥ ’• £ Ž ¡    Þ ® Ž ¥¨¡ ª Ž‘Œ ¿ r~P€F$i™™`™¾ ¯ Ü È — ¡ © ˱‹gdŒ ¯ ã (i$(S~Ë~€™`€™¨Bk÷gdŒ ï Æ ° Æ Ì Æ ½ Þ È © Ž ‘ ¿ — § Œ — öõ ¡ © Þ  ¨ ‹F™¡ ´ wq A q U ID l A Q &0P5™£³P'I 7f5ˆ~“9`FiP'B…PS™il i i G I m † vt p Q 4 e I Q & A – A q U ID ‘ v µ w t A q U ID l A Q I † vt p Q 4 e I Q & A – A q U ID T³F}9PS´ ™i…P³~“9`FiP'B…PS™il i i G 5'5I 2 3h 4 – Ff`Ph A q p 3 PS`4 r . Arrays von Objekten 7. wird kein Konstruktor . oder weil man denkt. Die JVM nimmt immer den. die man sowieso nicht behandeln kann!”). Man kann sich hiermit die Vergleiche sparen. seit es aus Faulheit.10. so dass sich dies erst bei großen Arrays lohnt. ohne auf die Arraygrenze zu achten.1). Da es unterschiedliche Exceptions gibt.9. der beliebige Programmzeilen einschließen kann (siehe Beispiel 7. angegeben. unzureichender Speicher.nicht gefundene Dateien. wenn man die Arraygrenzen überschreitet. ärgern sowohl Programmierer als auch Anwender. dass das niemals schiefgehen kann. wie man nicht programmieren sollte. In Java wird jeder Zugriff auf ein Array zur Laufzeit auf seine Gültigkeit überprüft. vergessene Variableninitialisierung usw. aber die Praxis zeigt. Weisen sie den Fenstern unterschiedliche Größen zu und lassen sie danach alle Fenstergrößen ausgeben. in einem Array von 10 Integern auf den 11. dass Programmierer viel Zeit auf der Suche nach solchen Fehlern verbringen und Programme selten frei davon sind. Zwar liefern Funktionen in C Fehlercodes zurück. Dies verlangsamt zwar die Ausführung eines Javaprogrammes. die abgefangen wird und danach läuft das Programm normal weiter.9 Arrays von Objekten Array von Objekten unterscheiden sich nur wenig von Array mit integralen Datentypen.7. der dazu passt. 7. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen 3h 4 – FPPh f p 554 3h 4 – f p ™`Ph 554 Beispiel 7. dass mehrere Fenster erzeugt und in einem Array ablegt. die vom Programm abgefangen werden kann. z. so wird eine Exception (Ausnahme) erzeugt. was gut gehen kann oder aber “nicht behebbare Schutzverletzungen” und “blaue Bildschirme” erzeugt. Weil die Erzeugung eines Arrays nicht zu dessen Initialisierung führt. kann man in einem -Block auch beliebig viele -Blöcke verwenden. die vom Programm ausgewertet werden kann.10.10 Ausnahmen Was passiert. Dieses Beispiel zeigt.

Übungen zu Ausnahmen In Java hat man nicht die Wahl. s erzeugen .2). Wie man dort sieht erzeugt man die Exception mit dem Schlüsselwort gefolgt von einer Instanz der Exception. Zusätzlich oder alternativ zu einem -Block können sie auch einen -Block schreiben.10. oder einer Exception abgebrochen wurde.3: f i i – ID P5S™à e A q p 3 iP574 Beispiel 7. . 7.Lesefehler.11.3). 7.7. Machen sie ihr Array-Programm sicher.11 Übungen zu Ausnahmen 1. In den weiteren Kapiteln werden sie ihre Kenntnisse vertiefen und weitere Prinzipien der objektorientierten Programmierung kennenlernen. Wenn sie eine solche Methode aufrufen. Greifen sie absichtlich auf undefinierte Arrayelemente oder nicht mit blen zu.12 Zusammenfassung In diesem Kapitel haben sie gelernt wie sie Klassen definieren wie sie Instanzen erzeugen und benutzen wie sie Konstruktoren definieren wie sie Methoden überladen wie sie Klassenfelder und Klassenmethoden definieren wie sie Arrays erzeugen und verwenden wie sie Ausnahmen abfangen und erzeugen Sie sind jetzt in der Lage eigene Klassen selbst zu definieren und mit diesen objektorientiert zu programmieren.10.B. Dieser Block wird immer ausgeführt. indem sie auftretende Fehler abfangen. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen A Q B'I f i i – ID P7S'™à Beispiel 7. dann muss er abgefangen werden! Alle Lesemethoden eines können z. initialisierte Varia2.10. oder der Kompiler wird ihr Programm nicht akzeptieren! Wie gibt eine Methode jetzt an. egal ob der Block normal beendet wurde oder durch .10. müssen sie die entsprechende Exception mit abfangen. dass sie einen Fehler erzeugen kann? Schreiben sie einfach das Schlüsselwort gefolgt von der Exception hinter den Namen der Klasse (siehe Beispiel 7. Er eignet sie deshalb ideal dafür “Aufräumarbeiten” am Ende einer Routine zu erledigen (siehe Beispiel 7.wenn eine Methode einen Fehler erzeugen kann.2: A q p 3 BS74 3h 4 – f p ™`Ph 574 ã ã ¯S®Ë«å•F•F•ŒgP±™™`€F™&BBy­¢™Pg€&Pg¢™~&P±¢BB&¡ Ž ” ¨Ž‘ ¿ŽÝŽ Ž ü« ª ©’Œ ¡ ¦Žà ú ùýÿ ¾Ž © ¾’ ¨ ¿ Þ ® ¨Ž‘ ¿Ž Ý ª Ý }y™&`€g(i€Œ Ž é ™7€Ž é `&™Bí  ’à © ’ ¿¡Ž  Þ ©’Œ ¡ ¦Žà ú ùýÿ  ¾’ ¨ ¿¡ ®ª ¨Ž ⎡ ©ÿ ŽŒ ‘ ¡ ©Œ àŒ‘ ”¥ ¢™PB¢&Pg€&‹`€BB€™y£™g™FBdFB€gkBdËFg`F™¦ I q D 4 6 Q h ² ‚  PBiSBP5PB‰ 3h 4 – F`Bh ã ©Ž £¥0 ¨Ý ¥  €`&€1Fg&‡  Þ  ‘‘ — ©Œ p€FgPdBÝ ã Ž é ™S™dgF&g¨ ) ’à ££— ¨â’ (  Þ  ¨ k™F¡ 2 I p G 4 Q Q G ID 4 I q E – Q p 7S7Pp '5™SPPh `55h e A q p 3 iPS`4 o– Q p 4 a 4 G 6 I F55PS55&‰ f i i – ID B5S'™fà r r r r r r r 30 . ob man Fehlerzustände abfrägt und behandelt oder nicht .

bei der zweiten Möglichkeit müssen wir alle Fehlerkorrekturen an der Originalklasse in die Kopie übertragen..B.2 Unterklassen Wir wollen also unsere Window-Klasse um einen Fenstertitel erweitern. indem wir die neuen Fähigkeiten hinzuschreiben 1. 8.1). so dass niemand mehr “das Rad neu erfinden” muss.Kapitel 8 Erbung. um so schneller zum Ziel zu kommen. dass etwas von einer anderen Klasse geerbt wird und nicht diese einen beerbt. so dass wir mehr Speicher brauchen..1 Wozu Erbung? Bei der Entwicklung von heutiger Software kann man auf die Arbeit von vielen Bibliotheken zurückgreifen. wir kopieren die Klasse in eine neue Datei und verändern diese neue Datei Beide Möglichkeiten haben Vor. dass sie einen Fenstertitel besitzt. so aus (Beispiel 8. Wir haben jetzt mehrere Möglichkeiten -Klasse. das bestehende Programmroutinen erweitert und angepasst werden. Der Erbe ist also der Aktive . Häufig es so. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen A q U ID PS™il ‘ | | † i Q 4D ce s ID p 4 £5ЁSFiFˆS™i5Pa m A q U ID l e U I Q 4 ² Q A q U ID l Q i 4D c e e – i nBS™£‹'P5P³PSS™£P7Fik5'``h ‚ ‘ e † i Q 4D c ¥x5Fige m w e s ID p 4 a q Q i 4D c 4 Q e UD q ynˆ5™i5`»¤7'F5`PˆgfSg Beispiel 8. Bei der ersten Möglichkeit blähen wir den Code auf. Durch einen Übersetzungsfehler wird in anderer Literatur meistens von Vererbung gesprochen. als eigentlich notwendig. Der dazu notwendige Code sieht z.und Nachteile.wie im richtigen Leben. Pakete und Sichtbarkeit In diesem Kapitel lernen sie 8. Es ist allerdings so.1: Erweiterung der Klasse A q U ID PSS™£l A q U ID PS™il 2 d c Y b a a Y X 557`577W r r r r r r r ‚ wozu Erbung gut ist wie Variablen überdeckt werden wie Methoden überschrieben werden was Polymorphie ist wofür der gut ist wie sie die Sichtbarkeit von Klassenelementen verändern wie sie finale Elemente definieren 31 .2. wir verändern die 2. Als Beispiel wollen wir unsere -Klasse so erweitern. Durch Erbung können wir diese Nachteile vermeiden und den Code sowohl einfach als auch erweiterbar halten.2.

4. Von dieser Klasse werden alle Felder und Methoden geerbt. brauchen sie allerdings eine neue Syntax.3: Verwendung von in Konstruktoren A q U ID l Q i 4D PS&£P7'™ic Beispiel 8.h.2.3 Überdeckung und Überschreibung Sollten sie in einer Unterklasse neue Felder oder Methoden mit dem gleichen Namen einführen.3) in Konstruktoren sehr ähnlich ist: (siehe Beispiel 8.2. überdecken diesen. das den Namen der Klasse angibt. die den gleichen Namen wir Felder der Oberklasse haben. die man als Oberklasse bezeichnet.2: Benutzung der Klasse A q U ID P5™£l e D 3 7i74 ‘ w | p Q 4 e I Q & ID Q ¹| q Q i 4D c 4 Q C A §§`gP2™fS&ˤ`'Fi5PPe 974 ‘ wq A q U ID l Q i 4D c A Q I † A 4 A q U ID l Q i 4D &TPS™iP7'FnP³n7yBS™£B7'Fic e U I Q 4 ² fSP5`Q A q U ID l Q i 4D PS™iP7'Fc ã ¯ ®ª ¨Ž ¦ y£™PF¥  Þ ®ª ¾ ©Œ “Ž‘ ¡Œ Ë)§€’ é d`&&B€Pì p Q 6 G `'5Fe 32 .2. wir können jetzt schreiben (siehe Beispiel 8. müssen sie ebenfalls das Schlüsselwort verwenden: Wo liegt jetzt der Vorteil einer überschriebenen Methode? @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen p Q 6 G `'5™e p Q 6 G `5Fe ‘ wq Q 4 D Q 4 Q sC p Q 6 G e † &¥Ffp `“`'5F·…– „ ‘ Q 4D Q DC p Q 6 Ge † ’F'p d`'5F·…– „ 2 p Q 6 G `5Fe Auch hier muss ã ¯  È ‘ Ž¡Œ ì fk™gg€P¢ ¯ ® Ž ¿! Œ Æ Ž ¡Œ Ž ¨ ¼Œ Æ Œ Æ Œ ª ¨Ž ¦ ~P¢%¢èig€ggg¢ë££ë£©ê£™PF¥  Þ ® Ž ¿! Œ ¡ ©Œ Æ Ž ¡Œ Ž ¨ ¼Œ ¡ ©Œ Æ Œ ¡ ©Œ Æ Œ ¡ Œ Æ  ⠌ ¨¡Ÿ ª ¾ ©Œ “Ž‘ ¡Œ rpP¢¡¢kBdèig¢Bgg¢kBdë§$pBd$£©pB© ëfpB© PF&觀’ é d`&&B€Pì in der ersten Zeile stehen! p Q 6 G P'5Fe Beispiel 8. Konstruktoren Sie können alle Methoden und Felder der Originalklasse verwenden.2). Überdeckung von Feldern Felder einer Unterklasse. d. Hierbei ist es nicht notwendig. Das Verhalten ist bei Feldern und Methoden unterschiedlich. Wenn sie die Konstruktoren der Oberklasse verwenden wollen. die der Verwendung von (siehe Beispiel 7. Felder zu überschreiben. so sind diese nicht mehr direkt sichtbar. Überschreibung von Methoden Im Gegensatz zur Überdeckung von Feldern macht das Überschreiben von Methoden einen Sinn und wird sogar sehr häufig verwendet. Um auf die Methode der Oberklasse zuzugreifen.3. dass der Typ des Feldes identisch ist. 8. ohne diese neu implementieren zu müssen.8. Um auf das überdeckte Feld der Oberklasse zuzugreifen.2. wie in ihrer Oberklasse. definieren sie diese in einer Unterklasse genauso. da ihre Programme dadurch unübersichtlich werden. so dass diese hier getrennt behandelt werden.3). Die Klasse heißt Unterklasse der Klasse . die erweitert wird. Überdeckung und Überschreibung Wie sie sehen. müssen sie das Schlüsselwort verwenden: Sie sollten es möglichst vermeiden. Um eine Methode zu überschreiben. steht dort das Schlüsselwort .

muss man die Instanz Casten . Stellen sie sich vor. welche mit Titel. Fügen sie in und Text ausgibt. enthält. “weiß” das Objekt.h. Jedes abgeleitet ist und jede Klasse dieser Fenster besitzt eine eigene Klasse. Um solche Laufzeitfehler zu vermeiden. um welche Art von Fenster es sich handelt. Wenn sie jetzt eine überschriebene Methode auf diesem Objekt aufrufen. die jeweils von besitzt die Methode . dann wird nicht die Methode aus . Ist die gewünschte Klasse nicht in der Oberklasse enthalten.4. ohne zu wissen. einer Unterklasse davon. sie wollen ein Programm schreiben. brauchen sie an ihrem Programmcode nichts zu ändern! Casting Wenn man auf die erweiterten Methoden einer Unterklasse zugreifen will. Polymorphie 8. fester Größe usw. das viele unterschiedliche Arten von Fenstern verwaltet. 2.8. braucht ihr Programm nur bei jedem Fenster in der Liste die Methode aufzurufen. sollte man herausfinden. umwandeln: Man schreibt den Namen der gewünschten Klasse in Klammern vor die Variable. sondern die aus aufgerufen! Dieses Verhalten nennt man Polymorphie und erleichtert die Programmierung von grafischen Oberflächen sehr stark.5 Übungen zur Polymorphie jeweils eine Instanz der beiden Klassen und weisen sie zu. Selbst wenn nach der Fertigstellung des Programmes neue Fenstertypen hinzugefügt werden. Um jetzt alle Fenster auf dem Bildschirm darzustellen. Er liefert oder zurück. jenachdem ob die angegebene Variable eine Instanz der angegebenen Klasse. die diese (hoffentlich) enthält. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen wq A q 3 €0P'Fe w&qTAPq'3Fe A q U ID BS™£l – g – •C 4e Q c A q U ID S`5yuF'SP5™£l A q U ID l Q i 4D BS™£B7'Fic 1. bzw. welche ohne Titel. die zuvor an eine Variable vom Typ der Oberklasse zugewiesen wurde. Rufen sie auf beiden die Methode die Methode ein. mit Scrollbalken. d. also Obwohl sie jetzt eine Variable vom Typ haben. dass es in Wirklichkeit ein ist. Alle Fenster verwalten sie in einer Liste vom Typ . Erzeugen sie in diese an Variablen vom Typ 3. 8. die den Klassennamen als Q e i – P5Sà A q U ID l Q i 4D P5™£P`'Fic A q U ID PS™il A q U ID PSS™£l Q G p '`54 A q U ID PS™il A q U ID PSS™£l à q Q h I – 4 e I 75BiPg™D C C C @ 55Õ5@ ‚ ‘ A w A q U ID l Q i 4D cq † A 4 A q U ID l Q i 4D }£PS&£P7'™i)Õn`yPSS™£P7Fic m w A q U ID l Q i 4D c à q Q h I – 4 e I A q à jnPS™iP7'F~75BiPg™D ؒgD ‘ A w A q U ID l Q i 4D c † A 4 A q U ID l Q i 4D 0r£BS™£B7'Fiyq n7yBS™£B7'Fic ‘ wq A q U ID l Q i 4D c A Q I † A A q U ID &0P5™£P`'FiÏP'j·jBS™£l A q U ID PSS™£l ‘ wq A q U ID l Q i 4D c A Q I † A A q U ID &0P5™£P`'FiÏP'j·jBS™£l 2 A q U ID l Q i 4D PS™iP7'Fc A q 3 P'™e A q U ID P5™£l A q 3 B'Fe à q Q h I – 4e I 75PPgi&D 33 . ob eine Umwandlung überhaupt möglich ist.4 Polymorphie Sie können Instanzen von Unterklassen an Variablen vom Typ der Oberklasse zuweisen. so tritt ein Laufzeitfehler auf. auf. Hierfür gibt es in Java den -Operator. die richtigen Methoden werden automatisch von der JVM herausgesucht und aufgerufen.

dass die Klassen und ins Unterverzeichnis sollen. damit die Klassen an der neuen Position gefunden werden: jedes Auftreten von muss in geändert werden. diese Dateien in Unterverzeichnisse zu ordnen. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen d c Y 755b d c Y b a a Y X 555P575W d c Y b a a Y X 555`775W d c Y b a a Y X 575`5`5W 2 d c Y b a a Y X 557`577W Der Q U G i h I Sg`i™D erlaubt nur die Abkürzung der Klassennamen. Welche Fehlermeldung tritt aus C/C++ d c Y b a a Y X 557`577W 34 8. also Die Klasse muss jetzt natürlich auch geändert werden. muss in der ersten Zeile von und folgendes stehen: A q U I D lC A q U I D AC D G PSS™£{9BS™£–1£7s A q U ID l Q i 4D P5™£P`'Fic A q U ID BS™£l 4 p q 6 o 5`'¢D ‘ A q U I D AC D G s Q s – E h – 0PS™i{1£7p`g'6 – g – •C A q U ID l Q i 4D S`5V9PS&£P7'™ic 4 e Q c A q U ID gSPSS™£l ‘ A q U I D AC D G s 4 p q 6 o PSS™£{1i7j5`'¢D 4 p q 6 o 5`''dD und A q U ID l Q i 4D P5™£P`'Fic e e – i 5'7Ph C A q U ID PSS™£l D C 6 A 8 8 6 4 75@B@9753 8. während im Hauptverzeichnis bleibt. Versuchen sie beide Instanzen nach auf? zu casten. sondern aus einer Sammlung von -Dateien.6. Nur deshalb kann man in jedem Verzeichnis Befehle benutzen. der den Pfad zu den Klassen angibt. Da dies sehr viel Tipparbeit ist. kann man mit dem Schlüsselwort Verzeichnisse bzw. können sie auch komprimierte ZIP und JAR-Dateien in den aufnehmen. wie auch beim Aufruf. Pakete angeben. die auf der Suche nach einem Programm durchforscht werden sollen. aus denen heraus Java-Programme laufen können.! – g – •C A q U ID `5yuPS™il Um dem Kompiler die neuen Postitionen mitzuteilen. Wir nehmen jetzt einmal an. Packages und der 4e Q c A q U ID F'SP5™£l —g˜™—™{•§¾€’ é dŒP&Ž™B¡€B&P€’ é d`€™`&⠊ © “ ‘ Œ ì… ¾ ©Œ ¾…Œ ¥ — • g˜™—™Š{§¾€’ é dŒP€P€’ é d`€™`&â © “… ¾ ©Œ ¾…Œ ¥ —g˜™—&{•§€BFg€’ é © `“ Š ¡ Žì¾ Œ A q U ID A s D G PS&£BP£`s 4 p q 6 o 5`''dD Q s – Eh – S`g'6 . Damit die JVM die Klassen in den Unterverzeichnissen findet. Wie sie im Kapitel 13. ist es nicht mehr egal. zu welchem Verzeichnis eine Klasse gehört. damit das ganze nicht unübersichtlich wird. obwohl sich die Klassen in einem Unterverzeichnis befinden. muss man angeben. Für “normale” ausführbare Dateien gibt es den . Das Java-Äquivalent dazu ist der . auf deren Klassen wie auf lokale Klassen zugegriffen werden soll: Jetzt kann man die alte Schreibweise beibehalten.ä.6 Packages und der A q U ID l Q i 4D PS&£P7'™ic 4.Im Gegensatz zu “herkömmlichen” Programmen besteht ein Java-Programm nicht aus einer “EXE-Datei”. Da wir jetzt mit Unterverzeichnissen arbeiten.3 noch erfahren werden. in welchem Verzeichnis wir uns beim Starten der JVM befinden. Ab einer gewissen Anzahl ist man geneigt. Im Gegensatz zu wird kein Code eingelesen. Deshalb mussten sie im Kapitel 2 den entsprechend setzen. die sich in anderen Verzeichnissen befinden. sowohl bei der Definition. der Verzeichnisse angibt. Variablen definiert o. ebenso jedes Auftreten von .

8.7. Sichtbarkeit Der wird unter Windows und Unix unterschiedlich definiert. Unter Windows ist der Backslash ( ) das Pfadtrennzeichen und mit dem Semikolon ( ) werden einzelne Pfade getrennt. Unter Unix wird dafür der Forwardslash ( ), sowie der Doppelpunkt ( ) verwendet. Der Grund hierfür ist, dass sich Java an der Definition des für ausführbare Dateien orientiert, der unter Windows anders als unter Unix definiert wird.

8.7 Sichtbarkeit
Bis jetzt war es immer so, dass man auf alle Felder und Methoden einer Klasse von aussen zugreikeinen Zugriff fen konnte. Normalerweise ist dies nicht erwünscht, z.B. braucht auf . Ausserdem soll niemand von aussen auf die Felder direkt zugreifen dürfen, sondern nur auf die entsprechenden Methoden, damit die Werte auf Fehler (z.B. negative Breite) geprüft werden können. , und , die die ZuAus diesem Grund gibt es die Schlüsselwörter griffsmöglichkeiten anderer Klassen einschränken und einfach vor die entsprechende Methode oder Feld geschrieben werden. public Diese Zugriffsmethode bedeutet, dass von aussen ohne Einschränkung auf die entsprechende Methode oder Feld zugegriffen werden darf. protected Nur Unterklassen und Klassen im gleichen Verzeichnis dürfen darauf zugreifen. private Niemand ausser der eigenen Klasse darf darauf zugreifen. “package” Wird keines der obigen Schlüsselwörter angeben, so wird die Standardsichtbarkeit verwendet, die nur Zugriffe von Klassen innerhalb des aktuellen Verzeichnisses (package) erlaubt. definieren, ansonDamit eine Klasse von aussen sichtbar ist, müssen sie diese auch als sten ist sie nur im eigenen Verzeichnis sichtbar. Beispiel Die Definition erlaubt nur der eigenen Klasse den Zugriff auf

.

8.8 Übungen zur Sichtbarkeit
1. Nach dem Verschieben in die Unterverzeichnisse lassen sich ihre Klassen nicht mehr kompilieren oder ausführen. Warum?

2. Machen sie die Klassen wieder lauffähig und verstecken sie alle nicht notwendigen Methoden und Felder.

@ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553

c 2000 iKu Netzwerklösungen

Q 4 – gD p PFiS6

8

A q U ID l Q i 4D P5™£P`'Fic

h D i h G 7f556

‘

d c Y 555b

U Q 4 h Q 4 q p h D i h G `g'PS6 `'f556

Q 4D Q FfSp D „

@

‘ Q 4D Q D 4 ID Q 4 – gD p ¤Ffp ÔS™n`SFiS6 „

2

p Q 4 e I Q & i 3 – R I Y `giB¡fP57FD

Ä

d c Y b a a Y X 555P575W

35

8.9. Finale Elemente 3. Zwei Klassen in unterschiedlichen Verzeichnissen haben den gleichen Namen. Wie können sie Instanzen von beiden innerhalb einer Klasse erzeugen, ohne Namenskonflikte zu bekommen?

4. Welchen Grund kann es dafür geben, dass die Sichtbarkeit einer überschriebenen Methode in einer Unterklasse nicht eingeschränkter sein darf, als die der Methode in der Oberklasse? (Hinweis: Polymorphie)

8.9 Finale Elemente
“Manche Dinge ändern sich nie!” - in Java haben sie die Möglichkeit, solche Tatsachen festzuschreiben. Wenn sie das Schlüsselwort vor ein Feld oder eine Klasse schreiben, dann darf dieses nicht mehr verändert werden. Finale Felder definiertes Feld muss bei der Initialisierung mit einem Wert belegt werden, der Ein als dann nicht mehr verändert werden kann, entspricht also dem einer mit markierten Variablen in C.

Finale Methoden definiert werden - diese können dann in Unterklassen nicht Auch Methoden können als mehr überschrieben werden. Ein Vorteil hiervon ist, dass die JVM finale Methoden schneller aufrufen kann, da sie nicht überprüfen muss, ob sie in einer Unterklasse überschrieben wurde.

8.10

Abstrakte Methoden und Klassen

Nicht immer will oder kann man eine Implementierung einer Methode direkt angeben. Ein -Klasse, die alle Grundeigenschaften eines Fensters (Höhe, Beispiel hierfür wäre eine Breite usw.) definiert und die Oberklasse für alle Arten von Fenstern ist, selbst aber nicht am Bildschirm dargestellt werden kann, weil sie zu allgemein ist. Diese Klasse kann die Methode nicht sinnvoll implementieren, zugleich soll sie aber vorhanden sein, damit man durch Überschreibung und Polymorphie jede Art von Fenster als verwalten und darstellen kann. Statt jetzt bei eine unsinnige Methode anzugeben, läßt man diese einfach weg und definiert die Methode als .

Man sieht, dass hier statt den geschweiften Klammern nur ein Strichpunkt angegeben ist. Da man die Methode auf einer Instanz von Window aufrufen kann, muss man die ganze Klasse als

@ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553

c 2000 iKu Netzwerklösungen

A q U ID P5™£l

4 e I q giPPh

i – ID S'&Ã

‘ wq A q 3e UD q g 4 h – p 4 e h – h D i h G §&0P'™·Ffyg5giB~7'f576

C C @ 75C 7@ m A q U ID l e e – i h 4h – p 4e h – h D i h G nPS™ip7'7`nF'5gP~7'f756

A q 3 PFe

4 h – p 4 e h g'S5giP–

‘
36

A q U ID PS&£l

i – ID S'™fÃ

   555 2

† 4 p q bD 4 ID i – ID ³5`™ÐS&…S'™à A q U ID PSS™£l A q 3 P'Fe ‚

i – ID S™Ã

8.11. Interfaces definieren. Jede Klasse, die mindestens eine abstrakte Methode besitzt, muss selbst als abstrakt definiert werden! Eine abstrakte Klassen kann nicht mehr instanziiert werden, d.h. ergibt eine Fehlermeldung beim Kompilieren. Implementiert eine Unterklasse alle abstrakten Methoden, kann mal allerdings schreiben Hierdurch kann man alle Vorteile der Polymorphie verwenden und verhindert gleichzeitig, dass ein Programmierer eine allgemeine Oberklasse instanziiert und dann zur Laufzeit einen Fehler bekommt.

8.11

Interfaces

Sind alle Methoden einer Klasse abstrakt, so kann man die Klasse auch als Interface (Schnittstelle) definieren

Ein Interface beschreibt alle Methoden und Felder, die eine Unterklasse besitzt, ohne dafür , die eine Implementation zu liefern. Ein Beispiel hierfür ist die Klassse allgemeine Methoden zur Dateneingabe definiert. Eine Klasse kann sagen, dass sie ein Interface implementiert, also alle Methoden des Interfaces zur Verfügung stellt.

Hiermit wird sichergestellt, dass alle Methoden von von der Klasse zur Verfügung gestellt werden; sollte eine Methode vergessen werden, gibt der Kompiler eine Fehlermeldung aus. Eine Klasse kann beliebig viele Interfaces implementieren; diese werden dann mit Komma getrennt hinter dem Schlüsselwort angegeben. Anwendungen Sie können ein Interface als Parametertyp für eine Methode angeben. Auf diese Weise stellen sie sicher, dass übergebene Objekte bestimmte Eigenschaften haben müssen (eine bestimmte Schnittstelle aufweisen), die sie in ihrer Methode benötigen.

8.12

Mehrfacherbung

In Java kann eine Klasse nur eine Oberklasse haben. Wollen sie weiterem mehreren Klassen ableiten, so müssen diese Interfaces sein, die ihre Klasse implementiert.

@ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553

c 2000 iKu Netzwerklösungen

A q U ID l Q i 4D BS™£B7'Fic

A q U ID P5™£l

m Q i h – R D i – D p Q ~7fBSg'Sgi`5a

A q U ID PSS™£l

‚ C C @ 57C 7@ A q U ID l e 4 I Q oQ i 6 o BS™£™SPF7f'dD A q U ID l p Q 6 G a e U I Q 4 ² Q A q U ID l Q i 4D c e e – i h h D i h G P´ 5™£7P'5Pp'P5P³PSS™£P7Fip5'7Pj7'f576

e 4 I Q oQ i 6 o fSPiF`f'¢D

A q U ID l Q i 4D PS™iP7'Fc

Beispiel 8.11.2:

implementiert das Interface

4 G 6 I‰ – 4 – uC q C – g – 575™fP“0BD 0`5•

‚ C C @ 75C 7@ m A q U ID l e 4 I Q oQ i 6 oD A q U ID l Q i 4D c e e – i h h D i h G nPS™i±SPF7f'dˆPSS™£P7Fik5'``j7'f756

A q U ID PSS™£l

Beispiel 8.11.1:

 4 3h D I 4 3 Q s @ uSF`£jSP5@

‘ wq A q U ID l Q i 4D c A Q I † A A q U ID &TPS™iP7'F…B'ÏnjPS&£l

‘ wq A q 3e UD q g 4 h – p 4 e h – h D i h G §&0P'™·Ffyg5giB~7'f576

‘ wq A q U ID l A Q I † A A q U ID &TPS™iÏB'ÏnjPS&£l 2

C C @ 75C 7@ m A q U ID l Q h – à p Q 4 ID h D i h G nPSS™£pPSS`5™³7'f756

4h – p 4e h g5giB– ‚

als Interface

37

Klassenfelder können sie vor Zugriffen von “aussen” schützen und so die Gültigkeit der Daten sicherstellen.13.8. Was müssen sie machen.13 Übungen 1. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 2 d c Y b a a Y X 557`577W r r r r r r r r wozu Erbung gut ist wie Variablen überdeckt werden wie Methoden überschrieben werden was Polymorphie ist wofür der gut ist wie sie die Sichtbarkeit von Klassenelementen verändern wie sie finale Elemente definieren was abstrakte Methoden und Klassen sind c 2000 iKu Netzwerklösungen 38 . bestehende Klassen weiterzuverwenden und ihre Projekte auf Unterverzeichnisse aufzuteilen.14 Zusammenfassung In diesem Kapitel haben sie gelernt Sie sind jetzt in der Lage. um die Methoden einer abstrakten Klasse verwenden zu können? 8. Übungen 8.

Eine Hauptanwendung von Elementklassen ist die Kapselung von Daten. die wir bis jetzt kennengelernt haben. Klassen noch weiter zu unterteilen. d. definiert werden: Elementklassen sind von aussen über den Namen der umschließenden Klasse erreichbar.1 eingeführt wurde. obwohl es in Java keine Zeiger auf Methoden gibt. die als deklariert sind.Kapitel 9 Innere Klassen In diesem Kapitel lernen sie 9. 9. definiert: Lokale Klassen können.h. Zusätzlich können sie auch auf Variablen und Parameter der umschließenden Methode zugreifen. Es erlaubt die einfache Implementierung eines Callback-Prinzips.2 Elementklassen Elementklassen sind innere Klassen. 9. die z. wie Elementklassen auch. wie eine lokale Variable. Alle inneren Klassen dürfen (mit kleinen Einschränkungen) auf Variablen und Methoden der sie enthaltenden Klasse zugreifen. also in diesem Fall als . so wie eine Methode. will aber nicht immer eine eigene ToplevelKlasse dafür anlegen.3 Lokale Klassen Lokale Klassen werden innerhalb eines Codeblocks. die innerhalb des Klassenkontextes. erlaubt nur die Angabe eines Objektes. passt sehr gut zum neuen EventModell. das mit AWT 1. in einen geschrieben werden sollen. d.B. wo sie gebraucht werden. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen p q 4h Q `F'‡ i – ID S™à ‚ C C @ 57C 5@ m I Q I I‰ e e – i h h D i h G nP5™Ï5'7Pj7'f576 m I Q e e G Y e e – i h h D i h G nPP7i7k5'``j7'f756 I Q I I‰C I Q e e G P'7™d9PB5i7Y 2 C C @ 75C 7@ p q 4h Q `g'S‡ r r r ‚ welche Arten innerer Klassen es gibt wie sie innere Klassen definieren wofür sie innere Klassen einsetzen können 39 . Alle Klassen. also muss man mehrere Objekte zu einem zusammenfassen.1 Was sind innere Klassen? Ab Java 1. auf Variablen und Methoden der umschließenden Klasse zugreifen.h.1 ist es erlaubt. Klassen innerhalb von Klassen zu definieren. Damit ist es möglich. als es Packages erlauben und private Klassen nur dort zu definieren. Eine spezielle inneren Klasse. bezeichnet man als “Toplevel-Klasse”. die “anonyme innere Klasse”.

Anonyme innere Klassen 40 2 ‚ ‚ ‘ w wq I Q I I‰ A Q I q Q U q 3 4 Q ¹ Q p Q 4D Q §j&0P'7™xP'$¤S7'```PFf'A ‚ C C C @ 55Õ5@ m I Q I I‰ e e – i h h D i h G nP'7™Ï5'7`j`'f556 ‚ ‚ . Hier kann sich helfen. Betrachten wir folgendes Beispiel: ‘ p – h à D Q p s G R E 4 3h D I † p – h ÃD Q p s G R 4 ID i – ID 0P'Pgf55``FS™7£jj`'`Ff5SP…5™nS'™à HPp`–Sh`ÃgDfQp7sSG`R`EF453Fh7£VIPSyS557F'`Q D IH I q g s I G I 3h Q p @ 5@ „ ‘0pB–'`gfS5S``#SF7£³S™D h à D Q p s G R E 4 3h D I 4 I m wq Q U q 3 4 Q o U D q g h D i h G k&¤S77`ipgfSk7'f576 m I Q e e G Y e e – i h h D i h G nPP7i7k5'``j7'f756 Dies ist eine Einschränkung. indem man den Wert zuerst berechnet und dann einer finalen Variable zuweist: m w p – h ÃD Q p s G R 4 ID i – ID j…`'`Ff5SPnS&…S'™à ´ ‚ ‚ ‚ C C C @ 55Õ5@ m I Q I I‰ e e – i h h D i h G nP'7™Ï5'7`j`'f556 ‘ † p – h ÃD Q p s G R E 3h G – 4 ID i – ID iw p`'`Ff5SP`GFiBn5™nS'™à ‘ p – h à D Q p s G R E 4 3h D I E 3h G – 4 I 0P'Bgf55S``#SF7£gGFiPnS™D p – h à D Q p s G R E 4 3h D I 4 ID q Q U q 3 4 Q o U D q g h D i h G B'`g'5S`PFSF7iÏS&™¤S77`ipgfSk7'f576 m I Q e e G Y e e – i h h D i h G nPP7i7k5'``j7'f756 ‚ ‚ ‚ C C @ 55C 5@ mnP'5&…7'7`j7f556 I Q I I‰ e e – i h h D i h G m wq Q U q 3 4 Q o U D q g h D i h G k&¤S77`ipgfSk7'f576 m I Q e e G Y e e – i h h D i h G nPP7i7k5'``j7'f756 9.4.4 Anonyme innere Klassen c 2000 iKu Netzwerklösungen @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 9.‚ ‚ Q U q W p Q U I Q hD Q p 3h e p Q h ó @ S75BSP'&fSF7`'55@ m wq Q U q 3 4 Q ¹ Q p Q U I – U D q g h D i h G Ë&1S7'7P``5PÏgfk`'f556 m Q e e – i v Q p Q U I Y e U I Q 4 ² Q I Q I I‰ e e – i h h D i h G ~P5'7``SS7kfPS5`…P'7™Ï5'7`j`'f556 m w p – h ÃD Q p s G R 4 ID i – ID j…`'`Ff5SPnS&…S'™à B'`g'5S`PFSF7iÏS&™¤S77`ipgfSk7'f576 p – h à D Q p s G R E 4 3h D I 4 ID q Q U q 3 4 Q o U D q g h D i h G ´ m I Q e e G Y e e – i h h D i h G nPP7i7k5'``j7'f756 Anonyme innere Klassen sind diejenigen. wenn der Wert der Variablen erst berechnet werden muss. die in der Praxis manchmal sehr störend sein kann. die in der Praxis am häufigsten verwendet werden.

in dem die Grafikbibliothek von Java beschreiben wird. m w p – h ÃD Q p s G R 4 ID i – ID j…`'`Ff5SPnS&…S'™à p Q 6 G `5Fe ‘ w ‚ ‚ ‘ wq 4D ² QC oQ 4 e f &TF`yzFSg`a m jwÔjSPS5SPBg$¤7B`SSPSPBg'Ïgfk`'f556 Q 4 I Q g ‚ I q D 4 h Y q U Q o p q à p Q b I q D 4 h – U D q g h D i h G mË&qT`IPQg7fPBiFÏP'(T`SPSgPgBgf757yuPSP7Q S5h w p Q 4 e D X I q D 4h Y A Q I q p Q I Q 4 e D X I q D 4 h Y U U –C I Q U I Q 4 G „ ‘ w | I Q U I Q | q I q 4 4 §~PSSP5Q ‹TP5SG B'³jPSP7Q S5jB5SG A Q I † I Q U I Q 4 G h I q 4 4 „ „ „ „ A Q e D 3 P'I 7£74 ´ Q I I I '57™‰ ‚ ‚ ‘ w ‚ ‚ Q U q W p Q U I Q hD Q p 3h e p Q h ó @ S75BSP'&fSF7`'55@ m wq Q U q 3 4 Q ¹ Q p Q U I – U D q g h D i h G Ë&1S7'7P``5PÏgfk`'f556 m Q e e – i v Q p Q U I Y A Q I q Q U q 3 4 Q ¹ Q p Q 4D Q ~P5'7``SS7ÏP'$¤S7'```PFf'A p – h à D Q p s G R E 4 3h D I 4 ID q Q U q 3 4 Q o U D q g h D i h G B'`g'5S`PFSF7iÏS&™¤S77`ipgfSk7'f576 m I Q e e G Y e e – i h h D i h G nPP7i7k5'``j7'f756 Q e e – i v Q p Q U I P5'`'``57Y 2 p Q I Q 4 e D X I q D 4 h P'Pg`PBgY Q U q 3 4 Q ¹ Q p Q 4D Q S77``S`FfA Q U q 3 4 Q ¹ Q p Q U I S`'7`P`SB– 41 . Da dies in Java nicht möglich ist. muss man für jeden Callback eine eigene Klasse definieren. diese instanziieren und an die andere Klasse übergeben. bekommt die innere Klassen keinen Namen zugewiesen. wenn das Ereignis eintritt. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen U Q o p q à p Q b I q D 4h 7ig`SS`SSPBiF'– Per Konvention der Bibliothek wird bei einem Druck auf den Knopf die Methode aller registrierten aufgerufen. Mehrdeutigkeiten können auftreten. Wir greifen hierbei auf das Kapitel 10 vor. Neue Syntax für innere Klassen Hier wird die Klasse zur Klasse erweitert und dabei die Methode überschrieben. wie man an dem folgenden Beispiel sieht. Diese neue Klasse wird instatiiert und als Argument an übergeben. erlaubt Java keine Zeiger auf Methoden. der bein Druck auf den Knopf ausgeführt werden soll. wenn er gedrückt wird: 9. Callback bedeutet. weshalb sie “anonym” genannt wird. die aufgerufen werden soll. um Mehrdeutigkeiten zu vermeiden. Mit einer anonymen inneren Klasse kann man sehr leicht Programmcode angeben. dass man sich bei einer anderen Klasse “registriert” und bei bestimmten Ereignissen benachrichtigt wird. Es geht darum. Dies hat den Vorteil.5. der das Java-Programm beendet. und erweitert. einen Knopf zu realisieren. Mit anonymen inneren Klassen ist dies sehr einfach möglich. Anwendung anonymer Klassen Wofür braucht man anonyme Klassen? Wie oben bereits erwähnt.9. wenn umschließende und umschlossene Klasse die gleichlautende Methoden oder Variablen besitzen. Mit einer anonymen inneren Klasse lässt sich dieser Programmcode vereinfachen: Wie man sieht. wie man einen “Callback” realisieren soll. Damit steht man vor dem Problem. In C/C++ wird hierzu ein Zeiger auf die Methode übergeben.5 Neue Syntax für innere Klassen Mit den inneren Klassen wurde gleichzeitig die Syntax von . dass man sich für solche Klassen keinen Namen auszudenken braucht. sondern nur Instanzen von Klassen.

Will man jetzt auf eine gleichlautende Variable in der umschließenden Klasse zugreifen. sondern auf die gleichlautende Variable im Klassenkontext zugreifen will. Übungen Neue e D 3 7i74 Neue Dies erzeugt eine Instanz -Befehl erlaubt jetzt die Angabe der umschließenden Instanz: -Syntax -Syntax von innerhalb der Instanz von I Q e e G PB5i7Y – I Q I I P'5™‰ D f– A Q B'I Neue 9. dass man nicht auf eine lokale Variable. Auch hier kann man die umschließende Instanz angeben: ‘ wq I Q I I‰ A Q IC – † D – I Q I I ‰C I Q e e G €0P'5&ÔP'{0…~f³P5™d9BP5i7Y ‘ wq I Q e e G Y A Q I † – I Q e e G &0PB5i7ÏP'j……BP5i7Y A Q B'I Der Vor das wird einfach der Name der umschließenden Klasse geschrieben. auf deren Variable man zugreifen will. muss man die neue Syntax benutzen: ‚ ‘ Q s I Q ¹ DC e D 3 4C I Q e e G Y I p G 4 Q 1SgFd¤`£7“9BP5i7³`S7`p m wq I Q e e G Y Q s I Q ¹ 4 Q s 4 I ‹¢0PP57`SB5`ÏS™D ‚ ‘ Q s I Q ¹ C e D 3 4 I p G 4 Q ’SSPFD ¤7£7³`S7`p 4 3h D I pD A I Q i i q A e – U @ SF7iÏFijP75SpS³7@ ’5PFÔS™D ‘ Q s I Q ¹D 4 I m wq I Q I I‰ Q s I Q ¹ 4 Q s 4 I Ë&0P'7™fSB5`ÏS™D ‚ ‘ Q s I Q ¹D 4 I ’SSPFxS™D m I Q I I‰ e e – i h Q 4 – gD p ˆP'5&³5'7`…S`Fi56 ‘ Q s I Q ¹D 4 I ’SSPFÔS&D m I Q e e G Y e e – i h h D i h G nPP7i7k5'``j7'f756 9. e D 3 7£`4 erlaubt es anzugeben. Schreiben sie ein Programm. 42 2 p Q 6 G `'7Fe e D 3 7£`4 ‚ . das in einem Array Namen und Altern von Personen verwaltet.6. Verwenden sie zur Speicherung eine innere Klasse -Syntax c 2000 iKu Netzwerklösungen @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 .6 Übungen 1.‚ ‘ wq p Q 6 G C &T`5Fe 0– m w – I Q e e G Y q I Q I I‰ h D i h G y·…PP5i`­TP'5™³`'f556 Das gleiche gibt es auch für den Aufruf von Konstruktoren.

Die Widgets sind hierbei der jeweiligen Plattform angepasst (Look & Feel ). z. Alle Komponenten hierbei Unterklassen von . Zum Beispiel kann ein (Fenster) einen (Knopf) und ein (Fläche) enthalten. einzelnen Komponenten werden mit hinzugefügt. nicht umbrochen. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen w h 4 I Q I q 6 oq W q U U nn5P'P'FS­’57– w h 4 I Q I q 6 oq W q U U ……5P'P'FS­’57– Das Hinzufügen geschieht mit 2 4 G q f – X U D p 5P`S7gi7R 4 G q f – X UD p 5P`S7gi7R i Q h – S'BSX Ein 4 G q f – X A q i SPPSP7& Das kann man als “zentriert mit Zeilenumbruch” beschreiben. denn für eine Darstellung am Bildschirm muss das AWT noch wissen. Damit allein ist es nicht getan. (dies bezeichnet man als Widgets ). so dass man sich um die Größe der Fenster keine Gedanken zu machen braucht. Jeder Fläche kann man einen eigenen Layout-Manager zuordnen: FlowLayout GridLayout Das ordnet die Elemente in einem Gitter mit gleich großen Zellen an. Es gibt mehrere Layout-Manager. : 4 I Q I q 6 oq SP'P'FSW wq E h – &Tg'6 i Q I – S'PSb e I q 4 4 iB5SG ‘ w wq 4 G q f – X A q i & A Q I q 4 G q f – X 4 Q C ~€TSPPSP7QPêT5P`S5`Pe à ‘ w | p Q 4 e I Q & ID Q ¹| q Q o– p & A Q I † à Q o– p ~§PgiPS2™f&‹1iF5PÏÏyiF5& „ I q 4 4 P55G „ Q o– p iFS5& i Q I – S'Pb 43 .h. Der Benutzer zieht auch einen Vorteil daraus. so groß machen kann. Die Layout-Manager passen sich dynamisch der Fenster. mit der unter Java grafische Benutzeroberflächen (GUI) erzeugt werden. (Text) wird immer als ganzes aufgefasst. Diese Aufgabe übernehmen die LayoutManager . Eingabefeldern usw. mit wird das Fenster auf die minimal notwendige Größe skaliert. unter MS-Windows hat man Windows-Knöpfe. Das Ergebnis ist eine baumartige Struktur. 10. und das kann seinerseits wieder einen oder mehrere enthalten.h. Beim Erzeugen des s muss man die Anzahl der Reihen und Spalten des Gitters angeben. unter der die JVM läuft. die das Verhältnis “Was ist worin enthalten” der Komponenten untereinander angibt.1 Layout-Manager Unter AWT werden grafische Elemente anderen zugewiesen. Knöpfen.B.jeder Benutzer fühlt sich direkt “heimisch”. einen Dateidialog. d.Kapitel 10 AWT Das AWT (Abstract Windowing Toolkit) ist eine Klassenbibliothek.und Widgetgröße an. wie er ihn braucht und nicht damit leben muss. weil er alle Fenster. Sie erlaubt das Erzeugen von Fenstern. um so eine Gliederung zu erreichen. die unterschiedliche Anordnungen zur Verfügung stellen. d. was der Programmierer als sinnvoll erachtet hat. die durch das Verwenden der Widgets ausgelöst werden. sowie die Beschreibung der Aktionen (Events ). wie diese Elemente angeordnet werden sollen. unter Linux bekommt man MotifKnöpfe und unter Macintosh eben Macintosh-Knöpfe .

1: FlowLayout Das BorderLayout “North” (Norden. oben) “South” (Süden.1. links) “Center” (Zentrum. Layout-Manager 44 2 r r r r r 4 G q f – X p Q U p 5P`S5`SS`q . mittig) unterteilt eine Fläche in 5 Bereiche: c 2000 iKu Netzwerklösungen Abbildung 10.2: GridLayout @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 10. rechts) “West” (Westen.„ ‘ wq A q 3eC €0P'Fåà ‘ wq E h – 6C €Tg''–à ‘ w w | I Q 3h Q p h h Y| q I q 4 4 Ïp§P'F'SS57&Ë0P55G B'I ’57Và A Q q U U –C ‘ w w | v  | q I q 4 4 Ïy§PgË0P55G „ B'I ’57Và A Q q U U –C ‘§w…wBf`³'PÏB'P'~B'F‹1S'BSˆB'I ’57Và | i D – ¹ Q Q G Q I I Q h – 3 Q D a | q i Q h – X„ A Q q U U – C ‘ w wq 4 G q f – X A q i & A Q I q 4 G q f – X 4 Q eC p&TSB`SB7'P'êTSPPSS`Påà ‘ w | 4 G q f – X A q i & ID Q ¹| q Q o– p & A Q I † à Q o– p p§5P`SSP7'™fS&‹¤iFS5P'j…jiFS5& Abbildung 10. unten) “East” (Osten.

Wenn die Karten definiert sind. muss nicht jeder dieser Bereiche ausgefüllt werden. : Das Hinzufügen geschieht mit Das erlaubt beliebig viele “Karten”. ‘ wq A q 3eC €0P'Fåà ‘ wq E h – 6C €Tg''–à ‘…kP'™'S5`&±0PS5SG P'I 7SP7F‹’57Và w w | I Q 3h Q p h h Y| q I q 4 4 A Q | 3 4 G q a| q U U –C ‘ w w | v  | q I q 4 4 …y§Bg±0PS5SG „ P'I ´ 75`S&‹’57Và A Q | 3 4 p q ˜| q U U –C ‘ w w q 4 G q f – X p Q U„ p ~€TSPPSS`S5`q P´ 'êTSPPSS`Påà A Q I q 4 G q f – X 4 Q eC ‘ w | 4 G q f – X p Q U p ‹§SPS`SS`5S`q ™fS&‹¤i„FS5P'j…jiFS5& ID Q ¹| q Q o– p & A Q I † à Q o– p „ w h 4 I Q I q 6 oq nn5P'P'FSW ´ e s ID p 4 a q U U ˆS™5`}’57– ‘ wq A q 3eC €0P'Fåà ‘ wq E h – 6C €Tg''–à ‘ w w | I Q 3h Q p h h Y| q I q 4 4 Ïp§P'F'SS57&Ë0P55G B'I ’57Và A Q q U U –C ‘ w w | v  | q I q 4 4 Ïy§PgË0P55G „ B'I ’57Và A Q q U U –C ‘ w w ny| Ë0P55G „ B'I ’57Và | q I q 4 4 A Q q U U –C ‘ w w | x | q I q 4 4 nyiFË0P55G „ B'I ’57Và A Q q U U –C ‘ w w ny| Ë0P55G „ B'I ’57Và | q I q 4 4 A Q q U U –C ‘ w w | w› | q I q 4 4 ny55Ë0P55G „ B'I ’57Và A Q q U U –C ‘ w §…w x q 4 G q f – X U D p R A Q I q„ 4 G q f – X 4 Q e C »TSB`S5Fi7SP'êTSPPSS`Påà ‘ w | 4 G q f –› X U D p R I D Q ¹ | q Q o – p & A Q I † à Q o – p p§5P`S7´ gi7S™fS&‹¤iFS5P'j…jiFS5& Wie man sieht. sowie einzelne Karten gezielt anwählen.1. Der Bereich “Center” füllt den Rest in der Mitte aus. Die Bereiche “East” und “West” haben eine konstante Breite und passen ihre Höhe der Fenstergröße an. Layout-Manager 45 2 4 G q f – X U p – SB`S55`SW . CardLayout c 2000 iKu Netzwerklösungen Abbildung 10.3: BorderLayout @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 10. kann man zwischen ihnen vorwärts und rückwärts blättern. von denen nur jeweils eine sichtbar ist.Die Bereiche “North” und “South” haben eine konstante Höhe und passen ihre Breite der Fenstergröße an.

das alle Lay- 46 . Er kann sich nicht darauf verlassen.5: GridBagLayout GridBagLayout Das ist das mächtigste und komplizierteste Layout des AWTs (wahrscheinlich deshalb haben die ersten Java-Entwicklungsumgebungen dieses Layout nicht unterstützt). dass sein Programm nur unter Microsoft Windows läuft.4: CardLayout Abbildung 10.10. Vorteile von Layout-Managern Ein Java Programmierer muss davon ausgehen. Jeder Komponenten wird hierbei ein outeigenschaften genau definiert. dass seine Programme auf einer Vielzahl von Betriebssystemen und Benutzeroberflächen laufen werden. Layout-Manager Abbildung 10. Er erlaubt es. wobei die einzelnen Zellen unterschiedlich groß sein dürfen und eine Komponente auch über mehrere Zellen gehen kann. sondern eventuell auf einem PalmPilot oder gar einer textbasierten Oberfläche.1. die Positionen aller @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen e 4 ID – p 4e I q W s U D p 7™f5FiPSSP– gi`R „ 4 G q f – X Q 4 G i q e h SPPS7SgSPi7Y 2 4 G q f – X s UD p 5P`S5`– g7R „ -Objekt mitgegeben. Von daher sollte man den von manchen Entwicklungsumgebung zur Verfügung gestellten Layout-Manager tunlichst vermeiden. Es erlaubt die Anordnung der Komponenten innerhalb eines Gitters.

Ereignisse (Events) Elemente als Pixelpositionen genau anzugeben. Diese Methode hat als Rückgabewert einen . die ein Projekt unübersichtlich machen. Als Paramter erhält sie eine Referenz auf das auslösende Objekt. welche Komponenten das Ereignis ausgelöst hat und verzweigt in den entsprechenden Code.B. AWT 1.0 auf Java 1. Das Ereignis wird solange an die jeweils enthaltende Komponente weitergeleitet. Die Ereignisbehandlung hat sich mit dem Wechsel von Java 1. oder bis die oberste Komponente erreicht wird. das vom Programm abgefangen und verarbeitet werden kann.1 erstellen. z.0 sehr elegant durch das Ereigniszuhörer -Modell (Event Listener). Da man für jede Komponente eine eigene Unterklasse erzeugen müsste. Swing Ab Java 2 wird als Alternative zum AWT die Bibliothek Swing ausgeliefert. wenn etwas mit der Jede Komponente besitzt eine Komponente gemacht wurde. so dass wir sie hier getrennt behandeln werden. Mit den Standard-AWT-LayoutManagern hat man diese Nachteile nicht und die Benutzer erhalten immer ein optimales Bild. ob die Methode wirklich etwas gemacht hat. einem Panel. Übungen Schreiben sie ein Programm. dass man Fenster nicht mehr beliebig skalieren kann und die Oberfläche auf anderen Plattformen als der des Entwicklers sehr schlecht aussieht und oftmals unbenutzbar wird. sondern die Objekte. dass eine Frage am Bildschirm darstellt und zwei Knöpfe “Ja” und “Nein” anbietet.1 AWT 1. Hier schaut man dann nach. wobei dies unabhängig davon ist. die aufgerufen wird.1 deutlich verändert. sowie ein -Objekt. Ausserdem ist der behandelnde Code von der Komponente getrennt. Hierbei werden die Ereignisse nicht einfach an die enthaltenden Komponenten weitergereicht. die die Ereignisse behandeln. bis entweder eine Komponente das Ereignis als behandelt bezeichnet. Sie enthält noch mehr Widgets und neue Layout-Manager. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen wq I q D 4h €0PBiF'– wq I q D 4 h &0BBig'– 2 4 I Q g 5P5‚ I – Q i q q P57S7'h 47 . In diesem Fall wird das Ereignis vernichtet. Das Look & Feel ist hierbei frei wählbar.0. unter MS-Windows kann man auch Widgets im Motif-Aussehen darstellen. was das ganze recht langsam macht. AWT 1. was die Lesbarkeit des Quelltextes reduziert. in der die auslösende Komponente enthalten ist. so dass man für Internetanwendungen noch nach dem alten Schema programmieren muss. Ausserdem müssen sehr viele Unterklassen geschrieben werden.1 vermeidet die Probleme von AWT 1. reagieren. der Druck auf einen Knopf. Um jetzt auf ein Ereignis zu reagieren. allerdings kennen viele Browser im Internet nur AWT 1. 10. muss man eine Unterklasse der entsprechenden Komponente erzeugen und die -Methode überschreiben.2 Ereignisse (Events) Eine grafische Oberfläche muss auf Aktionen des Benutzers. registrieren sich bei den Komponenten und werden beim Auftreten eines Ereignisses benachrichtigt. dass fast alle Ereignisse durch eine Reihe von Komponenten durchgereicht (propagiert) werden müssen.0 -Methode. Hierzu löst jede Komponente ein Ereignis aus.B. das die Art des Ereignisses beschreibt. sammelt man den Code lieber in den enthaltenden Komponenten. ob das Ereignis als “behandelt” vernichtet werden soll. Das Ergebnis ist.0 hat den Nachteil.2. d. Neue Programme sollte man immer für AWT 1. Standardmäßig macht diese Methode nichts und das Ereignis wird an die Komponente weitergeleitet. AWT 1.10. der angibt.h. z.

Durch die direkte Übergabe des Ereignisses an den behandelnden Code. so wird bei jedem Listener die entsprechende Methode des Interfaces aufgerufen.0-Ereignisbehandlung. die bei einem auftretenden Ereignis benachrichtig werden wollen.2. in der er mit den anderen Listenern aufgerufen wird. Welches sie implementieren müssen.1 deutlich schneller. da beide völlig unterschiedliche Ereignisse weiterleiten. müssen ein -Interface implementieren. Ein erfordert einen . Ausserdem kann kein Listener eine Weiterleitung an andere Listener verhindern. die etwas damit anfangen können. während ein einen benötigt.1 und anonyme innere Klassen erlaubt es. was die Lesbarkeit des Quellcodes stark erhöht. reagieren Anwendung mit AWT 1. den behandelnden Code direkt zur Erzeugung der Komponenten zu schreiben. die auch wirklich interessieren und sie werden nur noch an die Objekte weitergeben. Ereignisse (Events) 48 2 I q 4 4 P55G p Q I Q 4e D X A q U ID `'Bg7SPS™il p Q I Q 4e D `Pg7fX „ ‚ ‘ Q G p 4 I p G 4 Q ’75³7S``p ‘ w µ q 4D ² QC oQ 4e f xèTFiPyzFF`a g Q 4 I Q g ‚ q I q D 4h – I – Q i q q h h D i h G `ÏSP7»0PBiF'ÏP5`S5'‹7f556 ‚ ‘ w e q p Q 6 G …™T`5Fe m w e s ID p 4 a q I q 4 4 I Q U I Q ³…ˆS™i7`ë0P55G PSSP5Q 7f556 h D i h G m I q 4 4 nPS5SG 'P5PjPS5SG BSP5Q 7'7`j7f556 e U I Q 4 ² Q I q 4 4 I Q„ U I Q e„ e – i h h D i h G „ „ „ .1 eingeführten inneren Klassen. lassen sich Listener sehr einfach implementieren: Q o– p i™5& p Q I Q 4 e D X I q D 4h `Pg7fPBiFY C C @ 55C 5@ ‘ wq A q 3eC €0P'Fåà ‘ wq E h – 6C €Tg''–à ‘wÏw~|IPQSUSIP5Q |}q0IBq5SG PSP7Q B'I ’57Và Q 4 4 I Q U I Q A Q q U U –C „ ‘ w q Q„ o – p & A Q „ I † à Q o – p §&¤iFS5P'j…jiFS5& C C @ 55C 5@ ‚ m w 3h D 3 A 4 h Q • h yÔF7i5yg'5B ´ c 2000 iKu Netzwerklösungen @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 10. Mit den mit Java 1. als solche mit AWT 1. Alle Objekte. Die Kombination AWT 1. Hierbei darf sich kein Listener auf eine bestimmte Reihenfolge verlassen.Auf diese Weise müssen nur noch die Ereignisse behandelt werden. hängt von der Art der Ereignisse ab. ‘ wq A q 3 C §&0P'™e à ‘ wq E h – 6C §&Tg'{à ‘ w wq I Q U I Q 4 G h A Q q U U –C ~&0PSSP5Q 55³P'I ’5`yà „ ‘ w ‚ ‚ ‘ w µ q 4D ² QC oQ 4 e f ·»’Fi`yœFgPa m ywÔQySPQ55IPBi4gfêq¤7ioB`5ÃS`QSBBig'Ïg'k7'f756 4 I g ‚ q D h Y U Q p q p b I q D 4 h – U D q g h D i h G mË&q’`Q'P4F7XPgDigYÏP'I(TpB'BQSFe75PgF777y9P5P5Q S5h w p I Q e D I q 4 h A Q q Q I 4 D X I q D 4h Y U U –C I Q U I Q 4 G ‘ | Q U Q w~IBSIP5Q |±0IPS54SG AP'jjP5P5Q S5jP7SG q q 4 Q I † I Q U I Q 4 G h I q 4„ 4 „ „ „ „ ‘ wq Q o– p & A Q I † à Q o– p &¤i™5P'³…yi™5& Tritt ein Ereignis auf.

3.1-Ereignisbehandlung. jenachdem welcher Knopf gedrückt wird. das verschiedene Zeichenoperationen unterstützt. um die Grafik richtig zu skalieren. Hierzu bekommt sie ein Objekt vom Typ übergeben. Übungen Schreiben sie ein Programm.10. das die Werte eines Arrays als Grafik ausgibt. Will man jetzt eine eigene Grafik darstellen. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen e h D 3 6 – p 77£5PS7R ‚ ‚ ‘ w µ Ô7µ µ µ 5Fw Fw ™Ë¤'&P`Vus µ µw q Q ID X A – p UC › ´ ³'Bf´ –u`7´ S5W T``SSS`Be us ‘ w Q G i hC p q i q q p q i q W 4 Q C m w s e h D 3 6 – p R q 4 ID – 6 U D q g h D i h G yЋ77£5PS7TTS™fgfk7f556 m i Q I – b e U I Q 4 ² Q ED à – p R Q ID Q ¹ e e – i h h D i h G ³S'B‹fB5`yF7`¥'™fS~7'7`j7f556 wq 4 ID – &’S™f'6 h D 3 6 – p 7£7P7R 2 49 . Bestimmen sie hierzu zuerst den maximalen Wert. Machen sie dies einmal mit AWT 1. 10. dass es zwei unterschiedliche Texte ausgibt. die die entsprechende Komponente am Bildschirm zeichnet. muss man diese Methode überschreiben und die entsprechenden Methoden von aufrufen.3 Zeichnen Jede Komponente besitzt eine Methode . Zeichnen Übungen Erweitern sie das Programm aus dem vorherigen Abschnitt so.0und einmal mit AWT 1.

Beispiele hierfür sind Laufschriften oder Börsenticker. Man kann sich also Applets als Java-Programme vorstellen. danach. von Web-basierten Installationsprogrammen verwendet und können in Intranets benutzt werden.B.Kapitel 11 Applets In diesem Kapitel lernen sie 11. so wird die -Methode aufgerufen. die in einem Fenster mit fester Größe innerhalb einer Internetseite laufen. Unterschriebene Applets werden z. z.4 Unterschriebene Applets Ab Java 1.1 gibt es die Möglichkeit. das u. 11. Dann ruft er die Methode. Stattdessen erzeugt der Browser zu-Methode auf und danach die erste eine Instanz der Klasse. Alles dies hat zur Folge. diese dem Fenster hinzufügt und dann das Fenster anzeigt. die Größe des Applets auf der Internetseite angibt. abfragen und dürfen nur Verbindungen zu dem Rechner aufbauen.3 Einschränkungen von Applets Applets unterliegen starken Sicherheitseinschränkungen. Java-Programme zu schreiben.B. Kommt der Benutzer wieder zurück auf die Internetseite. Erlaubt der Benutzer dies. z. die ein Fenster und eine Instanz der Klasse erzeugt. Sie dürfen auch fast keine Systemeinstellungen. von dem sie heruntergeladen wurden. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen wq 4 p – 4 &T5Pge 4 Q i 6 6 YC 4 Q i 6 6 –C – g – B7'77“u``f5PyT`5• wq 4 p – 4 &T7`ge wq 4D I &’F£™D wq 6 q 4 &TPge wq ID – &T™fio wq ID – €0™fio 2 r r r r was Applets sind wie Applets vom Browser verwendet werden welchen Einschränkungen Applets unterworfen sind und wie man sie umgehen kann wie Applets in HTML-Seiten eingebaut werden Was sind Applets? 50 . wenn sie aus dem Internet heruntergeladen werden. die etwas Leben in die Seiten bringen. Applets digital zu unterschreiben. wird nur noch die -Methode aufgerufen. die sowohl Applets. dass Applets ohne Bedenken auf dem Rechner des Benutzers ausgeführt werden können.2 Applet-Konventionen Applets werden nicht über die -Methode gestartet. Unterschriebene Applets dürfen den Benutzer nach bestimmten Privilegien fragen.B. Aus Sicht des Java-Programmierers sind Applets Unterklassen von und unterscheiden sich ansonsten nicht von anderen Java-Klassen. 11. 11. als auch Applikationen sind. wie beim ersten Start vorgegangen. den Benutzernamen.1 Auf vielen Internetseiten sieht man Java-Applets. Ansonsten wird genauso.a. sofern die Instanz der Applets noch existiert. Sie dürfen nicht auf die Festplatte zugreifen oder andere Programme starten. Wird die Internetseite verlassen. Es ist möglich. Hierzu muss man nur eine -Methode implementieren. ob sie auf die Festplatte schreiben dürfen. so kann das Applet zugreifen. Im Browser werden Applets als eigenes HTML-Tag eingebunden.

Auf der Seite enthaltener Text ausserhalb der Applets wird nicht angezeigt. dass fertig initialisierte Klassen auf dem Webserver gespeichert (serialisiert) werden. was das Laden des Applets deutlich beschleunigt. von denen ich hier nur die wichtigsten an Hand eines Beispiels erkläre: Mit den Attribut gibt man die Adresse der Appletklasse auf dem Server an. mit dem sie eine Jar-Datei (siehe Abschnitt 13. Diese stehen dann nachdem Laden direkt ohne Initialisierung zur Verfügung.5 Das APPLET-Tag Das Applet-Tag erlaubt einige Attribute.5.es kann allerdings neue Fenster öffnen.6 Der Appletviewer Mit dem Appletviewer können sich Applets ohne einen Webbrowser starten.3) angeben können. Mit und gibt man Breite und Höhe des Platzes auf der Internetseite an. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen d c u‰ 55™£l º c ‚ X b b Y '57S75P@ ¸ IPQ`i5iSQ4geG`RSp`–SUjQ4™DfQ5ajQP'gxBG `PPp PF£BSgfP7nP'™'ÏP'FPSyBfa e Q D U o p Q e A q I Q sD 3 ô à H – g – t I Q ID Q I Q 3h G – p h Q D ´ „ º Sµ S57i5d † c d R‰ ‚ µ ž S57F£l † d c u‰ | e e – i hC p Q I 3h Q ” ÃD p – c @ à D p – 4 @ sD A G 3 @ Q U| † ‚ u  W c ‚ X b b 77`)uP7F'57FPP5gPSP'™£55B5›Sљ£S7P³57555Y ¸ ‘ £ ¡ ¿• ¡ Ž ‘ ¦ ¦ ‡ ¨ Ž ¾ Ž Œ ˜ ¡ Ž ‘ ¦ ¦ — ‰ ‡ ˆ ‡ † …„ 5dB§§™&`F&k™B€&PF™&`F€±BF™€g{iƒ 2 ‚ u  5PW c d R‰ ‚ 5715d ‚ ‡‰ d W ” 7Fi7S7Y 51 . Hierfür muss der Browser nur eine Internetverbindung aufbauen. Eine weitere Beschleunigung erreicht man dadurch. 11. Das Applet kann diese Größe nicht verändern . empfiehlt sich die Verwendung des -Tags. Das APPLET-Tag 11. Der Appletviewer öffnet für jedes auf der Seite enthaltene Applet ein eigenes Fenster. die alle Klassen in komprimierter Form enthält.11. der für das Applet reserviert ist. Er ist im JDK enthalten. Wenn sie viele Klassen für ihre Anwendung benötigen.

Sobald auf der Instanz von die Methode aufgerufen wird.1. Beispiel 12. Eine Instanz terface dieser Klasse kann an den Konstruktor von übergeben werden. indem in der zu Beginn übergebenen Instanz die Methode aufgerufen wird. was soviel heißt. wobei der erste immer wieder das Zeichen ’A’ ausgibt und der zweite das Zeichen ’B’.Kapitel 12 Threads 12. das zwei Threads erzeugt.1 Was sind Threads? Viele der heutzutage verwendeten Programme unterstützen Multithreading . Das Programm hat sich in zwei Threads aufgeteilt .1.1 sehen sie ein Programm.einer der die Datei herunterlädt und einer der weiterhin WWW-Seiten anzeigt. startet diese den Thread. das eine Methode enthält. wie “Multitasking innerhalb eines Programmes”. Ein Beispiel hierfür sind die WWW-Browser. die es erlauben während des Herunterladens einer Datei weiter im Internet zu “surfen”.1: AB-Threads @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen U – Q p 3 7557c wq I G &057p ã ¯ ®ª ¡ ¨ — ¡• ® ® — Ž ¨ ¿ì ¼ ‡ ¾Ž © )iF™g€{'k)ª é FFB&g™Ë&Pª é FgB&±&P© —Ž ¨ ¿ì ¾Ž ¯ ®ª ¡ ¨ — ¡• ® ® — Ž ¨ ¿ì ¼ ‡ ¾Ž © )iF™g€{'k)ª é FFB&g™Ë&Pª é FgB&±&P© —Ž ¨ ¿ì ¾Ž Þ ® öõ ˜ â ¨ — â © Œ ¨ ¡ Ÿ ª © Œ — ­y÷FF&‹BdP™&ëdB`£ é gB}FP™g¢‹Fg`F™¦ Œ ’ ˜ àŒ ¡— ¡ àŒ‘ ”¥ ¯ Ž ¥¨¡ È ¡ ¨Œ ð ” ©—Ž‘’’ ” àŒ ¡—¡ iP€F™k€B€PB±¢F™FFP}FP™g¢ Þ Ž‘ ”— ©© k™`€P™F¥ þ PB€`d™`B)‹ é Fgg&g™r™B™™‹FF`FF¦  ¡ ©Ž £Ž‘ ¦ £Œ —Ž ¨ ¿ì ¼‡  —‘à àŒ‘ ”¥ U – Q p 3 7557c ã ¯ ® ‘ŽŒ   —Ž ¨ ¿ )ª é F&Pø• é FgB&ì ¯ ® © Ž ¿ à Œ Ž § à ª ¡ © Œ ¨ ¦• ¡ ¥ ’• Ž ¡    ³€BdFBF©Ø£gdPB§£B¢{¤£ g€P&Ÿ Þ ® Ž ¥¨¡ ª Ž‘Œ ¿ }~B&F$i™&7™¾ ¯ û ¼û È © Ž à Œ Ž § F§÷n~€P¿ FBF¨à Þ Ž‘ k&gFŽ ã ¯i&Fggˋ¢P€PB” Ž‘ — Ý È ¡ ¨Œ ð ¯ û ‡û È © Ž à Œ Ž § F£øn~€P¿ FBF¨à Þ ® ¡ ¨Œ ð ª Ý r¢P€PB” £€Œ wq I G €057p Q i h – I I G ”C s I – iC – g – PfB'757“u5P7)0S`5• 2 wq 4 p – 4 &T5Pge ã ¯ ©Ž ¿àŒ Ž§à ¨— ¿ €Pd™BF¨p&Pdà Þ ®ª ©¥ r)™&¨ é gg™Fg`F™¦ Œ ’ ˜ àŒ‘ ”¥ ã ã 52 . In Beispiel 12. Dieser legt in der JVM einen neuen Thread an und bereitet ihn auf den Start vor. Einen Thread erzeugen Java unterstützt Threads auf eine sehr einfach zu verwendende Weise: eine Klasse muss das Inimplementieren.

h. Der Aufruf der Methode gibt Rechnenzeit für andere Threads frei. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen U Q R D I q p 3h I f 75g£P5Fi7ge U Q RD I q p 3h I f 7SF£PS™i7ge U Q R D I q p 3h I f `Sg£PSSFi7Fe Q U q W p Q 3h e D 4D p E @ S`Sy`F57i™i5y5@ m w – q U Q R D I q p 3h I f j·è’7SgiPSF7ge – 2 – W U Q RD I q p 3h I f `Sg£PSSFi7Fe U Q RD I q p 3h I f `Sg£PSSFi7Fe Y W V PXGU 12. bis der erste Thread die Methode verlassen hat. -Methoden Wenn sie das Schlüsselwort vor eine Methode schreiben. passieren. Alle anderen Threads. der auch darauf zugreifen will. können sie nicht sicher sein. das das verwendete Betriebssystem preemptives Multitasking unterstützt.er muss nur ebenfalls das Objekt schützen.B.Das Beispiel erkennt an Hand einer statischen Variable. ob es der erste oder der zweite Thread ist. Ohne diesen Befehl würden manche JVM statt nur ausgeben. kann es passieren. solange alle diese Zugriffe auch mit markiert sind. markieren. Wenn mehrere Threads laufen. werden solange angehalten. Da Java auf vielen verschiedenen Plattformen läuft. ihre Threads nach einer gewissen Zeit die Kontrolle automatisch entzogen bekommen damit andere Threads laufen können.2 U Q RD I q p 3h I f 75g£P5Fi7ge 53 12. Dies kann der gleiche Code sein oder Code in anderen Klassen .2. d. wenn zwei Threads gleichzeitig ein Array sortieren wollen. Die JVM indem sie Objekte oder Methoden mit dem Schlüsselwort merkt sich intern wenn ein Thread darauf zugreift und hält jeden anderen Thread an. kann nur ein Thread diese Methode aufrufen. die diese Methode aufrufen wollen. Y Y Y Y Y Y Y Y Y 755557555Y Y Y Y Y Y „ „ „ „ „ wq U i Q D &¤`SBif  ! b £¥# ` ¤ a¥© – ‚ . dass mehrere gleichzeitig versuchen das gleiche Objekt zu ändern. Dies kann z. -Objekte Sie können auch Objekte innerhalb eines Blockes gegen gleichzeitige Zugriffe mehrerer Threads schützen. Sie können dies verhindern. was dieses in einen ungültigen Zusand bringen kann. Wenn sie das Objekt für kurze Zeit sperren wollen schreiben sie einfach Solange sich ein Thread innerhalb des angegebenen Blockes befindet sind alle Zugriffe anderer Threads auf das Objekt geschützt.

ohne ein DOS-Fenster zu öffnen. Dies ist auch nicht mehr notwendig.B. Unter Windows ist das Programm ist eine DOS-Anwendung. die alle auf dem Rechner des Anwenders installiert werden müssen. p – • P5BH ££— ¨â’ ¨ ¦… ⌠¾ ¥¿… FdgF€BB¢B¢`gF¢FŽ é ™™{£™&BP© BBËF¢p™™‹BF™€g{iƒ ¨ — Š• ¨ —† Ž Œ Ž í Ý ˜à ¨ — Š ‰ ‡ ˆ ‡† …„ p – `5• Q ² QC Q p `y0S`• ‚ ƒ ‚C l Y ‡ Y 55“u755Pt Q ² QC A Q p S`y9PS`• ”Ž “’ ‘ ‘ Ž  ‡ ˆ ‡† …„ ƒ ¦àç Ž ¨Š ‰ …„ €B€™FgBËF™€g{ipd&~F&±F{iƒ ¨ — Š• â © ©Ž ¾ ©‡ ¨— Šç — ˜— Š ‰ …„ ™™{£BF¥ é ¢Bg&±&™€~g&™±F{iƒ 2 ‚ ƒ ‚C Y ‡ Y 57“u55Bt in die Datei p – •C p – t Q ID Q P5yu``S'™fS¹ r r r r 54 .2 Java Runtime Environment 1. als die des JDK. als auch im JRE heißt die . aber selbst keine schreiben. 13. Da dies etwas unhandlich ist. bzw. Will man eine reine GUI-Anwendung starten.3 JAR-Dateien Größere Programme bestehen aus hundert und mehr Klassen. ist dies etwas störend. die beim Starten immer ein DOS-Fenster öffnet. Unter Unix oder Linux haben sie solche Probleme selbstverständlich nicht. Die Angabe des CLASSPATH können sie direkt beim Aufruf machen. JVM immer Keine von beiden befindet sich allerdings im Pfad. ausführbare JAR-Dateien (siehe 13. Die Erzeugung einer JAR-Datei geht mit dem Programm : Manifest-Dateien JAR-Dateien erlauben es auch ein Manifest anzugeben. 13. die sich mit einem Doppelklick auf die Datei starten lassen.kurz JRE .1 Wenn sie Java-Programme nur ausführen wollen.1 Java Runtime Environment 1. da alle notwendigen Einstellungen automatisch vorgenommen werden. z. Sowohl im JDK. . Hiermit lassen sich ausführbare JAR-Dateien direkt starten (sofern sich das JRE im Pfad befindet). so dass ein direktes Starten nicht mehr möglich ist. Für diese ausführbaren Dateien ist auch eine neue Option hinzugekommen: . Die Installation des JRE ist deutlich einfacher. das bestimmte Eigenschaften einer JARDatei definieren kann. das ein Java-Programm startet. z. da es ab Java 2 möglich ist. digitale Unterschrift Versionsnummer Name der Klasse.B.3) zu erzeugen. reicht ihnen das Java Runtime Environment . kann man in Java Klassen zu sogenannten JAR-Dateien zusammenfassen. Statt 100 Klassen in vielen Verzeichnissen hat man nur noch eine handliche Datei. Von daher gibt es das Programm . die zum Start aufgerufen werden muss Erweiterung des CLASSPATH @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 c 2000 iKu Netzwerklösungen o o– p s q p 6 s sD A G 3 s Q 5F5PSB'™£55B5SU In diesem Fall werden alle Dateien im Verzeichnis gepackt.2 Mit Java 2 hat sich die Benutzung des JRE geändert.Kapitel 13 Nützliches 13. die ausserdem komprimiert ist und daher nur noch etwa die Hälfte an Platz benötigt.

Lokale Variablen werden niemals in die Dokumentation aufgenommen. die Dokumentation auf dem neuesten Stand zu halten. Dies geschieht mit speziellen Kommentaren.4. unter Windows reicht ein Doppelklick auf die Datei und das JRE wird automatisch mit den richtigen Parametern aufgerufen. Javadoc Manche dieser Eigenschaften sind erst ab Java 2 (JDK 1.1: Manifest-Datei p – •C i o `5yT• £B²  ´ ‚ C C C @ 55Õ5@ m h Q l q i i Q d e e – i h h D i h G …PP75SS~7'7`j7f556 @ `Í 4 sD Q R I p Q s I ô à I Y Q e D Q A p Q i – o p q I I – o e – U 7FfSy7`SBS7‹P7f7`7SB`'ÏPiË'SÍ o o– p s q p bH – g – t Q 4 e p Q e – U 4 e D Q e e – i v Q e Q D u 7F5`S5FfP7Ïg`'5ng`nP5'7P'Bi~Í Í Í 5@ p – •C i o ² 8 3 4 – bH e e – i `7y0• iB$9``FS7'7W 4 6 G – dC o o – p s q p 6C s D A G 3C Q U 8 e e – i h H I D – S7BS“z`F5PS{u™£55{TSê¤7'7`7i™f¹ — ˜ — Š• ”Ž “’ ‘ ‘ Ž  à — ˜ — Š ‰ ‡ ˆ ‡† …„ g™™{€B€F™gBrg’ é g™™‹BF™€g{iƒ 2 h q U – g – 'S7S`5• 55 4 6 G – dC o o – p s q p 6C s D A G 3C Q S7P5“œ7F5`SS{uFi55{05U . wie eine Manifest-Datei aussehen muss. Um die Funktion einer Klasse zu dokumentieren.3.h.B. Mit einem Kommandozeilenschalter kann man aktivieren. welche minimale Sichtbarkeit notwendig ist. Methode und Variable (oder Konstante) im Klassenkontext ist dokumentierbar. erhöhen aber die Lesbarkeit. das dann komplett dokumentiert wird. damit das Element in die Dokumentation aufgenommen wird. der Name der zu startenden Klasse. Spätestens beim ersten größeren Projekt ist eine Dokumentation immer notwendig. denn sie muss immer auf dem neuesten Stand gehalten werden und schließlich “sieht man ja” was das Programm macht. so wird eine HTML-Dokumentation der Klasse erzeugt. Javadoc-Kommentare sind normale mehrzeilige Kommentare. z.2) verfügbar. An Stelle einer oder mehrerer einzelner Java-Quelldateien kann man auch ein Verzeichnis angeben. die direkt in den Quellcode hineingeschrieben werden.13. @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 ¡ ¦ ¥ — • — ¨ ⠒ ¨ ¦• ⠌ ¾ ¥ ¿• B™€B÷¤£ gF&Bg§§€`FF§£Ž é ™&{iB&7¢‹d€³&™{§™€BPdBg‹d&~F&±F{iƒ ¨ —Š• Š ï‘ £ú ¦àç ¨— Š• ¨ —† Ž ©Œ Ž í ¦àç Ž ¨Š ‰ …„ ££— ¨â’ ¨ ¦… ⌠¾ ¥¿… ™dgF&gB¢B€PgF¢gŽ é ¢Bg€7¢7£ ¥dgB‹™™{§&&BPdgBp¢F¢p™™‹BF™€g{iƒ ¡ Ž ݌ ©— • ©Œ Ž í ¨ — Š• ¨—† Ž ©Œ Ž í £Ý ˜à ¨ — Š ‰ ‡ ˆ ‡† …„ Javadoc c 2000 iKu Netzwerklösungen 4 e Q à D I – oC I D Q gSg£P÷9™fS¹ Beispiel 13. In Beispiel 13. Erzeugt wird die JAR-Datei mit Ein Doppelklick auf die so erzeugte JAR-Datei ist dann identisch mit einem Aufruf von 13.1 sehen sie.3. schreibt man einen erläuternden Text in einen Javadoc-Kommentar direkt vor die Klasse. Startet man . Was ist dokumentierbar? Jede Klasse. Damit kann man JAR-Dateien direkt ausführbar machen. d. die allerdings mit zwei Sternen anfangen: Die Sterne am Zeilenanfang sind überflüssig. Zum Glück bietet Java die Möglichkeit Klassen automatisch zu dokumentieren. um auch nach ein paar Monaten das ganze noch zu verstehen. Damit ist es relativ einfach.4 Kaum ein Programmierer schreibt gerne Dokumentation zu seinen Programmen. damit die Klasse beim Starten aufgerufen wird und die Datei in den CLASSPATH aufgenommen wird.

1: Eine Javadoc-dokumentierte Klasse c 2000 iKu Netzwerklösungen @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 13. Javadoc 56 2 r r r r r . Die wichtigsten sind Da die Dokumentation in HTML erstellt wird.4.4.1 mehr als 1000 Worte.Javadoc-Kommentare dürfen spezielle Tags (Schildchen) enthalten. Javadoc-Tags @author @exception @param @return @version Beispiel 13. ‚ ‚ C C @ 55C 5@ m³IPqBDi4S6BQPh5‚PB‰³iAPpS`4~w…eˆSI™i74`a y7f5P5U '75`S`B'nS™³7f556 ²  e q 3 s D p U Q i h G q q e – l 4 p Q à Q D i 4 ID h D i h G ´ @ `Í 47FDi57ÃSP–³p`7i'PQS7PeSX…™DfQnI5IP'A PgiSPPf5PP·BBiSPB`5Í 4 p 4 G Q 3 à Q Q I Q I q D 4 6 Q h ² ‚  ‰ I q D 4 6 Q h ² Q c p Q s ID u p Q U i 3 – R I Y I p G 4 Q p c `´ S&i³`SfP57³7S```Í s I G U i Q o p Q i 3 Q & e o– p – 6 c S7``Sig`7fPSdÐFS`'PÍ p 4 – e s I G I 3h Q p o € U o– p – 6 c Pq5E`SÃgS557F'fPjˆFS`'PÍ Í Egió7SGPR‹''A``QSPS5F·5`57BÍ h p e – 4 U I Q s pD 4 p Q à Q D X Í Í 5@ mk'–'A74`5UP5™…7'7`j7f556 e Q I Q s p‰ e e – i h h D i h G @ `Í µC w I q D e p Q g c VxPB5``Í s FD£A5G`dj45S7j`7SP5Í p G v p q 3 4 G – c Í Q e e – i v Q ID ‚ P57'y'™i~Í Í Í 5@ 4 3h – o e – A 4 Q U I Q s pD Q D 5F'i­''7`5P5™ÔBfU ´ Auch hier sagt Beispiel 13. die weitere Eigenschaften der Klasse angeben. sind in den beschreibenden Texten auch HTMLTags erlaubt.4.

p Q sD Q `SFf5e  ´ Ò `› ’»´ x e 4 Q s U D `S7g£l Q h – 6 e Q 4 D 3 B'´ 'F'SF£5l ž è´ Q ID 3h e – ¹ I Q i i Q G 4D '™£™5'P75S7Fig › ´ w ix S557P`‡ s I G h p Q p Q ´ P7fPgi`‡ I Q i h – D p – Ò ´ x P7'7'5PSS€ Q e e – i E p Q 4 I › ´ Q U q h D I S7B7£S€ Ñ »´ i – p s Q 4 I S7`S™D Ñ »´ 6 f 75c x B5'7'™'S``fPc Q e e – i vH i Q g Q i 6 q Ó ´ e U – Q p 3 f77S7c ž › »´ s ID A 5™£Pa p Q U i Q & Q Ñ 3 h e D 4 – 4 `5`Sq'F5´ 7`ge Ñ › ´ PgiBSS`SSP`a Q h – s e G – U p – U I – 4 ž ê´ x s5I™Dig'–SFi4Pf`Ë'SFiS'™ž 5S6 E e 4D i G ¹ e Q gD 4 6 oQ Q p ´ x5x Bi57`igPSb Q D 3 6 p q o f i q ´ p sD `QF'Q5e p Q 4 ID q `5™fb gB1ghFp´ i f e e o GD 4 I Q P™SPb w S`–7ÃhB´ –5`'™5'b Q s p › 4 p q Ae e – ¶ ´ 4 q i D b oi – `7Pi'™Sb › ´ Ó è´ I Q p q 4 – p Q 6 B``S`'B ž  è´ Überladung. 26 c 2000 iKu Netzwerklösungen @ Q UC R 4 Q I H G E C A A A @ @8 6 4 4 7SVTSP'P£7FD 955B7)97553 Index 57 2 x P57'5`B Q e e – i E p Q h › ´ p q 4 – sD g – ˜ Q 6 – h e 4 Q ``SFi`PP5P˜ › ´ Q 6 – h e 4 Q PP5P˜ ¶ »´ s ID U – Q p 3 4D 4 i G S&7557FiP'7¹ › ž w ë´ `7P'BS7'7P¹ à G p à G – I Q U q 3 4 Q Ó ´ x Q U q 3 4 Q S7'7P¹ w I Q 4 D › Q ´ 5sØ 4 G Q U p 3 Q PF'’Fi´ 5PSSSB¹ E žD  ´ 4e Q à D I – F'Sg£B¹ ž  »´ x i Q Q & Ö E q q S7S³`7SX µ I Q i h – D p – ‡ Q i – E q P`fP´ BiP7SP7i › x ´ `S`'P™iSPPSX p Q s – I – ¹H 4 G q f – x5x ´ ``fPSS™fS5BSX p Q i 3 Q à 4D Q R à G – ´ µ I q D 4 I Q g I q PBSPSBv › p´ q 4 E G p 4 e I q `5575giBv ¶ › ´ p Q i D 6 oq P7P£'™v w  ´ `SSPi5™v Q p – 4 I Q o oq › ´x Q e e e – i P55'`'v p Q U i› Q à I Q e e – i PS`SS´ SPP5'`'v Ñ › ´ Q e e – i P5'`'v Ñ Ø´ ‚ ” 7Pt ž 'Q E D x  ­´ ™'t e Ò }´  x ´ ¢w 7Pt w C´ v u p`4SIP5FF´ 5'S7P7t – Q o oq vH h q U – g – ž5žê´ 4 o I q pD g I 5IPQiPPSFiS7‚  ž ´ Q oD 4 I G ” – g – idiS57yP7t I Q D Q 4 – uH ” Y PBfS`Fi7Pt x P'5S`S&‰ Q h – à p Q 4 I Ñ ´ SPgi&‰ R I – 4e I  w `PBS7´ '5BiF£&‰ p Q p Q `D › e D i – D 4 D I Ñ ´ w `S&‰ ² Q U I Ñ ´ p q 4 h Q i i q W Q s – h p – `g75SSyS`'7`5R Ò › ´ x U i Q `SS& w S7``Si› g`´ 7fPS& s I G U i Q op Q i 3 Q  ´ I q D 4 6 Q h ² PBSPP7‚ Ó › ´x e 4 I Q g SP7‚ p Q p " 3 G R e D I s D Q p ``#5`B7´ i7Ff7‚ Ñ  ´ w ix S5577‚ s I G h p ´ d c Y b a a Y X 557`577W ž  »´ 5™ig'5W s ID 4e – Ó x» I Q 4 e – 5x ´ Pg'5W ´ Q U q h Q 4 S`P'5f µ Fw  ´ Eh q g'7i „ ´ Ò ´ ž ’r¤Ø´ „ x c l S`Y w iBP'´ Fi`Y Q o 3 – I e G Ã7p7B'PS´77`¹ G à G –Ò I Q U q 3 4 Q à G p à G 77`Y gBi w p1hG´ 7`7f5`Y Pg Q'f PeBig 4 Q i 6 6 A Q D ž r´¤¶è´ ƒ Q gD 4h PFigfY › ´ p p QC oQ 4e f 5`yœFgPa  w ´ .