Sie sind auf Seite 1von 12

Java von Kopf bis Fu

Wre es nicht wundervoll, wenn es ein Buch ber Java gbe, das inspirierender wre als irgendwo stundenlang Schlange zu stehen, blo um seinen Pass zu verlngern? I s t wohl nur ein Traum...

Kathy Sierra Bert Bates

Deutsche bersetzung von

Lars Schulten
und

Elke Buchholz

UkBDvrmstadt

O'REILLY

Beijing Cambridge Kln Paris Sebastopol Taipei Tokyo

Der Inhalt (fr der tJbersick)


Einfhrung 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 A B Die Oberflche durchbrechen: eine Kostprobe Ein Ausflug nach Objekthausen: ja, da gibt es Objekte Verstehen Sie Ihre Variablen: elementare Datentypen und Referenztypen Wie sich Objekte verhalten: Objektzustnde beeinflussen Methodenverhalten Methoden mit Superkraft: Schleifen, Operateuren und noch viel mehr Die Java-Bibliothek verwenden: Sie mssen nicht alles selbst schreiben Besser leben in Objekthausen: Zukunftsplanung Ernsthafte Polymorphie: abstrakte Klassen und Interfaces nutzen Zahlen, bitte! Mathe, Zahlenformatierung und Statisches Riskantes Verhalten: Exception-Handling Innen hui, auen GUI: Grafische Oberflchen, Events und innere Klassen Mehr Schwung mit Swing: Layout-Manager und Komponenten Speicherung von Objekten: Serialisierung und E/A Eine Verbindung herstellen: Netzwerk-Sockets und Multithreading Datenstrukturen: Collections und Generics Verffentlichen Sie Ihren Code: Pakete, JARs und Deployment Verteilte Anwendungen: RMI, Servlets, EJB undfini Anhang A: CodeKchen-Finale Anhang B: Die Top Ten der Themen, die es nicht ins Buch geschafft haben ... Index 165 197 273 315 353 399 429 471 529 581 607 649 659 677 xvii 1 27 49 71 95 125

Leben und Sterben eines Objekts: Konstruktoren und Speicherverwaltung 235

Der Inhalt (jetzt

E
VI

Einfhrung
I h r G e h i r n U n d J a v a . Sie versuchen, etwas zu lernen, und Ihr Hirn tut sein Bestes, damit das Gelernte nicht hngen bleibt. Es denkt nmlich: Wir sollten lieber ordentlich Platz fr wichtigere Dinge lassen, z.B. fr das Wissen, welche Tiere einem gefhrlich werden knnten, oder dass es eine ganz schlechte Idee ist, nackt Snowboard zu fahren. Tja, wie schaffen wir es nun, Ihr Gehirn davon zu berzeugen, dass Ihr Leben davon abhngt, etwas ber Java zu wissen?

Fr wen ist dieses Buch? Wir wissen, was Ihr Gehirn denkt Metakognition Machen Sie sich Ihr Hirn Untertan Was Sie fr dieses Buch brauchen Die Fachgutachter Danksagungen

xviii xix xxi xxiii xxiv xxvi xxvii

1
Virtuelle Maschinen

Die Oberflche durchbrechen

J a v a f h r t S i e a n n e u e O r t e . Seit seinem bescheidenen Schritt an die ffentlichkeit mit der (kmmerlichen) Version 1.02 hat Java mit seiner freundlichen Syntax, seinen objektorientierten Features, der Speicherverwaltung und natrlich mit dem Versprechen der Portabilitt Programmierer verfhrt. Wir machen mal eine kleine Kostprobe und schreiben ein bisschen Code, kompilieren ihn und lassen ihn laufen. Wir sprechen ber die Syntax, Schleifen, Verzweigungen und alles, was Java so cool macht. Springen Sie rein! Wie Java funktioniert Code-Struktur in Java Anatomie einer Klasse Die main-Methode Schleifen (/-Tests) Bedingte Verzweigungen 99 Bierflaschen programmieren Phras-O-Mat Kamingesprche: Der Compiler und die JVM bungen und Rtsel 2 7 8 9 11 13 14 16 18 20

Ein Ausflug nach Objekthausen


Man hat mir gesagt, wir htten es hier mit Objekten zu tun.
Aber in Kapitel 1 haben wir unseren gesamten Code in die main()-Methode gesteckt. Das ist nicht sonderlich objektorientiert! Jetzt mssen wir diese prozedurale Welt hinter uns lassen und damit beginnen, eigene Objekte zu machen. Wir werden uns ansehen, was die objektorientierte Entwicklung in Java zu einem solchen Vergngen macht. Wir werden uns den Unterschied zwischen einer Klasse und einem Objekt ansehen. Wir werden uns ansehen, wie Objekte Ihr Leben verbessern. Stuhlkriege (Stefan, der OO-Typ, gegen Harry, den prozeduralen Programmierer) Vererbung (eine Einfhrung) Methoden berschreiben (eine Einfhrung) Was ist in einer Klasse? (Methoden, Instanzvariablen) Ein erstes Objekt machen main() verwenden Der Code fr das Ratespiel bungen und Rtsel
28 31 32 34 36 38 39 42

sse

viele Obtdc-te

vii

Verstehen Sie Ihre Variablen


Variablen gibt es in zwei Geschmacksrichtungen: elementare Typen und Referenztypen. Im Leben muss es doch mehr
g e b e n als Integer, Strings und Arrays.Was ist, wenn Sie ein HaustierBesitzer-Objekt mit einer Hund-Instanzvariablen haben? Oder ein Auto mit einem Motor? In diesem Kapitel werden wir die Mysterien von Java-Typen offen legen und uns ansehen, was Sie als Variable deklarieren knnen, was Sie in eine Variable stecken knnen und was Sie mit einer Variablen tun knnen. Und schlielich werden wir verstehen, wie das Leben, das sich auf dem Garbage Collectible Heap abspielt, wirklich ist. Eine Variable deklarieren (Java kmmert sich um Typen) Elementare Typen (Einen doppelten Espresso, bitte!) Java-Schlsselwrter Referenzvariablen (Fernsteuerung fr ein Objekt) Objekte deklarieren und zuweisen Objekte auf dem Garbage Collectible Heap Arrays (ein erster Blick) bungen und Rtsel 50 51 53 54 55 57 59 63

Hund-Referenz

4
Java Ist Pass-by-Vatoe.

Wie sich Objekte verhalten


Zustnde haben Auswirkungen auf Verhalten, und Verhalten
h a t A u s w i r k u n g e n a u f Z u s t n d e . Wir wissen, dass Objekte Zustnde und
Verhalten haben, die von Instanzvariablen und Methoden reprsentiert werden. Nun sehen wir uns an, in welcher Beziehung Zustnde und Verhalten zueinander stehen. Objekte haben ein Verhalten, das auf ihre Zustnde wirkt. Anders gesagt, Methoden nutzen die Werte von Instanzvariablen - beispielsweise wenn Hund weniger wiegt als 7 Kilo, mach Klffgerusch oder erhhe Gewicht um 3 Kilo. ndern wir mal ein paar Zustnde. Methoden nutzen Objektzustnde (Die Gre beeinflusst das Bellen) Methoden-Argumente und Rckgabetypen Pass-by-Value (Die Variable wird immer kopiert) Getter und Setter Kapselung (tun Sie es oder machen Sie sich lcherlich) Referenzen in Arrays verwenden bungen und Rtsel 73 74 77 79 80 83

Pas bedeutet Pass-by-Copy.

int foo.los(x);

void los(int z) { }

viii

5
Aas

Methoden mit Superkraft


Jetzt werden wir unseren Methoden etwas mehr Muskelkraft
g e b e n . Wir haben uns an Variablen versucht, haben mit ein paar Objekten gespielt und haben etwas Code geschrieben. Jetzt brauchen wir mehr Werkzeuge. Wie Operatoren. Und Schleifen. Es knnte auch ntzlich sein, Zufallszahlen zu generieren. Oder einen String in ein int umzuwandeln, ja, das wre cool. Und warum lernen wir nicht all den Kram, whrend wir was Echtes schreiben, um zu erfahren, wie es ist, wenn man ein Programm von der Pike auf schreiben (und testen) muss? Vielleicht ein Spiel, in dem wir Dot-Coms abschieen (wie bei Schiffe versenken). Dot-Com versenken entwickeln EinfachesDotComSpiel (die simple Version) Vorcode fr EinfachesDotComSpiel schreiben Testcode fr EinfachesDotComSpiel schreiben EinfachesDotComSpiel schreiben 96 98 100 102 103 106 111 112 114 117 117 118

1
1

Huitier4ecHii|

Endgltigen Code fr EinfachesDotComSpiel schreiben Zufallszahlen mit Math.random() generieren Code-Fertiggericht fr die Benutzereingabe in der Kommandozeile /or-Schleifen Elementare Typen von groer Gre zu kleiner Gre casten Einen String mit Integer.parselnt() in ein int umwandeln bungen und Rtsel

Die Java-Bibliothek verwenden


Java wird mit Hunderten vorgefertigter Klassen ausgeliefert.
Sie mssen das Rad nicht jedes Mal neu erfinden, wenn Sie wissen, wie Sie das, was Sie brauchen, in der Java-Bibliothek finden, die als die Java-API bezeichnet wird. Schlielich haben Sie etwas Besseres zu tun. Wenn Sie Code schreiben, knnen Sie sich ruhig auf die Teile beschrnken, die bei Ihrer Anwendung besonders sind. Die Java-Kernbibliothek ist ein gigantischer Haufen von Klassen, die nur darauf warten, dass Sie sie als Bausteine einsetzen. Den Fehler in unserem Dot-Com-Spiel analysieren 126 132 138 140 144 146 151 154 155 158 161

Gut zu wissen, dass es im Package java.util eine ArrayList gibt. Aber wie htte ich das allein rausfinden knnen ?
- Julia, 31, Hand-Model

ArrayList (sich die Vorteile der Java API zunutze machen) Den DotCom-Code reparieren DasrichtigeSpiel bauen (Dot-Com versenken) Vorcode fr dasrichtigeSpiel Code fr dasrichtigeSpiel Boolesche Ausdrcke Die Bibliothek (die Java-API) verwenden Packages verwenden (Import-Anweisungen und vollstndige Namen) Die HTML-API-Dokumentation und Referenzbcher nutzen bungen und Rtsel

ix

Besser leben in Objekthausen


Planen Sie Ihre Programme mit Blick auf die Zukunft w a s wre,
wenn Sie Code schreiben knnten, den ein anderer problemlos erweitern kann? Und was wre, wenn Ihr Code flexibel genug fr diese verfluchten Spezifikationsnderungen in letzter Minute wre? Wenn Sie auf den Polymorphie-Zug springen, lernen Sie die fnf Schritte zu besserem Klassen-Design, die drei Tricks der Polymorphie und die acht Wege, Code flexibel zu machen. Dazu, wenn Sie sofort zugreifen - eine Bonusstunde mit den vierTipps zur Nutzung von Vererbung inklusive Vererbung verstehen (Unterklassen und Superklassen) Einen Vererbungsbaum entwerfen (eine Tier-Simulation) Codeverdopplung verhindern (mit Vererbung) Methoden berschreiben IST-EIN und HAT-EIN (die Badewannen-Frau) Was kann man von der Superklasse erben? Was bringt der ganze Vererbungskram? Polymorphie (eine Supertyp-Referenz fr Unterklassen-Objekt verwenden) Regeln frs berschreiben (lassen Sie die Finger von den Argumenten und Rckgabetypen!) Eine Methode berladen (nichts weiter als Methodennamen wiederverwenden) bungen und Rtsel 168 170 171 170 177 180 182 183 190 191 192

8
Object o = al.get(index) Hund h = (Hund) o; h.bewegen();

Ernsthafte Polymorphie
V e r e r b u n g ist nur d e r A n f a n g . Um Polymorphie richtig zu nutzen, brauchen wir
Schnittstellen. Wir mssen ber einfache Vererbung hinausgehen und eine Stufe der Flexibilitt erreichen, die man nur erhlt, wenn man Schnittstellendefinitionen als Ausgangsbasis fr den Entwurf und die Programmierung nimmt. Was eine Java-Schnittstelle ist? Eine 100% abstrakte Klasse. Was eine abstrakte Klasse ist? Das ist eine Klasse, die nicht instantiiert werden kann. Und wozu soll die gut sein? Lesen Sie das Kapitel... Manche Klassen sollten einfach nicht instantiiert werden Abstrakte Klassen (knnenracAHnstantiiertwerden) Abstrakte Methoden (mssen implementiert werden) Polymorphie in Aktion Die Klasse Object (die ultimative Superklasse fr alles) Objekte aus einer ArrayList nehmen (sie kommen als Typ Object raus) Der Compiler prft den Referenztyp (bevor er Sie eine Methode aufrufen lsst) Finden Sie Ihr inneres Object Polymorphe Referenzen Eine Objektreferenz casten (im Vererbungsbaum nach unten verschieben) The Deadly Diamond of Death (Problem der Mehrfachvererbung) Interfaces verwenden (die beste Lsung) bungen und Rtsel 213 214 215 216 223 224 230

Hund

Konstruktoren und Garbage Collection


Objekte werden geboren und Objekte sterben, sie herrschen aber das
Leben eines Objekts. Sie entscheiden, wie und wann ein Objekt konstruiert wird. Sie entscheiden, wann es aufgegeben werden soll. Der Garbage Collector (gc) will den Speicher wieder haben. In diesem Kapitel sehen wir uns an, wie Objekte erzeugt werden, wie sie leben, whrend sie leben, und wie Sie sie effektiv bewahren oder aufgeben. Das bedeutet, dass wir ber den Heap, den Stack, Geltungsbereiche, Konstruktoren, Super-Konstruktoren, null-Referenzen uhd anderes reden werden. Der Stack und der Heap: wo das Leben spielt Methoden auf dem Stack Wo die M o k Variablen leben Wo die /nstanzvariablen leben Das Wunder der Objekterzeugung Konstruktoren (der Code, der ausgefhrt wird, wenn Sie new sagen) Den Zustand einer neuen Ente initialisieren berladene Konstruktoren Superklassenkonstruktoren (Konstruktorverkettung) Einen berladenen Konstruktor mit this() aufrufen Das Leben eines Objekts Garbage Collection (und Objekte auswhlbar machen) bungen und Rtsel 236 237 238 239 240 241 243 247 250 256 258 260 266

U. Die erste W * tot jeUt so p t W.e tot

Alle Instanzen der gleichen Klasse teilen sich ein einziges Exemplar der statischen Variablen.
Hatisthe Variable:

10

Zahlen, bitte!
R e c h n e n S i e ' S a U S . In der Java-API gibt es eine Menge praktischer Methoden fr Absolutbetrge, zum Runden, zur Extremwertbestimmung etc. Aber wie sieht es mit der Formatierung aus? Vielleicht mchten Sie,dass Ihre Zahlen mit exakt zwei Nachkommastellen ausgegeben oder dass groe Zahlen mit Trennzeichen unterteilt werden, damit man sie leichter lesen kann. Und wie steht es mit Datumsangaben? Als Erstes sehen wir uns einmal an, was es fr eine Variable oder eine Methode bedeutet, statisch zu. Die Klasse Math (brauchen wir davon eine Instanz?) Statische Methoden Statische Variablen Konstanten (statische finale Variablen) Math-Methoden (random(), roundQ, abs() usw.) Wrapperklassen (Integer, Boolean, Character usw.) Autoboxing Zahlen formatieren Formatierung und Manipulation von Datumsangaben Statische Importe bungen und Rtsel 274 275 277 282 286 287 289 294 301 307 310

Variable* eine fro blasse

xi

1 1

Riskantes Verhalten
Manches passiert einfach. Die Datei ist nicht da. Der Server

l u f t n i c h t . Und wenn Sie ein noch so guter Programmierer sind - Sie knnen nicht alles unter Kontrolle haben.Wenn Sie eine riskante Methode schreiben, brauchen Sie Code, der all das Schlimme, das mglicherweise passiert, behandelt. Aber woher wissen Sie, wann eine Methode riskant ist? Und wo platzieren Sie den Code, der die/lusna/iniesituation behandelt? In diesem Kapitel programmieren wir einen MIDI-Musikplayer, der die riskante Java-Sound-API benutzt - daher sollten wir das besser alles schnell rausfinden! Bauen wir uns eine Musikmaschine Wenn eine Methode, die Sie aufrufen wollen, riskant ist... Exceptions sagen: Es ist etwas Schlimmes passiert. Der Compiler garantiert (er prft), dass Sie das Risiko kennen Das try-and-catch-Prinzip (Skateboarder) Flusskontrolle in try/catch-Rlcken Derfinally-Block(egal, was passiert, schalte den Herd aus!) Abfangen von Mehrfach-Exceptions Eine Exception deklarieren (weichen Sie ihr einfach aus!) Das Gesetz Behandeln oder deklarieren CodeKche (Sound erzeugen) bungen und Rtsel
316 319 320 321 322 326 327 329 335 337 339 348

Klasse mit einer riskanten Methode

12
c l a s s MeineuereKlasse { itoinXnnr*lU.i void 1OB() {

Innen hui, auen GUI


Sehen Sie den Tatsachen ins Auge: Um GUIs (grafische Benutzeroberflchen) kommen Sie nicht herum, selbst wenn sie
davon ausgehen, dass Sie den Rest Ihres Lebens serverseitigen Code schreiben, mssen Sie frher oder spter Tools entwickeln, und dafr htten Sie dann ganz sicher gern eine grafische Schnittstelle.Wir werden zwei Kapitel mit der Programmierung von GUIs zubringen und dabei grundlegende Features der Sprache Java kennen lernen, z.B. Event-Handling und innere Klassen. In diesem Kapitel setzen wir einen Button auf den Bildschirm und lassen ihn reagieren, wenn man ihn anklickt. Auerdem zeichnen wir etwas auf den Bildschirm, zeigen ein JPEG-Bild an und versuchen uns sogar an einer kleinen Animation. Ihre erste GUI Wie man an ein Benutzerereignis kommt Ein Listener-Interface implementieren Wie man an das ActionEvent eines Buttons kommt Dinge in eine GUI setzen Schnes mit paintComponent() Das Graphics2D-Objekt Zwei oder mehr Widgets in einen Frame setzen Innere Klassen kommen uns zu Hilfe Animation CodeKche (Grafiken zum Beat der Musik einfgen) bungen und Rtsel
355 357 358 360 363 365 366 370 376 382 386 394

Innere Klasse ist vollstndig von uerer Klasse umschlossen.

xii

13
963 (
' Westen

Mehr Schwung mit Swing


S w i n g i s t e i n f a c h . Wenn es Ihnen nicht so wichtig ist, wo die Dinge auf dem Bildschirm landen. Swing-Code sieht einfach aus, aber dann kompilieren Sie das Ganze, fhren es aus, sehen es sich an und denken: Hey, das sollte aber nicht dort stehen ... Der Grund dafr, dass der Code so leicht zu schreiben ist, ist der Layoutmanager - aber genau der macht es auch so schwer kontrollierbarM\\ ein bisschen Mhe bringen Sie Layoutmanager jedoch dazu, sich Ihrem Willen zu unterwerfen. In diesem Kapitel bringen wir unsere Swing-Knste in Schwung und lernen etwas berWidgets. Swing-Komponenten Layoutmanager steuern Gre und Platzierung Drei Layoutmanager: Border, Flow und Box BorderLayout (managt fnf Bereiche) FlowLayout (managt bevorzugte Gre und die Reihenfolge) BoxLayout (hnelt FlowLayout, kann Komponenten vertikal anordnen) JTextField (fr einzeilige Benutzereingaben) JTextArea (fr mehrzeilige Benutzereingaben, Scrollen) JCheckBox (angeklickt?) JList (scrollbare, auswhlbare Liste) CodeKche (Ein Ungetm - den BeatBox-Chat-Clienten erzeugen) bungen und Rtsel 400 401 403 404 408 411 413 414 416 417 418 424

Norden

r .

Zentrum

Osten

und bekomme* ih

beb "ty was bvigl ttfce M

**aien i* fa

Sden

14

Speicherung von Objekten


Objekte lassen sich flach drcken und wieder aufblasen.
Objekte haben einen Zustand und ein Verhalten. Das Verhalten steckt in der Klasse, aber der Zustand steckt in jedem einzelnen Objekt. Muss Ihr Programm Zustnde speichern, knnen Sie das natrlich auf die mhsame Weise tun - Sie befragen jedes Objekt und notieren dann akribisch den Wert jeder Instanzvariablen. Oder Sie machen es auf die einfache, objektorientierte Weise - indem Sie lediglich das Objekt selbst gefriertrocknen (serialisieren) und es mit Wasser anrhren (deserialisieren), wenn Sie es zurckhaben wollen. Speicherung von Zustnden Ein serialisiertes Objekt in eine Datei schreiben Input- und Outputstrme (Anschluss und Verkettung) Serialisierte Objekte Das Serializable-Interface implementieren Transiente Variablen verwenden Ein Objekt deserialisieren In eine Textdatei schreiben Die Klasse java.io.File Aus einer Textdatei lesen Einen String mit split() in mehrere Tokens spalten CodeKche bungen und Rtsel
431 432 433 434 437 439 441 447 452 454 458 462 466

xiii

15

Eine Verbindung herstellen


Nehmen Sie Verbindung mit der Auenwelt auf. Das ist nicht schwer.

Um all die Lowlevel-Netzwerk-Details kmmern sich Klassen in derjava.net-Bibliothek. Einer der groen Vorteile von Java ist, dass das Senden und Empfangen ber ein Netz einfache Eingabe/ Ausgabe ist, lediglich mit einem etwas anderen Verbindungsstrom am Ende der Kette. In diesem Kapitel machen wir C//ent-Sockets. Wir machen Server-Sockets. Wir machen Clients und Server. Und wir lassen sie miteinander reden. Bevor Sie mit dem Kapitel durch sind, haben Sie einen voll funktionsfhigen und Multithread-tauglichen Chat-Client. Haben wir da gerade Multithread gesagt? Das Chat-Programm im berblick Verbinden, senden und empfangen Netzwerk-Sockets TCP-Ports Daten von einem Socket lesen (mit BufferedReader) Daten in einen Socket schreiben (mit PrintWriter) Das TippDesTagesClient-Programm schreiben Einen einfachen Server schreiben Der TippDesTagesServer-Code Einen Chat-Client schreiben Mehrere Aufruf-Stacks Einen neuen Thread starten Das Runnable-Interface (Job des Threads) Drei Zustnde eines neuen Threads (neu, lauffhig, laufend) Die lauflhig/lafend-Schleife Der Thread-Scheduler (das ist seine Entscheidung, nicht Ihre!) Einen Thread schlafen legen Erzeugen und Starten von zwei Threads Ehe in Gefahr: Ist dieses Paar noch zu retten? Das Rainer-und-Monika-Prblem in Codeform Dinge sperren, um sie atomar zu machen Jedes Objekt hat ein Schloss Das gefrchtete Problem des verlorenen Updates Synchronisierte Methoden (eine Sperre verwenden) Thread-Deadlock ChatClient mit mehreren Threads Code-Fertiggericht fr den EinfacherChatServer bungen und Rtsel 473 474 475 476 478 479 480 483 484 486 490 492 494 495 496 497 501 503 505 506 510 511 512 514 516 518 520 524

xiv

16
List
Set

Datenstrukturen
S o r t i e r e n ist in J a v a ein KlackS. Sie haben alle Werkzeuge zur Verfgung, um
Daten zu sammeln und damit zu arbeiten, ohne Ihre eigenen Sortieralgorithmen schreiben zu mssen. Das Collections-Frameworkvon Java enthlt eine Datenstruktur fr praktisch alles, was Sie jemals tun mssen. Sie wollen eine Liste, zu der Sie leicht etwas hinzufgen knnen? Sie wollen etwas mit Hilfe seines Namens suchen? Oder Sie brauchen eine Liste, die automatisch alles entfernt, was doppelt vorhanden ist? Sie mchten Ihre Kollegen danach sortieren, wie oft sie Ihnen in den Rcken gefallen sind? Es ist alles da ... Collections Eine ArrayList mit Collections.sort() sortieren Generics und Typsicherheit Sachen sortieren, die das Comparable-Interface implementieren Mit einem eigenen Comparator sortieren Die Collection-API (List, Set und Map) Verdopplungen mit HashSet verhindern berschreiben von hashCode () undequals() HashMap Wildcards fr Polymorphie verwenden bungen und Rtsel 533 534 540 547 552 557 559 560 567 574 576

Map

17
IFSfl
pakUeb.jar

Verffentlichen Sie Ihren Code


E s i s t Z e i t l O S Z U l a S S e n . Sie haben Ihren Code geschrieben. Sie haben ihn getestet. Sie haben ihn verbessert. Sie haben allen Bekannten erzhltes wre schn, wenn Sie nie wieder eine einzige Zeile Code sehen wrden. Und doch haben Sie zu guter Letzt ein Kunstwerk geschaffen.Tatschlich, das Ding luft! Aber was nun? In den beiden letzten Kapiteln des Buchs befassen wir uns mit dem Organisieren, Packen und Deployment des Codes. Wir sehen uns lokale und entfernte Deployment-Mglichkeiten an, inklusive ausfhrbarer JARs, RMI und Servlets. Ganz ruhig - einige der coolsten Dinge, die Java bietet, sind einfacher, als Sie denken. Deployment-Optionen Quellcode und class-Dateien getrennt halten Machen Sie das JAR ausfhrbar Das JAR ausfhren Stecken Sie Ihre Klassen in Pakete!' Pakete mssen eine passende Verzeichnisstruktur haben Kompilieren und Ausfhren mit Paketen Kompilieren mit -d Ein ausfhrbares JAR mit Paketen erzeugen Java Web Start (JWS) frs Deployment aus dem Web So erstellt man eine JWS-Anwendung bungen und Rtsel 582 584 585 586 587 589 590 591 592 597 600 601

PaketUebung.class

XV

18
Client

Verteilte Anwendungen
E n t f e r n u n g mUSS kein P r o b l e m Sein. Sicheres ist einfacher, wenn alle Teile

Ihrer Anwendung an einem Ort sind, auf einem Heap, mit einer JVM, die ber alles herrscht. Aber das ist nicht immer mglich. Und auch nicht immer wnschenswert. Was ist, wenn Ihr Programm leistungsintensive Berechnungen durchfhren soll? Was ist, wenn Ihr Programm Daten aus einer sicheren Datenbank braucht? In diesem Kapitel lernen wir, wie man die erstaunlich einfache Java-Technik namens Remote Method Invocation (RMI) einsetzt. Wir werfen auch einen kurzen Blick auf Servlets, Enterprise Java Beans (EJB) und Jini.

Server

RMI zum Mitmachen, sehr ausfhrlich Ein kurzer Blick auf Servlets Ein sehr kurzer Blick auf Enterprise Java Beans (EJB) Bezauberndes Jini Den wirklich coolen Universaldienstbrowser erzeugen
Ende

614 625 631 632 636 648

A
B
XVI

Anhang A
D a s C o d e K C h e n - F i n a l e ! Der vollstndige Code fr unser BeatBox-Client-Programm - Ihre Chance, ein Rockstar zu werden!

Der Client-Code Der Server-Code

650 657

Anhang B
Die Top Ten der Themen, die es nicht ins Buch geschafft
h a b e n . Noch knnen wir Sie nicht ganz gehen lassen. Ein paar Sachen haben wir noch, aber dann sind Sie fertig. Diesmal meinen wir es ernst. Die Top Ten 660

Index

677