Java von Kopf bis Fuß:
Gespeichert in:
Hauptverfasser: | , |
---|---|
Format: | Buch |
Sprache: | German |
Veröffentlicht: |
Beijing u.a.
O'Reilly
2006
|
Ausgabe: | 1. Aufl. |
Schlagworte: | |
Online-Zugang: | Inhaltsverzeichnis |
Beschreibung: | XXVIII, 688 S. Ill., graph. Darst. |
ISBN: | 3897214482 9783897214484 |
Internformat
MARC
LEADER | 00000nam a2200000 c 4500 | ||
---|---|---|---|
001 | BV021551156 | ||
003 | DE-604 | ||
005 | 20191023 | ||
007 | t | ||
008 | 060418s2006 gw ad|| |||| 00||| ger d | ||
016 | 7 | |a 978707893 |2 DE-101 | |
020 | |a 3897214482 |9 3-89721-448-2 | ||
020 | |a 9783897214484 |9 978-3-89721-448-4 | ||
035 | |a (OCoLC)633166035 | ||
035 | |a (DE-599)BVBBV021551156 | ||
040 | |a DE-604 |b ger |e rakddb | ||
041 | 0 | |a ger | |
044 | |a gw |c XA-DE-NW | ||
049 | |a DE-20 |a DE-Aug4 |a DE-29T |a DE-824 |a DE-858 |a DE-573 |a DE-1049 |a DE-523 |a DE-526 |a DE-19 |a DE-11 |a DE-188 | ||
084 | |a ST 250 |0 (DE-625)143626: |2 rvk | ||
084 | |a 004 |2 sdnb | ||
100 | 1 | |a Sierra, Kathy |d ca. 20./21. Jahrhundert |e Verfasser |0 (DE-588)119774696X |4 aut | |
240 | 1 | 0 | |a Head First Java |
245 | 1 | 0 | |a Java von Kopf bis Fuß |c Kathy Sierra ; Bert Bates |
250 | |a 1. Aufl. | ||
264 | 1 | |a Beijing u.a. |b O'Reilly |c 2006 | |
300 | |a XXVIII, 688 S. |b Ill., graph. Darst. | ||
336 | |b txt |2 rdacontent | ||
337 | |b n |2 rdamedia | ||
338 | |b nc |2 rdacarrier | ||
650 | 0 | 7 | |a Objektorientierte Programmierung |0 (DE-588)4233947-9 |2 gnd |9 rswk-swf |
650 | 0 | 7 | |a Java |g Programmiersprache |0 (DE-588)4401313-9 |2 gnd |9 rswk-swf |
650 | 0 | 7 | |a Java 2 Standard Edition 5.0 |0 (DE-588)4799436-8 |2 gnd |9 rswk-swf |
689 | 0 | 0 | |a Java 2 Standard Edition 5.0 |0 (DE-588)4799436-8 |D s |
689 | 0 | 1 | |a Objektorientierte Programmierung |0 (DE-588)4233947-9 |D s |
689 | 0 | |5 DE-604 | |
689 | 1 | 0 | |a Java |g Programmiersprache |0 (DE-588)4401313-9 |D s |
689 | 1 | 1 | |a Objektorientierte Programmierung |0 (DE-588)4233947-9 |D s |
689 | 1 | |8 1\p |5 DE-604 | |
700 | 1 | |a Bates, Bert |d ca. 20./21. Jahrhundert |e Verfasser |0 (DE-588)1197747249 |4 aut | |
856 | 4 | 2 | |m HBZ Datenaustausch |q application/pdf |u http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=014767221&sequence=000002&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA |3 Inhaltsverzeichnis |
999 | |a oai:aleph.bib-bvb.de:BVB01-014767221 | ||
883 | 1 | |8 1\p |a cgwrk |d 20201028 |q DE-101 |u https://d-nb.info/provenance/plan#cgwrk |
Datensatz im Suchindex
_version_ | 1804135307325472768 |
---|---|
adam_text | Der Inhalt (in der Übersicht)
Einführung xvü
1 Die Oberfläche durchbrechen: eine Kostprobe 1
2 Ein Ausflug nach Objekthausen: ja, da gibt es Objekte 27
3 Verstehen Sie Ihre Variablen: elementare Datentypen und Referenztypen 49
4 Wie sich Objekte verhalten: Objektzustände beeinflussen Methodenverhalten 71
5 Methoden mit Superkraft Schleifen, Operatoren und noch viel mehr 95
6 Die Java-Bibliothek verwenden: Sie müssen nicht alles selbst schreiben 125
7 Besser leben in Objekthausen: Zukunftsplanung 165
8 Ernsthafte Polymorphie: abstrakte Klassen und Interfaces nutzen 197
9 Leben und Sterben eines Objekts: Konstruktoren und Speicherverwaltung 235
10 Zahlen, bitte! Mathe, Zahlenformatierung und Statisches 273
11 Riskantes Verhalten: Exception-Handling 315
12 Innen hui, außen GUI: Grafische Oberflächen, Events und innere Klassen 353
13 Mehr Schwung mit Swing: Layout-Manager und Komponenten 399
14 Speicherung von Objekten: Serialisierung und E/A 429
15 Eine Verbindung herstellen: Netzwerk-Sockets und Multithreading 471
16 Datenstrukturen: Collections und Generics 529
17 Veröffentlichen Sie Ihren Code: Pakete, JARs und Deployment 581
18 Verteilte Anwendungen: RMI, Servlets, EJB und Jini 607
A Anhang A: CodeKüchen-Finale 649
B Anhang B: Die Top Ten derThemen, die es nicht ins Buch geschafft haben... 659
Index 677
Der Inhalt (jetzt ausführlich)
E Einführung
Ihr Gehirn Und Java. Sie versuchen, etwas zu lernen, und Ihr Hirn tut sein Bestes,
damit das Gelernte nicht hängen bleibt. Es denkt nämlich: »Wir sollten lieber ordentlich Platz für
wichtigere Dinge lassen, z.B. für das Wissen, welche Tiere einem gefährlich werden könnten, 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 abhängt, etwas über Java zu wissen?
Für wen ist dieses Buch? xv *
Wir wissen, was Ihr Gehirn denkt ^
Metakognition ^
Machen Sie sich Ihr Him untenan xx i
Was Sie für dieses Buch brauchen »^
Die Fachgutachter x*
Danksagungen «*
A Die Oberfläche durchbrechen
I Java führt Sie an neue Orte. Seit seinem bescheidenen Schritt an die öffentlich-
¦ keit mit der (kümmerlichen) Version 1.02 hat Java mit seiner freundlichen Syntax, seinen
objektorientierten Features, der Speicherverwaltung und natürlich mit dem Versprechen der
Portabilität Programmierer verführt. 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!
Virtuelle Wie Java funktioniert 2
Maschinen __98^_l Code-Struktur in Java 7
^^^HB__| Anatomie einer Klasse 8
^^^Hj^L Die main-Methode 9
Method Paityo k r^____HbL. Schleifen ((/:Tests) 11
1 invotespecy M/ ^_S^^ ^mJi Bedingte Verzweigungen 13
ÜlaCSw)» f ~^-~-~---_ JE/ »99 Bierflaschen« programmieren 14
4retum I . ~~*WM?M Phras-O-Mat 16
^(¦¦HPBSP ^Lm £!I^~M Kamingespräche: Der Compiler und die IVM 18
Ausgabe (_¦___! tg^w
(find») t_^_^_M Übungen und Rätsel 20
2 Ein Ausflug nach Objekthausen
Man hat mir gesagt, wir hätten 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 müssen wir diese prozedurale Welt hinter uns lassen
und damit beginnen, eigene Objekte zu machen. Wir werden uns ansehen, was die objekt¬
orientierte Entwicklung in Java zu einem solchen Vergnügen macht. Wir werden uns den Unter¬
schied zwischen einer Klasse und einem Objekt ansehen. Wir werden uns ansehen, wie Objekte
Ihr Leben verbessern.
_______ Stuhlkriege (Stefan, der OO-Typ, gegen Harry,
große eiM blasse den prozeduralen Programmierer) 28
% Vererbung (eine Einführung) 31
_I^M^ bellen!) v__ .___« Methoden überschreiben (eine Einführung) 32
Hjj^^^___j(|^ F^_____r^_, Was ist in einer Klasse? (Methoden, Instanzvariablen) 34
J^^^^J^^^K ^^H^L m Ein erstes Objekt machen 36
^^K^^ 0^___kA ^^^ main() verwenden 38
^^ ^__8_Bl ¦ I öfc k+ Der Code für das Ratespiel 39
^^ ^^ Übungen und Rätsel 42
I
3 Verstehen Sie Ihre Variablen
Variablen gibt es in zwei Geschmacksrichtungen: elemen¬
tare Typen und Referenztypen. Im Leben muss es doch mehr
geben 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 kön¬
nen, was Sie in eine Variable stecken können und was Sie mit einer Variablen tun können. Und
schließlich werden wir verstehen, wie das Leben, das sich auf dem Garbage Collectible Heap
abspielt, wirklich ist.
^^^^ Eine Variable deklarieren (Java kümmert sich um Typen) 50
jBBMWJHk Elementare Typen (»Einen doppelten Espresso, bitte!«) 51
pMröy » Java-Schlüsselwörter 53
WL * _ Jfepl» Referenzvariablen (Fernsteuerung für ein Objekt) 54
pfSSmmi gl^rit: Objekte deklarieren und zuweisen 55
j^ /^j/ 0^ Objekte auf dem Garbage Collectible Heap 57
|ftf^_ Arrays (ein erster Blick) 59
Vjj^B Übungen und Rätsel 63
Hund-Referenz
4 Wie sich Objekte verhalten
Zustände haben Auswirkungen auf Verhalten, und Verhalten
hat Auswirkungen auf Zustände. Wir wissen, dass Objekte Zustände und
Verhalten haben, die von Instanzvariablen und Methoden repräsentiert werden. Nun sehen
wir uns an, in welcher Beziehung Zustände und Verhalten zueinander stehen. Objekte haben
ein Verhalten, das auf ihre Zustände wirkt. Anders gesagt, Methoden nutzen die Werte von
Instanzvariablen - beispielsweise »wenn Hund weniger wiegt als 7 Kilo, mach Kläffgeräusch«
oder »erhöhe Gewicht um 3 Kilo«./Indern wir mal ein paar Zustände.
JaVa iSt FaSS-bV-YalUe. ^iflfeih. Methoden nutzen Objektzustände
¦- /^H@HHHt ^D e Größe beeinflusst das Bellen) 73
PaS bedeUtCt Pa $S-by-C0py. f UM Meth°den-Argumente und Rückgabetypen 74
^^~ nMPSP^^H ^ass )y Va^ue (Die Variable wird immer kopiert) 77
Kapselung (tun Sie es oder machen Sie sich lächerlich) 80
*°h x ^^oJJ. Referenzen in Arrays verwenden 83
jd^^trff^ ^^J Übungen und Rätsel 88
« Q
int . int
£oo.los(x); void los(int z){ )
5 Methoden mit Superkraft
Jetzt werden wir unseren Methoden etwas mehr Muskelkraft
geben. 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 könnte auch nützlich sein, Zufallszahlen zu generieren. Oder einen String in
ein int umzuwandeln, ja, das wäre cool. Und warum lernen wir nicht all den Kram, während
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 abschießen (wie bei
u/v ** * 4as ^ t* * Schiffe versenker))-
l fVeW »Dot-Com versenken« entwickeln 96
I 1 1 1 1 1 1 1 EinfachesDotComSpiel (die simple Version) 98
L_J Vorcode für EinfachesDotComSpiel schreiben 100
jJH|| Testcode für EinfachesDotComSpiel schreiben 102
hEI— EinfachesDotComSpiel schreiben 103
0 ^Bb|^HHHBBHh_^^ Endgültigen Code für EinfachesDotComSpiel schreiben 106
E Zufallszahlen mit Math.random() generieren 111
F| Code-Fertiggericht für die Benutzereingabe in der Kommandozeile 112
G llflHHll /»^Schleifen 114
0 12 3 4 5 6 Elementare Typen von großer Größe zu kleiner Größe casten 117
Einen String mit Integer.parselnt() in ein int umwandeln 117
Übungen und Rätsel 118
6 Die Java-Bibliothek verwenden
Java wird mit Hunderten vorgefertigter Klassen ausgeliefert.
Sie müssen 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. Schließlich haben
Sie etwas Besseres zu tun. Wenn Sie Code schreiben, können Sie sich ruhig auf die Teile beschrän¬
ken, 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
»Gut zu wissen, dass es im Package . , • . / • u j- u i j i ,„, u iao
6 ArrayList (sich die Vorteile der Java API zunutze machen) lAZ
java. util eine ArrayList gibt. Aber wie
hätte ich das allein rausfinden können ?« e ° om ° e rePaneren
Das richtige Spiel bauen (»Dot-Com versenken«) 140
^^ - Julia, 31, Hand-Model y
^^^A Vorcode für das richtige Spiel 144
flHf^ Code für das richtige Spiel 146
^^H|^^^ Boolesche Ausdrücke 151
^^^^^^^^H Die Bibliothek (die Java-API) verwenden 154
^^^^^^^^^^^^^V Packages verwenden (Import-Anweisungen und
^^^^^^B^^^F vollständige Namen) 155
^l^r ^^m Die HTML-API-Dokumentation und Referenzbüchcr nutzen 158
Übungen und Rätsel 161
7 Besser leben in Objekthausen
Planen Sie Ihre Programme mit Blick auf die Zukunft was wäre,
wenn Sie Code schreiben könnten, den ein anderer problemlos erweitern kann? Und was wäre,
wenn Ihr Code flexibel genug für diese verfluchten Spezifikationsänderungen in letzter Minute
wäre? Wenn Sie auf den Polymorphie-Zug springen, lernen Sie die fünf 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 vier Tipps zur Nutzung von Ver¬
erbung inklusive
-; ^ Vererbung verstehen (Unterklassen und Superklassen) 168
^B» w?* ifc^. - Einen Vererbungsbaum entwerfen (eine Tier-Simulation) 170
! V* Hh ^¦¦¦ ^(H^* m Codeverdopplung verhindern (mit Vererbung) 171
/ ™*W*Meftf^B:»i^^Äyp § Methoden überschreiben 170
Brüderchen k fc2*jP* * ¥ IST EIN und HAT-EIN (die Badewannen-Frau) 177
/ Jeaerr ttbär- mtan*m tl»ir. § Was kann man von der Superklasse erben? 180
/ Einmaihin,ein ** nThr- § Was bringt der ganze Vererbungskram? 182
I /«Safes TJtf/„ m Polymorphie (eine Supertyp-Referenz für Unterklassen-Objekt
JV*tsindSie OUcf e/nB8r. m verwenden) 183
/ Oenfc Se^t^eitein e ^e ^ache ;¦ M Regeln fürs Überschreiben (lassen Sie die Finger von den
/ ^AY in^ran-^nx^ält ists%S:das I Argumenten und Rückgabetypen!) 190
*^*ü*n^fc^^ • ^ ^ Jos ^y m Eine Methode überladen (nichts weiter als Methodennamen
^^^***i|| ***(Äfc^ jf wiederverwenden) 191
lm»mmmJ Übungen und Rätsel 192
8 Ernsthafte Polymorphie
Vererbung ist nur der Anfang. Um Polymorphie richtig zu nutzen, brauchen wir
Schnittstellen. Wir müssen über einfache Vererbung hinausgehen und eine Stufe der Flexibilität
erreichen, die man nur erhält, wenn man Schnittstellendefinitionen als Ausgangsbasis für 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 ^H 200
Object o = al.get(index) ; ^^K
„ j .. #n jv Abstrakte Klassen (können nicht instantiiert werden) ^K. 201
Hund n = (Hund) o; ^^^^
h beweaen () • ** v % Abstrakte Methoden (müssen implementiert werden) ^^^^k 203
^HB^- - - Polymorphie in Aktion ^^^^^ 206
g!^ ^^MlHHfc* r ;; Die Klasse Object (die ultimative Superklasse für ato) ^Q^/j 208
MB J^SSB^j *-^ Objekte aus einer ArrayList nehmen (sie kommen als Typ Object raus) 211
W*w y^^^^^SSKSkt • ^CT (- omP er P1^1 den Referenztyp (bevor er Sie eine Methode
Ob eCt JL *^PPfe. Finden Sie Ihr inneres Object 214
Jj^L ». * Poh/morphe Referenzen 215
VW H*hA ^ *i*de»1 in dt* Eine Objektreferenz casten (im Vererbungsbaum nach unten
Wr dt*JT* eir**ldelh verschieben) 216
Hund wiuov »The Deadly Diamond of Death« (Problem der Mehrfechvererbung) 223
Interfaces verwenden (die beste Lösung) 224
Übungen und Rätsel 230
9 Konstruktoren und Garbage Collection
Objekte werden geboren und Objekte sterben, sie herrschen über 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, während 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 und anderes
reden werden.
Der Stack und der Heap: wo das Leben spielt 236
Wew t^A ** Methode U Methoden auf dem Stack 237
^^ / iJyvVt, w«* *ese ^^aa. Wo die lokalen Variablen leben 238
^fl^^^^HRpMfl^fel^lV a^ e ne 3 dcTe Wo die /?wtarezvariablen leben 239
^Hflj^^^Ht ^^^^^^^^^^¦j^ Das Wunder der Objekterzeugung 240
4HsE-9|E^^|HH^^^^^^^^^^^^^^B Konstruktoren (der Code, der ausgeführt wird, wenn Sie new sagen) 241
HkSK^HHV^^^^H^^^^^^^^^^^^V Den Zustand einer neuen Ente initialisieren 243
^¦¦ttMH^^^HFPr^^^^^^^^^^H Überladene Konstruktoren 247
^¦^^^¦¦¦¦¦¦^^^¦¦¦¦¦¦¦¦^ Superklassenkonstruktoren (Konstruktorverkettung) 250
^ Einen überladenen Konstruktor mit this() aufrufen 256
»e« rrfcatt ei« neues ^-Objekt g^J™ Das Leben eines Objekts 258
cjM. da»»t j» TT*°? ^^ »ut wie tot Garbage Collection (und Objekte auswählbar machen) 260
»A. Vie er J Übungen und Rätsel 266
4( Zahlen, bitte!
I 1 f Rechnen Sie S aUS. In der Java-API gibt es eine Menge praktischer Methoden für
Alle Instanzen Absolutbeträge, zum Runden, zur Extremwertbestimmung etc. Aber wie sieht es mit der
der gleichen Klasse Formatierung aus? Vielleicht möchten Sie, dass Ihre Zahlen mit exakt zwei Nachkommastellen
Exemplar der sta^ fl*S ausgegeben oder dass große Zahlen mit Trennzeichen unterteilt werden, damit man sie leichter
tischen Variablen. lesen kann. Und wie steht es mit Datumsangaben? Als Erstes sehen wir uns einmal an, was es für
. , ,, eine Variable oder eine Methode bedeutet, statisch zu.
|Mt*z. « * «-*•»*»« Die Klasse Math (brauchen wir davon eine Instanz?) 274
r-—^^^^ä^^^Sj^J ¦ Statische Methoden 275
l^^^^^^^^^^^^^^^K fnsidnzvariablen: Statische Variablen 277
l^^^^^^^^Hj^^^^l ¦ eine F* ° l 5^ 1- Konstanten (statische finale Variablen) 282
I^^^^^^^^^H^^^^^BB IaI aV i/a^.jbloi- Math-Methoden (random(), round(), abs() usw.) 286
l^^^^^^^^^^^^^HM eine pro JsUsse Wrapperklassen (Integer, Boolean, Character usw.) 287
l^^^^^^H^^^^^^^^H Autoboxing 289
I^^^H^^^^bI Zahlen formatieren 294
1 V^^^^^^^^^^^^^^H I Formatierung und Manipulation von Datumsangaben 301
I V^^^^^^^^^^^B ¦ Statische Importe 307
1 V^^^^^^^^Bi^^^9^B Übungen und Rätsel 310
A A Riskantes Verhalten
I I Manches passiert einfach. Die Datei ist nicht da. Der Server
I I läuft nicht. Und wenn Sie ein noch so guter Programmierer sind - Sie können nicht alles
unter Kontrolle haben.Wenn Sie eine riskante Methode schreiben, brauchen Sie Code,der
all das Schlimme, das möglicherweise passiert, behandelt. Aber woher wissen Sie, wann eine
Methode riskant ist? Und wo platzieren Sie den Code, der die Ausna/imesituation 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 316
ifi evne JLcePftb/, . Wenn eine Methode, die Sie aufrufen wollen, riskant ist... 319
jS ^ ^^ ^ *fcif Exceptions sagen: »Es ist etwas Schlimmes passiert.« 320
^ Der Compiler garantiert (er prüft), dass Sie das Risiko kennen 321
IZ^rr k| ^ -sriü—•¦¦ ^^ try-and-catck¥rinzvp (Skateboarder) 322
LÜ1„, I V , ¦ Flusskontrolle in try/catch-B öcken 326
i * ¦ ruft riskante H _^ _ ,, _, , , , . . . , „ , . . „o 7
¦ J M th d f ^^^^^^^B Der finally-Block (»egal, was passiert, schalte den Herd aus!«) 327
IFu^Bc^; Klasse Abfangen von Mehrfach-Exceptions 329
mit einer Eine Exception deklarieren (weichen Sie ihr einfach aus!) 335
riskan1-en Das Gesetz »Behandeln oder deklarieren« 337
CodeKüche (Sound erzeugen) 339
Übungen und Rätsel 348
Af Innen hui, außen GUI
I Ml Sehen Sie den Tatsachen ins Auge: Um GUIs (grafische
I «^ Benutzeroberflächen) kommen Sie nicht herum, selbst wenn sie
davon ausgehen, dass Sie den Rest Ihres Lebens serverseitigen Code schreiben, müssen Sie
früher oder später Tools entwickeln, und dafür hätten Sie dann ganz sicher gern eine grafische
Schnittstelle. Wir werden zwei Kapitel mit der Programmierung von GUIs zubringen und dabei
cia«s n«ineAufi«reKiass« { grundlegende Features der Sprache Java kennen lernen, z.B. Event-Handling und innere Klas-
|^|jMUdi|ilMMtaVMk 4 sen- n diesem Kapitel setzen wir einen Button auf den Bildschirm und lassen ihn reagieren,
illlfi iSilsiiltfe ^ • wenn man ihn anklickt. Außerdem zeichnen wir etwas auf den Bildschirm, zeigen ein JPEG-Bild
^jt^äuä- ftnftl - .1 an uncl versucnen uns sogar an einer kleinen Animation.
) Ihre erste GUI 355
Wie man an ein Benutzerereignis kommt 357
Innere Klasse ist vollständig Ein Listener-Interface implementieren 358
von äußerer Klasse umschlossen. ^^MB^.
rO ^BBBI% ^ e man an ^^ ActionEvent eines Buttons kommt 360
^-* MMmlm fe Dinge in eme GUI setzen 363
^BSKS^^Ur Schönes mit paintComponent() 365
P^W^f^iillS« Ifef/ DasGraphics2EK)bjekt 366
tteff? Vtfb«» e lJ^*pas »«ert ^Hj^^ Zwei oder mehr Widgets in einen Frame seuen 370
to^ *e^ri*lw ^Jtti*0 ^ nü** Innere Klassen kommen uns zu Hilfe 376
beBWttO («4 wyk^ Animation 382
CodeKüche (Grafiken zum Beat der Musik einfügen) 386
x|j Übungen und Rätsel 394
A{S Mehr Schwung mit Swing
¦ p Swing ist einfach. Wenn es Ihnen nicht so wichtig ist, wo die Dinge auf dem Bild-
I ^J schirm landen. Swing-Code sieht einfach aus, aber dann kompilieren Sie das Ganze, führen es
aus, sehen es sich an und denken: »Hey, das sollte aber nicht dort stehen...« Der Grund dafür,
dass der Code so leicht zu schreiben ist, ist der Layoutmanager - aber genau der macht es auch
so schwer kontrollierbar. Mit ein bisschen Mühe bringen Sie Layoutmanager jedoch dazu, sich
Ihrem Willen zu unterwerfen. In diesem Kapitel bringen wir unsere Swing-Künste in Schwung
und lernen etwas überWidgets.
. . r. M n 1 Swing-Komponenten 400
tWonenk« * ,»®« - i j ^es-ten * Worten j Layoutmanager steuern Größe und Platzierung 401
beko»1 1 l^ re ^e ^re Layoutmanager: Border, Flow und Box 403
vovzJ^te v*vn£- BorderLayout (managt fünf Bereiche) 404
¦ FlowLayout (managt bevorzugte Größe und die Reihenfolge) 408
Komponenten i » WMt 1 2 Hnim Otttn BoxLayout (ähnelt FlowLayout, kann Komponenten vertikal
Norden und Süden *! HOita» • A tli. anordnen) 411
bekommen ihm« ^ »a, «^ ibria M JTextField (für einzeilige Benutzereingaben) 413
( J| jf | JTextArea (für mehrzeilige Benutzereingaben, Scrollen) 414
f ¦ * - !a JCheckBox (angeklickt?) 416
JList (scrollbare, auswählbare Liste) 417
CodeKüche (Ein Ungetüm - den BeatBox-Chat-Clienten erzeugen) 418
Übungen und Rätsel 424
A A Speicherung von Objekten
ILJU Objekte lassen sich flach drücken und wieder aufblasen.
¦ JL Objekte haben einen Zustand und ein Verhalten. Das Verhalten steckt in der Klasse, aber der
Zustand steckt in jedem einzelnen Objekt. Muss Ihr Programm Zustände speichern, können
Sie das natürlich auf die mühsame Weise tun - Sie befragen jedes Objekt und notieren dann
akribisch den Wert jeder Instanzvariablen. Oder Sie machen es auf die einfache, objektorien¬
tierte Weise - indem Sie lediglich das Objekt selbst gefriertrocknen (serialisieren) und es mit
Wasser anrühren (deserialisieren), wenn Sie es zurückhaben wollen.
Speicherung von Zuständen 431
/ Cr t £in serialisiertes Objekt in eine Datei schreiben 432
~^^^SB^^ Input- und Outputströme (Anschluss und Verkettung) 433
^^^H^^^K Serialisierte Objekte 434
^ ^^^^ v^^ Das Serializable-Interface implementieren 437
yl-fV frr fF* Transiente Variablen verwenden 439
desOriÄVlsiertN Ein Objekt deserialisieren 441
. / In eine Textdatei schreiben 447
|^^C Die Klasse java.io.File 452
^^^^^^H^ Aus einer Textdatei lesen 454
^^^^^^^^ Einen String mit split() in mehrere Tokens spalten 458
^K^^^^S^^ CodeKüche 462
Übungen und Rätsel 466
wiit
yä i-W Eine Verbindung herstellen
I ^ Nehmen Sie Verbindung mit der Außenwelt auf. Das ist nicht schwer.
| ^^f Um all die Lowlevel-Netzwerk-Details kümmern sich Klassen in der java.net-Bibliothek. Einer der
großen Vorteile von Java ist, dass das Senden und Empfangen über ein Netz einfache Eingabe/ t
Ausgabe ist, lediglich mit einem etwas anderen Verbindungsstrom am Ende der Kette. In diesem
Kapitel machen wir C//e/if-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 funktionsfähigen und Multithread-tauglichen Chat-Client. Haben wir da gerade Multithread
*£?£?* 9esagt?
1%./** ^ ^ * t DaS ChM-pTOS™mm im Überblick 473
___^ Verbinden, senden und empfangen 474 .
^ ^^B / ^^^^^^^^^B Netzwerk-Sockets 475
^t^^K^. ^^^^^^H TCP-Ports 476
H^^^^^^^P T^^^^^^^^^^B Daten von einem Socket lesen (mit BufferedReader) 478
^^^^^HB / ^MM^^P^PBB Daten in einen Socket schreiben (mit PrintWriter) 479
CI Wlt /« U^ SePVBr Das TippDesTagesClient-Programm schreiben 480
•¦ v zu» CV»* * Einen einfachen Server schreiben 483
^ ^ ^ 10° Der TippDesTagesServer-Code 484
?öA ^ Einen Chat-Client schreiben 486
Mehrere Aufruf-Stacks 490
Einen neuen Thread starten 492
Das Runnable-Interface (Job des Threads) 494
Drei Zustände eines neuen Threads (neu, lauffähig, laufend) 495
Die lauflähig/laufend-Schleife 496
Der Thread-Scheduler (das ist seine Entscheidung, nicht Ihre!) 497
Einen Thread schlafen legen 501
Erzeugen und Starten von zwei Threads 503
Ehe in Gefahr: Ist dieses Paar noch zu retten? 505
Das Rainer-und-Monika-Problem in Codeform 506
Dinge sperren, um sie atomar zu machen 510
Jedes Objekt hat ein Schloss 511
Das gefürchtete »Problem des verlorenen Updates« 512
Synchronisierte Methoden (eine Sperre verwenden) 514
Thread-Deadlock 516
ChatClient mit mehreren Threads 518
Code-Fertiggericht für den EinfacherChatServer 520
Übungen und Rätsel 524
xiv ]
A f Datenstrukturen
I BJ Sortieren ist in Java ein KlackS. Sie haben alle Werkzeuge zur Verfügung, um
¦ ^l^ Daten zu sammeln und damit zu arbeiten, ohne Ihre eigenen Sortieralgorithmen schreiben zu
müssen. Das Collections-Framework von Java enthält eine Datenstruktur für praktisch alles, was
Sie jemals tun müssen. Sie wollen eine Liste, zu der Sie leicht etwas hinzufügen können? Sie wol¬
len etwas mit Hilfe seines Namens suchen? Oder Sie brauchen eine Liste, die automatisch alles
entfernt, was doppelt vorhanden ist? Sie möchten Ihre Kollegen danach sortieren, wie oft sie
Ihnen in den Rücken gefallen sind? Es ist alles da ...
4% * 4. ^^ Collections 533
¦ ^Vv. wwwjr ^^^* Eine ArrayList mit Collections.sortO sortieren 534
List ^KiUKmi^SUllH Generics und Typsicherheit 540
Sachen sortieren, die das Comparable-Interface implementieren 547
/äftk ^^J^^ jt/^^. ^ einem eigenen Comparator sortieren 552
* / T^ W9M Die Collection-API (List, Set und Map) 557
Set ^IHiHUHHUHfl^^H Verdopplungen mit HashSet verhindern 559
Überschreiben von hashCode() und equals() 560
^ *^k jg^^ HashMap 567
MK^^ *^hP W^^P Wildcards für Polymorphie verwenden 574
Map PgntBP^ÜffBBSBffBPrWB Übungen und Rätsel 576
ArT Veröffentlichen Sie Ihren Code
¦ I Es ist Zeit lOSZUlaSSen. Sie haben Ihren Code geschrieben.Sie haben ihn getestet.
¦ 0 Sie haben ihn verbessert. Sie haben allen Bekannten erzählt, es wäre schön, wenn Sie nie wieder
eine einzige Zeile Code sehen würden. Und doch haben Sie zu guter Letzt ein Kunstwerk ge-
schaffen.Tatsächlich.das Ding läuft! Aber was nun? In den beiden letzten Kapiteln des Buchs be¬
fassen wir uns mit dem Organisieren, Packen und Deployment des Codes. Wir sehen uns lokale
und entfernte Deployment-Möglichkeiten an, inklusive ausführbarer JARs, RMI und Servlets.
¦BhI| Ganz ruhig - einige der coolsten Dinge, die Java bietet, sind einfacher, als Sie denken.
»HBB i—l. Deployment-Optionen 582
¦ I tSUlH Quellcode und class-Dateien getrennt halten 584
y^ ^ Machen Sie das JAR ausführbar 585
|a^mI ¥^ Das JAR ausführen 586
¦•¦^ II Stecken Sie Ihre Klassen in Pakete! 587
PakofUebung-Class
Pakete müssen eine passende Verzeichnisstruktur haben 589
Kompilieren und Ausfuhren mit Paketen 590
|HSB^^k I^^^^^^ÜIJ^^^H Kompilieren mit-d 591
HJ -H^K ^m ^^H?*^^^^^^^^B Ein ausführbares JAR mit Paketen erzeugen 592
^ ^H^T^^^^^B Java Web Start (JWS) fürs Deployment aus dem Web 597
m^ ^^^^^^^^^^^m So erstellt man eine JWS-Anwendung 600
^^^^W^^^^^^ Übungen und Rätsel 601
XV
/ä ^ Verteilte Anwendungen
I ä^ Entfernung mUSS kein Problem Sein. Sicheres ist einfacher, wenn alle Teile
I ^^^r Ihrer Anwendung an einem Ort sind,aufeinemHeap, mit einer JVM, die über alles herrscht. Aber
das ist nicht immer möglich. Und auch nicht immer wünschenswert. Was ist, wenn Ihr Programm
leistungsintensive Berechnungen durchführen 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.
¦ mimM KMI zum Mitmachen, seArausführlich 614
Client läjil B Server Ein kurzer Blick auf Servlets 625
^^^* _—-—- - ^ Ein seArkurzer Blick auf Enterprise Java Beans (EJB) 631
fatWJHK^j|^9fc . /^TB^jI^j .^eOct 1 Den wirklich coolen Universaldienstbrowser erzeugen 636
A Anhang A
Das CodeKÜChen-Finale! Der vollständige Code für unser BeatBox-Client-Pro-
gramm - Ihre Chance, ein Rockstar zu werden!
i-^^^SSälllPii gg 1 Der Client-Code 650
|» ^^^^tt^ÄH Der Server-Code 657
Erliii!iil§ -I
fcs äöSsiooi-gffig !SSSSs
B Anhang B
Die Top Ten der Themen, die es nicht ins Buch geschafft
haben. Noch können 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
I Index 677
xvi
|
adam_txt |
Der Inhalt (in der Übersicht)
Einführung xvü
1 Die Oberfläche durchbrechen: eine Kostprobe 1
2 Ein Ausflug nach Objekthausen: ja, da gibt es Objekte 27
3 Verstehen Sie Ihre Variablen: elementare Datentypen und Referenztypen 49
4 Wie sich Objekte verhalten: Objektzustände beeinflussen Methodenverhalten 71
5 Methoden mit Superkraft Schleifen, Operatoren und noch viel mehr 95
6 Die Java-Bibliothek verwenden: Sie müssen nicht alles selbst schreiben 125
7 Besser leben in Objekthausen: Zukunftsplanung 165
8 Ernsthafte Polymorphie: abstrakte Klassen und Interfaces nutzen 197
9 Leben und Sterben eines Objekts: Konstruktoren und Speicherverwaltung 235
10 Zahlen, bitte! Mathe, Zahlenformatierung und Statisches 273
11 Riskantes Verhalten: Exception-Handling 315
12 Innen hui, außen GUI: Grafische Oberflächen, Events und innere Klassen 353
13 Mehr Schwung mit Swing: Layout-Manager und Komponenten 399
14 Speicherung von Objekten: Serialisierung und E/A 429
15 Eine Verbindung herstellen: Netzwerk-Sockets und Multithreading 471
16 Datenstrukturen: Collections und Generics 529
17 Veröffentlichen Sie Ihren Code: Pakete, JARs und Deployment 581
18 Verteilte Anwendungen: RMI, Servlets, EJB und Jini 607
A Anhang A: CodeKüchen-Finale 649
B Anhang B: Die Top Ten derThemen, die es nicht ins Buch geschafft haben. 659
Index 677
Der Inhalt (jetzt ausführlich)
E Einführung
Ihr Gehirn Und Java. Sie versuchen, etwas zu lernen, und Ihr Hirn tut sein Bestes,
damit das Gelernte nicht hängen bleibt. Es denkt nämlich: »Wir sollten lieber ordentlich Platz für
wichtigere Dinge lassen, z.B. für das Wissen, welche Tiere einem gefährlich werden könnten, 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 abhängt, etwas über Java zu wissen?
Für wen ist dieses Buch? xv"*
Wir wissen, was Ihr Gehirn denkt "^
Metakognition "^
Machen Sie sich Ihr Him untenan xx"i
Was Sie für dieses Buch brauchen »^
Die Fachgutachter x*"
Danksagungen «*"
A Die Oberfläche durchbrechen
I Java führt Sie an neue Orte. Seit seinem bescheidenen Schritt an die öffentlich-
¦ keit mit der (kümmerlichen) Version 1.02 hat Java mit seiner freundlichen Syntax, seinen
objektorientierten Features, der Speicherverwaltung und natürlich mit dem Versprechen der
Portabilität Programmierer verführt. 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!
Virtuelle Wie Java funktioniert 2
Maschinen _98^_l Code-Struktur in Java 7
^^^HB_| Anatomie einer Klasse 8
^^^Hj^L Die main-Methode 9
Method Paityo k r^_HbL. Schleifen ((/:Tests) 11
1 invotespecy M/ ^_S^^ ^mJi Bedingte Verzweigungen 13
ÜlaCSw)» f\~^-~-~---_ JE/ »99 Bierflaschen« programmieren 14
4retum I \. " ~~*WM?M Phras-O-Mat 16
^(¦¦HPBSP ^Lm £!I^~M Kamingespräche: Der Compiler und die IVM 18
Ausgabe (_¦_! tg^w
(find») t_^_^_M Übungen und Rätsel 20
2 Ein Ausflug nach Objekthausen
Man hat mir gesagt, wir hätten 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 müssen wir diese prozedurale Welt hinter uns lassen
und damit beginnen, eigene Objekte zu machen. Wir werden uns ansehen, was die objekt¬
orientierte Entwicklung in Java zu einem solchen Vergnügen macht. Wir werden uns den Unter¬
schied zwischen einer Klasse und einem Objekt ansehen. Wir werden uns ansehen, wie Objekte
Ihr Leben verbessern.
_ Stuhlkriege (Stefan, der OO-Typ, gegen Harry,
große eiM blasse den prozeduralen Programmierer) 28
% Vererbung (eine Einführung) 31
_I^M^ bellen!) v_ ._« Methoden überschreiben (eine Einführung) 32
Hjj^^^_j(|^ F^_r^_, Was ist in einer Klasse? (Methoden, Instanzvariablen) 34
J^^^^J^^^K ^^H^L m Ein erstes Objekt machen 36
^^K^^' 0^_kA ^^^ main() verwenden 38
^^ ^_8_Bl ¦ I öfc k+ Der Code für das Ratespiel 39
^^"^^ Übungen und Rätsel 42
I
3 Verstehen Sie Ihre Variablen
Variablen gibt es in zwei Geschmacksrichtungen: elemen¬
tare Typen und Referenztypen. Im Leben muss es doch mehr
geben 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 kön¬
nen, was Sie in eine Variable stecken können und was Sie mit einer Variablen tun können. Und
schließlich werden wir verstehen, wie das Leben, das sich auf dem Garbage Collectible Heap
abspielt, wirklich ist.
^^^^ Eine Variable deklarieren (Java kümmert sich um Typen) 50
jBBMWJHk Elementare Typen (»Einen doppelten Espresso, bitte!«) 51
pMröy'» Java-Schlüsselwörter 53
WL *'\ _ Jfepl» Referenzvariablen (Fernsteuerung für ein Objekt) 54
pfSSmmi gl^rit: Objekte deklarieren und zuweisen 55
j^ /^j/\0^ Objekte auf dem Garbage Collectible Heap 57
|ftf^_ Arrays (ein erster Blick) 59
Vjj^B Übungen und Rätsel 63
Hund-Referenz
4 Wie sich Objekte verhalten
Zustände haben Auswirkungen auf Verhalten, und Verhalten
hat Auswirkungen auf Zustände. Wir wissen, dass Objekte Zustände und
Verhalten haben, die von Instanzvariablen und Methoden repräsentiert werden. Nun sehen
wir uns an, in welcher Beziehung Zustände und Verhalten zueinander stehen. Objekte haben
ein Verhalten, das auf ihre Zustände wirkt. Anders gesagt, Methoden nutzen die Werte von
Instanzvariablen - beispielsweise »wenn Hund weniger wiegt als 7 Kilo, mach Kläffgeräusch«
oder »erhöhe Gewicht um 3 Kilo«./Indern wir mal ein paar Zustände.
JaVa iSt FaSS-bV-YalUe. ^iflfeih. Methoden nutzen Objektzustände
¦- /^H@HHHt ^D'e Größe beeinflusst das Bellen) 73
PaS bedeUtCt Pa\$S-by-C0py. f UM Meth°den-Argumente und Rückgabetypen 74
^^~ nMPSP^^H ^ass"")y"Va^ue (Die Variable wird immer kopiert) 77
Kapselung (tun Sie es oder machen Sie sich lächerlich) 80
*°h x ^^oJJ. Referenzen in Arrays verwenden 83
jd^^trff^ ^^J Übungen und Rätsel 88
« Q
int . int
£oo.los(x); void los(int z){ )
5 Methoden mit Superkraft
Jetzt werden wir unseren Methoden etwas mehr Muskelkraft
geben. 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 könnte auch nützlich sein, Zufallszahlen zu generieren. Oder einen String in
ein int umzuwandeln, ja, das wäre cool. Und warum lernen wir nicht all den Kram, während
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 abschießen (wie bei
u/v ** * 4as ^\t* * Schiffe versenker))-
' l fVeW »Dot-Com versenken« entwickeln 96
I 1 1 1 1 1 1 1 EinfachesDotComSpiel (die simple Version) 98
L_J Vorcode für EinfachesDotComSpiel schreiben 100
jJH|| Testcode für EinfachesDotComSpiel schreiben 102
hEI— EinfachesDotComSpiel schreiben 103
0 ^Bb|^HHHBBHh_^^ Endgültigen Code für EinfachesDotComSpiel schreiben 106
E Zufallszahlen mit Math.random() generieren 111
F| Code-Fertiggericht für die Benutzereingabe in der Kommandozeile 112
G llflHHll /»^Schleifen 114
0 12 3 4 5 6 Elementare Typen von großer Größe zu kleiner Größe casten 117
Einen String mit Integer.parselnt() in ein int umwandeln 117
Übungen und Rätsel 118
6 Die Java-Bibliothek verwenden
Java wird mit Hunderten vorgefertigter Klassen ausgeliefert.
Sie müssen 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. Schließlich haben
Sie etwas Besseres zu tun. Wenn Sie Code schreiben, können Sie sich ruhig auf die Teile beschrän¬
ken, 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
»Gut zu wissen, dass es im Package . , • . / • u j- u i j i ,„, u \ iao
6 ArrayList (sich die Vorteile der Java API zunutze machen) lAZ
java. util eine ArrayList gibt. Aber wie
hätte ich das allein rausfinden können ?« e ° om ° e rePaneren
Das richtige Spiel bauen (»Dot-Com versenken«) 140
^^ - Julia, 31, Hand-Model y
^^^A Vorcode für das richtige Spiel 144
flHf^ Code für das richtige Spiel 146
^^H|^^^ Boolesche Ausdrücke 151
^^^^^^^^H Die Bibliothek (die Java-API) verwenden 154
^^^^^^^^^^^^^V Packages verwenden (Import-Anweisungen und
^^^^^^B^^^F vollständige Namen) 155
^l^r ^^m Die HTML-API-Dokumentation und Referenzbüchcr nutzen 158
Übungen und Rätsel 161
7 Besser leben in Objekthausen
Planen Sie Ihre Programme mit Blick auf die Zukunft was wäre,
wenn Sie Code schreiben könnten, den ein anderer problemlos erweitern kann? Und was wäre,
wenn Ihr Code flexibel genug für diese verfluchten Spezifikationsänderungen in letzter Minute
wäre? Wenn Sie auf den Polymorphie-Zug springen, lernen Sie die fünf 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 vier Tipps zur Nutzung von Ver¬
erbung inklusive
-; ^ Vererbung verstehen (Unterklassen und Superklassen) 168
^B» w?* ifc^. - Einen Vererbungsbaum entwerfen (eine Tier-Simulation) 170
'! V* Hh ^¦¦¦"^(H^* m Codeverdopplung verhindern (mit Vererbung) 171
/ ™*W*Meftf^B:»i^^Äyp § Methoden überschreiben 170
Brüderchen k fc2*jP*"* ¥ IST"EIN und HAT-EIN (die Badewannen-Frau) 177
/ Jeaerr" ttbär- mtan*m'tl»ir. § Was kann man von der Superklasse erben? 180
/ Einmaihin,ein'**'nThr- § Was bringt der ganze Vererbungskram? 182
I "'/«Safes TJtf/„ ' m Polymorphie (eine Supertyp-Referenz für Unterklassen-Objekt
JV*tsindSie OUcf e/nB8r. m verwenden) 183
/ Oenfc Se^t^eitein e'^e'^ache ;¦ M Regeln fürs Überschreiben (lassen Sie die Finger von den
/ ^AY"in^ran-^nx^ält"ists%S:das I Argumenten und Rückgabetypen!) 190
'*^*ü*n^fc^^ '"• ^"^""'"Jos ^y m Eine Methode überladen (nichts weiter als Methodennamen
^^^***i|| ***(Äfc^ jf wiederverwenden) 191
" lm»mmmJ Übungen und Rätsel 192
8 Ernsthafte Polymorphie
Vererbung ist nur der Anfang. Um Polymorphie richtig zu nutzen, brauchen wir
Schnittstellen. Wir müssen über einfache Vererbung hinausgehen und eine Stufe der Flexibilität
erreichen, die man nur erhält, wenn man Schnittstellendefinitionen als Ausgangsbasis für 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 ^H 200
Object o = al.get(index) ; ^^K
„ j . #n jv Abstrakte Klassen (können nicht instantiiert werden) ^K. 201
Hund n = (Hund) o; ^^^^
h beweaen () • ' ** v % ' " Abstrakte Methoden (müssen implementiert werden) ^^^^k 203
^HB^- -"- Polymorphie in Aktion ^^^^^ 206
g!^ "^^MlHHfc*" r';;''" Die Klasse Object (die ultimative Superklasse für ato) ^Q^/j 208
MB J^SSB^j' " *-^ Objekte aus einer ArrayList nehmen (sie kommen als Typ Object raus) 211
W*w y^^^^^SSKSkt • ^CT (-'omP''er P1^1 den Referenztyp (bevor er Sie eine Methode
Ob"'eCt JL *^PPfe. Finden Sie Ihr inneres Object 214
Jj^L ». *" Poh/morphe Referenzen 215
VW H*hA ^ *i*de»1 in dt* Eine Objektreferenz casten (im Vererbungsbaum nach unten
Wr dt*JT* eir**ldelh' verschieben) 216
Hund wiuov »The Deadly Diamond of Death« (Problem der Mehrfechvererbung) 223
Interfaces verwenden (die beste Lösung) 224
Übungen und Rätsel 230
9 Konstruktoren und Garbage Collection
Objekte werden geboren und Objekte sterben, sie herrschen über 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, während 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 und anderes
reden werden.
Der Stack und der Heap: wo das Leben spielt 236
Wew \t^A ** Methode U Methoden auf dem Stack 237
^^ / iJyvVt, w«* *ese ^^aa. Wo die lokalen Variablen leben 238
^fl^^^^HRpMfl^fel^lV'a^ e' ne 3"dcTe Wo die /?wtarezvariablen leben 239
^Hflj^^^Ht ^^^^^^^^^^¦j^' Das Wunder der Objekterzeugung 240
4HsE-9|E^^|HH^^^^^^^^^^^^^^B Konstruktoren (der Code, der ausgeführt wird, wenn Sie new sagen) 241
HkSK^HHV^^^^H^^^^^^^^^^^^V Den Zustand einer neuen Ente initialisieren 243
^¦¦ttMH^^^HFPr^^^^^^^^^^H Überladene Konstruktoren 247
^¦^^^¦¦¦¦¦¦^^^¦¦¦¦¦¦¦¦^ Superklassenkonstruktoren (Konstruktorverkettung) 250
^ Einen überladenen Konstruktor mit this() aufrufen 256
»e« rrfcatt ei« neues ^-Objekt g^J™ Das Leben eines Objekts 258
cjM. da»»t j» TT*°? '^^ »ut wie tot Garbage Collection (und Objekte auswählbar machen) 260
»A. Vie er J Übungen und Rätsel 266
4(\ Zahlen, bitte!
I 1 f Rechnen Sie'S aUS. In der Java-API gibt es eine Menge praktischer Methoden für
Alle Instanzen Absolutbeträge, zum Runden, zur Extremwertbestimmung etc. Aber wie sieht es mit der
der gleichen Klasse Formatierung aus? Vielleicht möchten Sie, dass Ihre Zahlen mit exakt zwei Nachkommastellen
Exemplar der'sta^ fl*S ausgegeben oder dass große Zahlen mit Trennzeichen unterteilt werden, damit man sie leichter
tischen Variablen. lesen kann. Und wie steht es mit Datumsangaben? Als Erstes sehen wir uns einmal an, was es für
. , ,, eine Variable oder eine Methode bedeutet, statisch zu.
|Mt*z."« \ *"«-*•»*»« Die Klasse Math (brauchen wir davon eine Instanz?) 274
r-—^^^^ä^^^Sj^J ¦ Statische Methoden 275
l^^^^^^^^^^^^^^^K fnsidnzvariablen: Statische Variablen 277
l^^^^^^^^Hj^^^^l ¦ eine F*"° l"5^"1- Konstanten (statische finale Variablen) 282
I^^^^^^^^^H^^^^^BB IaI\aV i/a^.jbloi- Math-Methoden (random(), round(), abs() usw.) 286
l^^^^^^^^^^^^^HM eine pro JsUsse Wrapperklassen (Integer, Boolean, Character usw.) 287
l^^^^^^H^^^^^^^^H Autoboxing 289
I^^^H^^^^bI Zahlen formatieren 294
1 V^^^^^^^^^^^^^^H I Formatierung und Manipulation von Datumsangaben 301
I V^^^^^^^^^^^B ¦ Statische Importe 307
1 V^^^^^^^^Bi^^^9^B Übungen und Rätsel 310
A A Riskantes Verhalten
I I Manches passiert einfach. Die Datei ist nicht da. Der Server
I I läuft nicht. Und wenn Sie ein noch so guter Programmierer sind - Sie können nicht alles
unter Kontrolle haben.Wenn Sie eine riskante Methode schreiben, brauchen Sie Code,der
all das Schlimme, das möglicherweise passiert, behandelt. Aber woher wissen Sie, wann eine
Methode riskant ist? Und wo platzieren Sie den Code, der die Ausna/imesituation 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 316
ifi evne JLcePftb/, . Wenn eine Methode, die Sie aufrufen wollen, riskant ist. 319
jS"^ ^^ ^ *fcif Exceptions sagen: »Es ist etwas Schlimmes passiert.« 320
\^ \ Der Compiler garantiert (er prüft), dass Sie das Risiko kennen 321
"IZ^rr k| ^ "-sriü—•¦¦ ^^ try-and-catck¥rinzvp (Skateboarder) 322
LÜ1„, I V " ' , ' ¦ Flusskontrolle in try/catch-B\öcken 326
i "*""" ¦ ruft riskante H _^ _ ,, _, , , , . . . , „ , . . „o 7
¦ J M th d f ^^^^^^^B Der finally-Block (»egal, was passiert, schalte den Herd aus!«) 327
IFu^Bc^; Klasse Abfangen von Mehrfach-Exceptions 329
mit einer Eine Exception deklarieren (weichen Sie ihr einfach aus!) 335
riskan1-en Das Gesetz »Behandeln oder deklarieren« 337
CodeKüche (Sound erzeugen) 339
Übungen und Rätsel 348
Af\ Innen hui, außen GUI
I Ml Sehen Sie den Tatsachen ins Auge: Um GUIs (grafische
I «^ Benutzeroberflächen) kommen Sie nicht herum, selbst wenn sie
davon ausgehen, dass Sie den Rest Ihres Lebens serverseitigen Code schreiben, müssen Sie
früher oder später Tools entwickeln, und dafür hätten Sie dann ganz sicher gern eine grafische
Schnittstelle. Wir werden zwei Kapitel mit der Programmierung von GUIs zubringen und dabei
cia«s n«ineAufi«reKiass« { grundlegende Features der Sprache Java kennen lernen, z.B. Event-Handling und innere Klas-
|^|jMUdi|ilMMtaVMk'4' sen- 'n diesem Kapitel setzen wir einen Button auf den Bildschirm und lassen ihn reagieren,
illlfi iSilsiiltfe'^ '• " wenn man ihn anklickt. Außerdem zeichnen wir etwas auf den Bildschirm, zeigen ein JPEG-Bild
^jt^äuä-'ftnftl"'-'.1' an uncl versucnen uns sogar an einer kleinen Animation.
) Ihre erste GUI 355
Wie man an ein Benutzerereignis kommt 357
Innere Klasse ist vollständig Ein Listener-Interface implementieren 358
von äußerer Klasse umschlossen. ^^MB^.
rO ^BBBI% ^'e man an ^^ ActionEvent eines Buttons kommt 360
^-* MMmlm fe Dinge in eme GUI setzen 363
^BSKS^^Ur \ Schönes mit paintComponent() 365
P^W^f^iillS« Ifef/ DasGraphics2EK)bjekt 366
tteff? Vtfb«» e"lJ^*pas »«ert ^Hj^^ Zwei oder mehr Widgets in einen Frame seuen 370
to^"*e^ri*lw ^Jtti*0' ^'nü** Innere Klassen kommen uns zu Hilfe 376
beBWttO («4 wyk^ Animation 382
CodeKüche (Grafiken zum Beat der Musik einfügen) 386
x|j Übungen und Rätsel 394
A{S Mehr Schwung mit Swing
¦ p Swing ist einfach. Wenn es Ihnen nicht so wichtig ist, wo die Dinge auf dem Bild-
I ^J schirm landen. Swing-Code sieht einfach aus, aber dann kompilieren Sie das Ganze, führen es
aus, sehen es sich an und denken: »Hey, das sollte aber nicht dort stehen.« Der Grund dafür,
dass der Code so leicht zu schreiben ist, ist der Layoutmanager - aber genau der macht es auch
so schwer kontrollierbar. Mit ein bisschen Mühe bringen Sie Layoutmanager jedoch dazu, sich
Ihrem Willen zu unterwerfen. In diesem Kapitel bringen wir unsere Swing-Künste in Schwung
und lernen etwas überWidgets.
. . r. M n 1 Swing-Komponenten 400
tWonenk« "* ,»®« - i j ^es-ten * Worten j Layoutmanager steuern Größe und Platzierung 401
beko»1""1 l^'re ^e" ^re' Layoutmanager: Border, Flow und Box 403
vovzJ^te v*vn£- BorderLayout (managt fünf Bereiche) 404
'¦ FlowLayout (managt bevorzugte Größe und die Reihenfolge) 408
Komponenten i"» WMt"1 2"Hnim Otttn BoxLayout (ähnelt FlowLayout, kann Komponenten vertikal
Norden und Süden *! ' HOita» • A tli. anordnen) 411
bekommen ihm« ^ »a, «^"ibria M JTextField (für einzeilige Benutzereingaben) 413
' ( J| jf | JTextArea (für mehrzeilige Benutzereingaben, Scrollen) 414
f ¦ "*" - !a JCheckBox (angeklickt?) 416
JList (scrollbare, auswählbare Liste) 417
CodeKüche (Ein Ungetüm - den BeatBox-Chat-Clienten erzeugen) 418
Übungen und Rätsel 424
A A Speicherung von Objekten
ILJU Objekte lassen sich flach drücken und wieder aufblasen.
¦ JL Objekte haben einen Zustand und ein Verhalten. Das Verhalten steckt in der Klasse, aber der
Zustand steckt in jedem einzelnen Objekt. Muss Ihr Programm Zustände speichern, können
Sie das natürlich auf die mühsame Weise tun - Sie befragen jedes Objekt und notieren dann
akribisch den Wert jeder Instanzvariablen. Oder Sie machen es auf die einfache, objektorien¬
tierte Weise - indem Sie lediglich das Objekt selbst gefriertrocknen (serialisieren) und es mit
Wasser anrühren (deserialisieren), wenn Sie es zurückhaben wollen.
Speicherung von Zuständen 431
/ Cr"t £in serialisiertes Objekt in eine Datei schreiben 432
~^^^SB^^ Input- und Outputströme (Anschluss und Verkettung) 433
^^^H^^^K Serialisierte Objekte 434
^ ^^^^ v^^ Das Serializable-Interface implementieren 437
yl-fV'frr fF*' Transiente Variablen verwenden 439
desOriÄVlsiertN Ein Objekt deserialisieren 441
. / In eine Textdatei schreiben 447
|^^C Die Klasse java.io.File 452
^^^^^^H^ Aus einer Textdatei lesen 454
^^^^^^^^ Einen String mit split() in mehrere Tokens spalten 458
^K^^^^S^^' CodeKüche 462
Übungen und Rätsel 466
wiit
yä i-W Eine Verbindung herstellen
I ^\ Nehmen Sie Verbindung mit der Außenwelt auf. Das ist nicht schwer.
| ^^f Um all die Lowlevel-Netzwerk-Details kümmern sich Klassen in der java.net-Bibliothek. Einer der
großen Vorteile von Java ist, dass das Senden und Empfangen über ein Netz einfache Eingabe/ t
Ausgabe ist, lediglich mit einem etwas anderen Verbindungsstrom am Ende der Kette. In diesem
Kapitel machen wir C//e/if-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 funktionsfähigen und Multithread-tauglichen Chat-Client. Haben wir da gerade Multithread
*£?£?* 9esagt?
1%./** ^"^ *"t DaS ChM-pTOS™mm im Überblick 473
' ' \ _^ Verbinden, senden und empfangen 474 .
^"^^B / ^^^^^^^^^B Netzwerk-Sockets 475 \
^t^^K^. ^^^^^^H TCP-Ports 476
H^^^^^^^P T^^^^^^^^^^B Daten von einem Socket lesen (mit BufferedReader) 478
^^^^^HB / ^MM^^P^PBB Daten in einen Socket schreiben (mit PrintWriter) 479
CI'Wlt /«\ U^ SePVBr Das TippDesTagesClient-Programm schreiben 480
•¦ v zu» CV»*"* Einen einfachen Server schreiben 483
^ \^\^ 10°' Der TippDesTagesServer-Code 484
?öA ^ Einen Chat-Client schreiben 486
Mehrere Aufruf-Stacks 490
Einen neuen Thread starten 492
Das Runnable-Interface (Job des Threads) 494
Drei Zustände eines neuen Threads (neu, lauffähig, laufend) 495
Die lauflähig/laufend-Schleife 496
Der Thread-Scheduler (das ist seine Entscheidung, nicht Ihre!) 497
Einen Thread schlafen legen 501
Erzeugen und Starten von zwei Threads 503
Ehe in Gefahr: Ist dieses Paar noch zu retten? 505
Das Rainer-und-Monika-Problem in Codeform 506
Dinge sperren, um sie atomar zu machen 510
Jedes Objekt hat ein Schloss 511
Das gefürchtete »Problem des verlorenen Updates« 512
Synchronisierte Methoden (eine Sperre verwenden) 514
Thread-Deadlock 516
ChatClient mit mehreren Threads 518
Code-Fertiggericht für den EinfacherChatServer 520
Übungen und Rätsel 524
xiv ]
A f Datenstrukturen
I BJ Sortieren ist in Java ein KlackS. Sie haben alle Werkzeuge zur Verfügung, um
¦ ^l^ Daten zu sammeln und damit zu arbeiten, ohne Ihre eigenen Sortieralgorithmen schreiben zu
müssen. Das Collections-Framework von Java enthält eine Datenstruktur für praktisch alles, was
Sie jemals tun müssen. Sie wollen eine Liste, zu der Sie leicht etwas hinzufügen können? Sie wol¬
len etwas mit Hilfe seines Namens suchen? Oder Sie brauchen eine Liste, die automatisch alles
entfernt, was doppelt vorhanden ist? Sie möchten Ihre Kollegen danach sortieren, wie oft sie
Ihnen in den Rücken gefallen sind? Es ist alles da .
4% * 4. ^^ Collections 533
¦"^Vv. wwwjr ^^^* Eine ArrayList mit Collections.sortO sortieren 534
List ^KiUKmi^SUllH Generics und Typsicherheit 540
Sachen sortieren, die das Comparable-Interface implementieren 547
/äftk ^^J^^ jt/^^. ^'' einem eigenen Comparator sortieren 552
* / T^ W9M Die Collection-API (List, Set und Map) 557
Set ^IHiHUHHUHfl^^H Verdopplungen mit HashSet verhindern 559
Überschreiben von hashCode() und equals() 560
^ *^k jg^^ HashMap 567
MK^^ *^hP W^^P Wildcards für Polymorphie verwenden 574
Map PgntBP^ÜffBBSBffBPrWB Übungen und Rätsel 576
ArT Veröffentlichen Sie Ihren Code
¦ I Es ist Zeit lOSZUlaSSen. Sie haben Ihren Code geschrieben.Sie haben ihn getestet.
¦ 0 Sie haben ihn verbessert. Sie haben allen Bekannten erzählt, es wäre schön, wenn Sie nie wieder
eine einzige Zeile Code sehen würden. Und doch haben Sie zu guter Letzt ein Kunstwerk ge-
schaffen.Tatsächlich.das Ding läuft! Aber was nun? In den beiden letzten Kapiteln des Buchs be¬
fassen wir uns mit dem Organisieren, Packen und Deployment des Codes. Wir sehen uns lokale
und entfernte Deployment-Möglichkeiten an, inklusive ausführbarer JARs, RMI und Servlets.
¦BhI| Ganz ruhig - einige der coolsten Dinge, die Java bietet, sind einfacher, als Sie denken.
»HBB i—l. Deployment-Optionen 582
¦ I tSUlH Quellcode und class-Dateien getrennt halten 584
y^\^ Machen Sie das JAR ausführbar 585
|a^mI ¥^\ Das JAR ausführen 586
'¦•¦^ II Stecken Sie Ihre Klassen in Pakete! 587
PakofUebung-Class
Pakete müssen eine passende Verzeichnisstruktur haben 589
Kompilieren und Ausfuhren mit Paketen 590
|HSB^^k I^^^^^^ÜIJ^^^H Kompilieren mit-d 591
HJ -H^K ^m ^^H?*^^^^^^^^B Ein ausführbares JAR mit Paketen erzeugen 592
^ ^H^T^^^^^B Java Web Start (JWS) fürs Deployment aus dem Web 597
m^ ' ^^^^^^^^^^^m So erstellt man eine JWS-Anwendung 600
^^^^W^^^^^^ Übungen und Rätsel 601
XV
/ä ^\ Verteilte Anwendungen
I ä^ Entfernung mUSS kein Problem Sein. Sicheres ist einfacher, wenn alle Teile
I ^^^r Ihrer Anwendung an einem Ort sind,aufeinemHeap, mit einer JVM, die über alles herrscht. Aber
das ist nicht immer möglich. Und auch nicht immer wünschenswert. Was ist, wenn Ihr Programm
leistungsintensive Berechnungen durchführen 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.
¦ mimM KMI zum Mitmachen, seArausführlich 614
Client läjil B Server Ein kurzer Blick auf Servlets 625
^^^*\_—-—- - ^ Ein seArkurzer Blick auf Enterprise Java Beans (EJB) 631
fatWJHK^j|^9fc .\ /^TB^jI^j'.^eOct 1 Den wirklich coolen Universaldienstbrowser erzeugen 636
A Anhang A
Das CodeKÜChen-Finale! Der vollständige Code für unser BeatBox-Client-Pro-
gramm - Ihre Chance, ein Rockstar zu werden!
i-^^^SSälllPii gg 1 Der Client-Code 650
|»"^^^^tt^ÄH Der Server-Code 657
Erliii!iil§ -I
fcs äöSsiooi-gffig !SSSSs
B Anhang B
Die Top Ten der Themen, die es nicht ins Buch geschafft
haben. Noch können 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
I Index 677
xvi |
any_adam_object | 1 |
any_adam_object_boolean | 1 |
author | Sierra, Kathy ca. 20./21. Jahrhundert Bates, Bert ca. 20./21. Jahrhundert |
author_GND | (DE-588)119774696X (DE-588)1197747249 |
author_facet | Sierra, Kathy ca. 20./21. Jahrhundert Bates, Bert ca. 20./21. Jahrhundert |
author_role | aut aut |
author_sort | Sierra, Kathy ca. 20./21. Jahrhundert |
author_variant | k s ks b b bb |
building | Verbundindex |
bvnumber | BV021551156 |
classification_rvk | ST 250 |
ctrlnum | (OCoLC)633166035 (DE-599)BVBBV021551156 |
discipline | Informatik |
discipline_str_mv | Informatik |
edition | 1. Aufl. |
format | Book |
fullrecord | <?xml version="1.0" encoding="UTF-8"?><collection xmlns="http://www.loc.gov/MARC21/slim"><record><leader>02061nam a2200481 c 4500</leader><controlfield tag="001">BV021551156</controlfield><controlfield tag="003">DE-604</controlfield><controlfield tag="005">20191023 </controlfield><controlfield tag="007">t</controlfield><controlfield tag="008">060418s2006 gw ad|| |||| 00||| ger d</controlfield><datafield tag="016" ind1="7" ind2=" "><subfield code="a">978707893</subfield><subfield code="2">DE-101</subfield></datafield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">3897214482</subfield><subfield code="9">3-89721-448-2</subfield></datafield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">9783897214484</subfield><subfield code="9">978-3-89721-448-4</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(OCoLC)633166035</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(DE-599)BVBBV021551156</subfield></datafield><datafield tag="040" ind1=" " ind2=" "><subfield code="a">DE-604</subfield><subfield code="b">ger</subfield><subfield code="e">rakddb</subfield></datafield><datafield tag="041" ind1="0" ind2=" "><subfield code="a">ger</subfield></datafield><datafield tag="044" ind1=" " ind2=" "><subfield code="a">gw</subfield><subfield code="c">XA-DE-NW</subfield></datafield><datafield tag="049" ind1=" " ind2=" "><subfield code="a">DE-20</subfield><subfield code="a">DE-Aug4</subfield><subfield code="a">DE-29T</subfield><subfield code="a">DE-824</subfield><subfield code="a">DE-858</subfield><subfield code="a">DE-573</subfield><subfield code="a">DE-1049</subfield><subfield code="a">DE-523</subfield><subfield code="a">DE-526</subfield><subfield code="a">DE-19</subfield><subfield code="a">DE-11</subfield><subfield code="a">DE-188</subfield></datafield><datafield tag="084" ind1=" " ind2=" "><subfield code="a">ST 250</subfield><subfield code="0">(DE-625)143626:</subfield><subfield code="2">rvk</subfield></datafield><datafield tag="084" ind1=" " ind2=" "><subfield code="a">004</subfield><subfield code="2">sdnb</subfield></datafield><datafield tag="100" ind1="1" ind2=" "><subfield code="a">Sierra, Kathy</subfield><subfield code="d">ca. 20./21. Jahrhundert</subfield><subfield code="e">Verfasser</subfield><subfield code="0">(DE-588)119774696X</subfield><subfield code="4">aut</subfield></datafield><datafield tag="240" ind1="1" ind2="0"><subfield code="a">Head First Java</subfield></datafield><datafield tag="245" ind1="1" ind2="0"><subfield code="a">Java von Kopf bis Fuß</subfield><subfield code="c">Kathy Sierra ; Bert Bates</subfield></datafield><datafield tag="250" ind1=" " ind2=" "><subfield code="a">1. Aufl.</subfield></datafield><datafield tag="264" ind1=" " ind2="1"><subfield code="a">Beijing u.a.</subfield><subfield code="b">O'Reilly</subfield><subfield code="c">2006</subfield></datafield><datafield tag="300" ind1=" " ind2=" "><subfield code="a">XXVIII, 688 S.</subfield><subfield code="b">Ill., graph. Darst.</subfield></datafield><datafield tag="336" ind1=" " ind2=" "><subfield code="b">txt</subfield><subfield code="2">rdacontent</subfield></datafield><datafield tag="337" ind1=" " ind2=" "><subfield code="b">n</subfield><subfield code="2">rdamedia</subfield></datafield><datafield tag="338" ind1=" " ind2=" "><subfield code="b">nc</subfield><subfield code="2">rdacarrier</subfield></datafield><datafield tag="650" ind1="0" ind2="7"><subfield code="a">Objektorientierte Programmierung</subfield><subfield code="0">(DE-588)4233947-9</subfield><subfield code="2">gnd</subfield><subfield code="9">rswk-swf</subfield></datafield><datafield tag="650" ind1="0" ind2="7"><subfield code="a">Java</subfield><subfield code="g">Programmiersprache</subfield><subfield code="0">(DE-588)4401313-9</subfield><subfield code="2">gnd</subfield><subfield code="9">rswk-swf</subfield></datafield><datafield tag="650" ind1="0" ind2="7"><subfield code="a">Java 2 Standard Edition 5.0</subfield><subfield code="0">(DE-588)4799436-8</subfield><subfield code="2">gnd</subfield><subfield code="9">rswk-swf</subfield></datafield><datafield tag="689" ind1="0" ind2="0"><subfield code="a">Java 2 Standard Edition 5.0</subfield><subfield code="0">(DE-588)4799436-8</subfield><subfield code="D">s</subfield></datafield><datafield tag="689" ind1="0" ind2="1"><subfield code="a">Objektorientierte Programmierung</subfield><subfield code="0">(DE-588)4233947-9</subfield><subfield code="D">s</subfield></datafield><datafield tag="689" ind1="0" ind2=" "><subfield code="5">DE-604</subfield></datafield><datafield tag="689" ind1="1" ind2="0"><subfield code="a">Java</subfield><subfield code="g">Programmiersprache</subfield><subfield code="0">(DE-588)4401313-9</subfield><subfield code="D">s</subfield></datafield><datafield tag="689" ind1="1" ind2="1"><subfield code="a">Objektorientierte Programmierung</subfield><subfield code="0">(DE-588)4233947-9</subfield><subfield code="D">s</subfield></datafield><datafield tag="689" ind1="1" ind2=" "><subfield code="8">1\p</subfield><subfield code="5">DE-604</subfield></datafield><datafield tag="700" ind1="1" ind2=" "><subfield code="a">Bates, Bert</subfield><subfield code="d">ca. 20./21. Jahrhundert</subfield><subfield code="e">Verfasser</subfield><subfield code="0">(DE-588)1197747249</subfield><subfield code="4">aut</subfield></datafield><datafield tag="856" ind1="4" ind2="2"><subfield code="m">HBZ Datenaustausch</subfield><subfield code="q">application/pdf</subfield><subfield code="u">http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=014767221&sequence=000002&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA</subfield><subfield code="3">Inhaltsverzeichnis</subfield></datafield><datafield tag="999" ind1=" " ind2=" "><subfield code="a">oai:aleph.bib-bvb.de:BVB01-014767221</subfield></datafield><datafield tag="883" ind1="1" ind2=" "><subfield code="8">1\p</subfield><subfield code="a">cgwrk</subfield><subfield code="d">20201028</subfield><subfield code="q">DE-101</subfield><subfield code="u">https://d-nb.info/provenance/plan#cgwrk</subfield></datafield></record></collection> |
id | DE-604.BV021551156 |
illustrated | Illustrated |
index_date | 2024-07-02T14:31:43Z |
indexdate | 2024-07-09T20:38:25Z |
institution | BVB |
isbn | 3897214482 9783897214484 |
language | German |
oai_aleph_id | oai:aleph.bib-bvb.de:BVB01-014767221 |
oclc_num | 633166035 |
open_access_boolean | |
owner | DE-20 DE-Aug4 DE-29T DE-824 DE-858 DE-573 DE-1049 DE-523 DE-526 DE-19 DE-BY-UBM DE-11 DE-188 |
owner_facet | DE-20 DE-Aug4 DE-29T DE-824 DE-858 DE-573 DE-1049 DE-523 DE-526 DE-19 DE-BY-UBM DE-11 DE-188 |
physical | XXVIII, 688 S. Ill., graph. Darst. |
publishDate | 2006 |
publishDateSearch | 2006 |
publishDateSort | 2006 |
publisher | O'Reilly |
record_format | marc |
spelling | Sierra, Kathy ca. 20./21. Jahrhundert Verfasser (DE-588)119774696X aut Head First Java Java von Kopf bis Fuß Kathy Sierra ; Bert Bates 1. Aufl. Beijing u.a. O'Reilly 2006 XXVIII, 688 S. Ill., graph. Darst. txt rdacontent n rdamedia nc rdacarrier Objektorientierte Programmierung (DE-588)4233947-9 gnd rswk-swf Java Programmiersprache (DE-588)4401313-9 gnd rswk-swf Java 2 Standard Edition 5.0 (DE-588)4799436-8 gnd rswk-swf Java 2 Standard Edition 5.0 (DE-588)4799436-8 s Objektorientierte Programmierung (DE-588)4233947-9 s DE-604 Java Programmiersprache (DE-588)4401313-9 s 1\p DE-604 Bates, Bert ca. 20./21. Jahrhundert Verfasser (DE-588)1197747249 aut HBZ Datenaustausch application/pdf http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=014767221&sequence=000002&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA Inhaltsverzeichnis 1\p cgwrk 20201028 DE-101 https://d-nb.info/provenance/plan#cgwrk |
spellingShingle | Sierra, Kathy ca. 20./21. Jahrhundert Bates, Bert ca. 20./21. Jahrhundert Java von Kopf bis Fuß Objektorientierte Programmierung (DE-588)4233947-9 gnd Java Programmiersprache (DE-588)4401313-9 gnd Java 2 Standard Edition 5.0 (DE-588)4799436-8 gnd |
subject_GND | (DE-588)4233947-9 (DE-588)4401313-9 (DE-588)4799436-8 |
title | Java von Kopf bis Fuß |
title_alt | Head First Java |
title_auth | Java von Kopf bis Fuß |
title_exact_search | Java von Kopf bis Fuß |
title_exact_search_txtP | Java von Kopf bis Fuß |
title_full | Java von Kopf bis Fuß Kathy Sierra ; Bert Bates |
title_fullStr | Java von Kopf bis Fuß Kathy Sierra ; Bert Bates |
title_full_unstemmed | Java von Kopf bis Fuß Kathy Sierra ; Bert Bates |
title_short | Java von Kopf bis Fuß |
title_sort | java von kopf bis fuß |
topic | Objektorientierte Programmierung (DE-588)4233947-9 gnd Java Programmiersprache (DE-588)4401313-9 gnd Java 2 Standard Edition 5.0 (DE-588)4799436-8 gnd |
topic_facet | Objektorientierte Programmierung Java Programmiersprache Java 2 Standard Edition 5.0 |
url | http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=014767221&sequence=000002&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA |
work_keys_str_mv | AT sierrakathy headfirstjava AT batesbert headfirstjava AT sierrakathy javavonkopfbisfuß AT batesbert javavonkopfbisfuß |