Java von Kopf bis Fuß: [behandelt Java 5.0]
Gespeichert in:
Hauptverfasser: | , |
---|---|
Format: | Buch |
Sprache: | German |
Veröffentlicht: |
Beijing [u.a.]
O'Reilly
2007
|
Ausgabe: | 1. Aufl., 2. korr. Nachdr. |
Schlagworte: | |
Online-Zugang: | Inhaltsverzeichnis |
Beschreibung: | XXVIII, 688 S. Ill., graph. Darst. |
ISBN: | 3897214482 9783897214484 |
Internformat
MARC
LEADER | 00000nam a2200000 c 4500 | ||
---|---|---|---|
001 | BV022473200 | ||
003 | DE-604 | ||
005 | 20191023 | ||
007 | t | ||
008 | 070620s2007 ad|| |||| 00||| ger d | ||
020 | |a 3897214482 |9 3-89721-448-2 | ||
020 | |a 9783897214484 |9 978-3-89721-448-4 | ||
035 | |a (OCoLC)180163010 | ||
035 | |a (DE-599)BVBBV022473200 | ||
040 | |a DE-604 |b ger |e rakddb | ||
041 | 0 | |a ger | |
049 | |a DE-92 |a DE-473 |a DE-1046 |a DE-858 |a DE-863 | ||
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ß |b [behandelt Java 5.0] |c Kathy Sierra ; Bert Bates |
250 | |a 1. Aufl., 2. korr. Nachdr. | ||
264 | 1 | |a Beijing [u.a.] |b O'Reilly |c 2007 | |
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 Java |g Programmiersprache |0 (DE-588)4401313-9 |2 gnd |9 rswk-swf |
650 | 0 | 7 | |a Objektorientierte Programmierung |0 (DE-588)4233947-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=015680649&sequence=000001&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA |3 Inhaltsverzeichnis |
999 | |a oai:aleph.bib-bvb.de:BVB01-015680649 | ||
883 | 1 | |8 1\p |a cgwrk |d 20201028 |q DE-101 |u https://d-nb.info/provenance/plan#cgwrk |
Datensatz im Suchindex
DE-BY-863_location | 1000 |
---|---|
DE-BY-FWS_call_number | 1000/ST 250 J35 S572 |
DE-BY-FWS_katkey | 309212 |
DE-BY-FWS_media_number | 083101028903 |
_version_ | 1806176236708298752 |
adam_text | Titel: Java von Kopf bis Fuß
Autor: Sierra, Kathy
Jahr: 2007
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? xviii
Wir wissen, was Ihr Gehirn denkt xix
Metakognition xxi
Machen Sie sich Ihr Hirn Untertan xxiii
Was Sie für dieses Buch brauchen xxiv
Die Fachgutachter xxvi
Danksagungen xxvii
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 fv5?w| Code-Struktur in Java 7
¦11« tgM Anatomie einer Klasse 8
l^|^B^^t Die inain-Methode 9
Method Partyo k r^^l^^B^. Schleifen (i^Tests) 11
unvotepeciai 1/ ^ÜP^1^ -mJ2 Bedingte Verzweigungen 13
#1 Method K~ jffifäm »99 Bierflaschen« programmieren 14
4retUm I . ~~—y^^W Phras-O-Mat 16
^^ ^^^^ .«M Mm ÄL T» Kamingespräche: Der Compiler und die JVM 18
Ausgäbe (f^S) !jjjyF
[find«) llBI^Bl ~~~ Ü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.
I Stuhlkriege (Stefan, der OO-Typ, gegen Harn ,
I große e-me blasse den prozeduralen Programmierer) 28
_ |_ * Vererbung (eine Einführung) 31
IBBBKbeÜenÖ i_l ,^^K Methoden überschreiben (eine Einführung) 32
¦k ^ Jl^ iC^BV Was ist in einer Klasse? (Methoden, Instanzvariablen) 34
Jjj|flL ^^L ^jß^L *• Ein erstes Objekt machen 36
^^B^^^ f^^^Wtt ^^^ main() verwenden 38
K^fBÄf viele öbjek-tc Der Code für das Ratespiel 39
ti— J Übungen und Rätsel 42
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
^^Ji^^^k Elementare Typen (»Einen doppelten Espresso, bitte!«) 51
m iröS ^k Java-Schlüsselwörter 53
Ä J m Referenzvariablen (Femsteuerung für ein Objekt) 54
JSfc^* ^^^fc: Objekte deklarieren und zuweisen 55
f i^ , fY3^ Objekteauf dem Garbage Collectible Heap 57
t?y| Arrays (ein erster Blick) 59
Eyl Ü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«. Ändern wir mal ein paar Zustände.
Java ist Pass-by-Value. ^ÄFX m*^Tzen^J^
i JaKSS ( Große beeinflusst das Bellen) 73
PaS bedeutet PaSS-bV-Copy. f~ jr/^l Methoden-Argumente und Rückgabetypen 74
¦sw ¦ ^¦P^dH3^H Pass-by-Value (Die Variable wird mm«-kopiert) 77
.J%^H j^^H Getter und Setter 79
^^^*^ Kapselung (tun Sie es oder machen Sie sich lächerlich) 80
°P« on x ^ t^HL. Referenzen in Arrays verwenden 83
n ^ r£5$ ~ Übungen und Rätsel 88
foo.losTx); void los(tnt 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
yfr vec t* ^SU** Sch ffe versenken)-
* . u, „ »Dot-Com versenken« entwickeln 96
I 1 1 1 1 1 1 1 EinfachesDotComSpiel (die simple Version) 98
„_ _ Vorcode für EinfachesDotComSpiel schreiben 100
B _S Testcode für EinfachesDotComSpiel schreiben 102
c « EinfachesDotComSpiel schreiben 103
D S. Hwuttew com 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 img Utah i»m /or-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 ArravList (sich die Vorteile der Java API zunutze machen) 132
java.util eine ArrayList gibt. Aber wie
hätte ich das allein rausfinden können ?« en ° om~ ° e rePaneren
Das richtige Spiel bauen (»Dot-Com versenken«) 140
jm± - Julia, 31, Hand-Model fi H
H|^ Vorcode für das richtige Spiel 144
^5T X. Code für das richtige Spiel 146
^HL^^^^ Boolesche Ausdrücke 151
^^^^^^^^^m Die Bibliothek (die Java-API) verwenden 154
^^^^^^^^^^^^^m Packages verwenden (Import-Anweisungen und
^^^^^^H^^^^r vollständige Namen) 155
^H^^ ^^W Die HTML-API-Dokumentation und Referenzbücher 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
^/L ** ***, JL Einen Vererbungsbaum entwerfen (eine Tier-Simulation) 170
n__, ^^^VlM^B^ i Codeverdopplung verhindern (mit Vererbung) 171
^eitbklbtW *•* £%•§ I Methoden überschreiben 170
Braderch* * ^ mmf f IST-EIN und HAT-EIN (die Badewannen-Frau) 177
n kommt ^mmmmm m
c/erTai}Zi,g Zrnltmir. § Was kann man von der Superklasse erben? 180
Einr^alhin,ejn ^ nTier- I Was bringt der ganze Vererbungskram? 182
n cht Jedes r/er ¦ * m Polymorphie (eine Supertyp-Referenz für Unterklassen-Objekt
Jetzt*indSie StaUcf einBifr. f verwenden) 183
Oen, f]Se f g/ce/te;n ^Mache § Regeln fürs Überschreiben (lassen Sie die Finger von den
S-AY^^ran^^msitniJ^ d^ I Argumenten und Rückgabetypen!) 190
1»BM p ^^^se/n. * l**E*t/ijus ^t / Eine Methode überladen (nichts weiter als Methodennamen
*-* ¦ »«w»^^ t wiederverwenden) 191
^^*~ **** «*w»»Wll f Ü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 mcÄHnstantiiert werden BM| 200
Object o = al.get(index) ; ., , „, .... ... .. , . «¦ „,
Abstrakte Klassen (können nicht mstantuert werden) ^^L. 201
Hund h = (Hund) o; ^^B^.
. — Abstrakte Methoden (müssen implementiert werden) ^^^^k 203
h.bewegen() ; V^M
^imm^. Polymorphie in Aktion |V^H ^ ®
^S* ~~~~~~~^~J /l- *v Tk ^ e ^asse Object (die ultimative Superklasse für alles) JQmmKp 208
Jr£j^ P^V Jm Objekte aus einer ArrayList nehmen (sie kommen als Typ Object raus) 211
I (I ^_^--- T^|^^^^ Der Compiler prüft den Referenztyp (bevor er Sie eine Methode
J jT Ütld-Otf^ aufrufen lasst) 213
Object ( Finden Sie Ihr inneres Object 214
§Polymorphe Referenzen 215
3s Objeti vicda- n den Eine Objektreferenz casten (im Vererbungsbaum nach unten
tfonä ^wkvet.wahde/ ,, verschieben) 216
en wii- dahinter wiss,.«. »The Deadly Diamond of Death« (Problem der Mehrfachvererbung) 223
Interfaces verwenden (die beste Lösung) 224
Übungen und Rätsel 230
x
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
Wen» je and *e M^u aS- Methoden auf dem Stack 237
f aJtvvki, wrd *ltse „ £„,„7. Wo die bkalen Variablen leben 238
^HranH«^*^nK/ £ £m£ 3niert Wo die Instanzvzriablen leben 239
JmhBBBHBK jl^H^^H^^HBttKk Das Wunder der Objekterzeugung 240
n8ru? f?^BBB|3iBi^HiHI^^^I^B Konstruktoren (der Code, der ausgeführt wird, wenn Sie na» sagen) 241
II T 1 MaHH^BSSSH^H^H^B^H^H^F ^en Zustand einer neuen Ente initialisieren 243
fiRkV-Unj^^HnT ^B^BhBHH^HI Überladene Konstruktoren 247
yMtKj^^^K^KKB^ä^^^^^^^^Kj^ Superklassenkonstruktoren (Konstruktorverkettung) 250
^ Einen überladenen Konstruktor mit this() aufrufen 256
»e« «tfte*«e» ^-%|-t ^™ Das Leben eines Objekts 258
3ibt damit das *^^j£^ . ^ ^ Garbage Collection (und Objekte auswählbar machen) 260
Übungen und Rätsel 266
*if Zahlen, bitte!
¦ II Rechnen Sie S aUS. In der Java-API gibt es eine Menge praktischer Methoden für
Alle Instanzen Absolutbeträge,zum Runden,zurExtremwertbestimmungetc.Aberwie sieht es mit der
der gleichen Klasse Formatierung aus? Vielleicht möchten Sie, dass Ihre Zahlen mit exakt zwei Nachkommastellen
Exe^niriar J^ ^a 3BS 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.
eisAȣfa:l f. . 1 ,
, , . Kmd-iwtaia iWi Qie Klasse Math (brauchen wir davon eine Instanz?) 274
£«l-l»tare- ei» —-f^-^Fli
-^^^^^I^^HM^Bb Statische Methoden 275
I^^^^^^^^^^^^Bb |ns-lanz.vat-iablen: Statische Variablen 277
^^^^^|^^HB^I^^Hh eine | tro Ins-tdnz. Konstanten (statische finale Variablen) 282
^^Vj|H|^^H|^H^^BB . 1 , ., . 11 . Math-Methoden (randomO, round(),abs() usw.) 286
l^^^^H^^^^^SI ¦ blasse Wrapperklassen (Integer, Boolean, Character usw.) 287
I^EHHB^^^^H^Hb Autoboxing 289
IH^Bfc^^^^^^B ¦ Zahlen formatieren 294
t^^^^Bjj^^^^^^Hgpt B Formatierung und Manipulation von Datumsangaben 301
|y^^^^^^^^^HEpf|* ¦ Statische Importe 307
|V^^^^HHJpPV^^l Übungen und Rätsel 310
xi
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
jp eine Xceptiot, Wenn eine Methode, die Sie aufrufen wollen, riskant ist... 319
* -—®— ^ 55V
y/ ^^ N C4 Exceptions sagen: »Es ist etwas Schlimmes passiert.« 320
ll Der Compiler garantiert (er prüfi),dass Sie das Risiko kennen 321
ä^HTT k .. t/sii»™».« Das try-and-catch¥nnzvp (Skateboarder) 322
Lt^g, ¦ ®| f , • I Flusskontrolle in try/catchSlöcken 326
-^m^^BiJ Methode auf *^^^^^^l Der finally-Block (»egal, was passiert, schalte den Herd aus!«) 327
Ihr^Oae^ Klasse Abfangen von Mehrfach-Exceptions 329
mit einer Eine Exception deklarieren (weichen Sie ihr einfach aus!) 335
riskanten Das q^^^ »Behandeln oder deklarieren« 337
Methode
CodeKüche (Sound erzeugen) 339
Übungen und Rätsel 348
*i( Innen hui, außen GUI
I f Sehen Sie den Tatsachen ins Auge: Um GUIs (grafische
¦ X^ 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
ciass MeineäußereKiasse { grundlegende Features der Sprache Java kennen lernen,z.B. Event-Handling und innere Klas-
cUw *»ii»inn*»ia«»0« ( sen. In diesem Kapitel setzen wir einen Button auf den Bildschirm und lassen ihn reagieren,
»oid ! •( f wenn man ihn anklickt. Außerdem zeichnen wir etwas auf den Bildschirm, zeigen ein JPEG-Bild
j an und versuchen 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. ^ m^ ,.T- , . . „ . „ „™
r~C W ^m man an ^ ActionEvent eines Buttons kommt 360
^-/ I i«t % 1 t Dinge in eine GUI setzen 363
/^~ ^C /^r xfi Schönes mit paintComponentQ 365
pl£seWe,Ob)^^;e (.jP^ DasGraPhics2D-°bJekt 366
#tS? tä6* e*e ^ ^as inneve ^^*S^^ Zwei oder mehr Widgets in einen Frame setzen 370
ftindwnj aT !ty^, des äußevem AieineSÜ^ Innere Klassen kommen uns zu Hilfe 376
EÄÄ-^^- Animation 382
CodeKüche (Grafiken zum Beat der Musik einfügen) 386
Übungen und Rätsel 394
BMehr Schwung mit Swing
Swing ist Ginfach. Wenn es Ihnen nicht so wichtig ist, wo die Dinge auf dem Bild¬
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«»«a 1 Swing-Komponenten 400
A4- d Wts t* ^— Norden ) Layoutmanager steuern Größe und Platzierung 401
Vjeko» *« ^* e ^e | 11 i ^*re Layoutmanager: Border, Flow und Box 403
vorzw^te DrtVte- ff I i BorderLayout (managt fünf Bereiche) 404
i || I [ FlowLayout (managt bevorzugte Größe und die Reihenfolge) 408
Konfonenitn im j Westen j Zentrum j Osten BoxLayout (ähnelt FlowLayout, kann Komponenten vertikal
Norde« umI Süden j KoJ^^ j A 1. anordnen) 411
Ltr^nfi? ^l e ^ ^Mu JTextField (für einzeilige Benutzereingaben) 413
•* ){ j{ j JTextArea (für mehrzellige Benutzereingaben, Scrollen) 414
C, mim M 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
I fcJ* Objekte lassen sich flach drücken und wieder aufblasen.
¦ Jm 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
f * ls|C rt Ein serialisiertes Objekt in eine Datei schreiben 432
^^RB9| Input- und Outputströme (Anschluss und Verkettung) 433
^^BRBPv Serialisierte Objekte 434
„ ^^^f ¦«¦» • Dag Serializable-Interface implementieren 437
. ¦ .v v V y Transiente Variablen verwenden 439
dese*-iallS»eVX Ein Objekt deserialisieren 441
. / In eine Textdatei schreiben 447
ä ä vL-
1^^^^^ Die Klasse java.io.File 452
^^^^HHjft Aus einer Textdatei lesen 454
^^^^Hb Einen String mit splitQ in mehrere Tokens spalten 458
^H^HlOp!» ^ CodeKüche 462
Übungen und Rätsel 466
xiii
yä i*^ Eine Verbindung herstellen
I ^ Nehmen Sie Verbindung mit der Außenwelt auf. Das ist nicht schwer.
| ^^^ 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/
Ausgabe ist, lediglich mit einem etwas anderen Verbindungsstrom am Ende der Kette. In diesem
Kapitel machen wir O/enf-Sockets.Wir machen Se/ver-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
^t-^i,,^ gesagt?
,a, .™* ¦So-ver aM^ Das Chat-Programm im Überblick 473
^^^^^^^^^^^ Verbinden, senden und empfangen 474
a/ ^^^^^^^^^M Netzwerk-Sockets 475
jf. ^^^^^^^B TCP-Ports 476
• 7*^^^^^^^^^^B Daten von einem Socket lesen (mit BufferedReader) 478
i / JBMBBPJ^Mi Daten in einen Socket schreiben (mit PrintWriter) 479
Cl en+ V *•»$ Server Das TippDesTagesClient-Programm schreiben 480
• v ««» 0 Einen einfachen Server schreiben 483
^flbM-^00 DerTippDesTagesServer-Code 484
fort t0^ 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 lauffä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/~ Datenstrukturen
I BJ Sortieren ist in Java ein KlackS. Sie haben alle Werkzeuge zur Verfügung, um
¦ *r 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 ...
i#% % ^ «Ml Collections 533
^V^^ w w*r *=«¦¦» Eine ArrayList mit Collections.sort() sortieren 534
List |V|fl^HHH|^|Bj^H| Generics und Typsicherheit 540
Sachen sortieren, die das Comparable-Interface implementieren 547
M^, % m 41^k Mit einem eigenen Comparator sortieren 552
T^jmsr %^m» Die Collection-API (List, Set und Map) 557
Set ¦¦^HHH||H Verdopplungen mit HashSet verhindern 559
Überschreiben von hashCode() und equals() 560
£». ^ it jtm* HashMap 567
^=^L^^ r^S*1 mjum Wildcards für Polymorphie verwenden 574
Map P^Tfffl^^JffHMBIHiBECTfffl Übungen und Rätsel 576
A^Y Veröffentlichen Sie Ihren Code
M £ Es ist Zeit lOSZUlaSSen. Sie haben Ihren Code geschrieben.Sie haben ihn getestet.
¦ M Sie haben ihn verbessert. Sie haben allen Bekannten erzahlt.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.
¦ Ganz ruhig - einige der coolsten Dinge, die Java bietet, sind einfacher, als Sie denken.
_ Deployment-Optionen 582
MB I ffe ¦ Quellcode und class-Dateien getrennt halten 584
*4 «_L_Z Machen Sie das JAB. ausführbar 585
^ **^ I tiLjuiUJ • * Das JAR ausführen 586
MW*** I I Stecken Sie Ihre Klassen in Pakete! 587
PaketUebung.class
Pakete müssen eine passende Verzeichmsstruktur haben o»9
Kompilieren und Ausführen mit Paketen 590
-iWMHiTifäMfc ^^|_|^_m_ Kompilieren mit -d 591
I i ^WB^ (*5 ^^^^^^^Hi^^H ^m ;ills ühibares JAR mit Paketen erzeugen 592
l mE^I ^~~™* ^BMz^H^^^ft Java Web Start ^ws förs Dcp10)™6111 aus dem Web 597
4fMMflÜH ^^^^^^^^^^^^m ^° erstellt man eine jWS-Anwendung 600
^^^^^i^^^^^^^ Übungen und Rätsel 601
XV
/i ^ Verteilte Anwendungen
I ä^k Entfernung mUSS kein Problem Sein. Sicheres ist einfacher, wenn alle Teile
¦ ^^^F Ihrer Anwendung an einem Ort sind, auf einem Heap, 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.
Q—a— u RMI zum Mitmachen, sehr ausführlich 614
Client jj^JÄ Server Ein kurzer Blick auf Servlets 625
^^^^___-——— Ein «Arkurzer Blick auf Enterprise Java Beans (EJB) 631
/ rmTsto i RM^smETON ^^p^ . Bezauberndes Jini 632
I f* ^ l_ J ( IJ [ II Den wirklich coolen Universaldienstbrowser erzeugen 636
/ VrfJ* ** */ V ^ **25 ) Ende 648
A Anhang A
Das CodeKÜChen-Finale! Der vollständige Code für unser BeatBox-Client-Pro-
gramm - Ihre Chance, ein Rockstar zu werden!
ra—« —-—5=i E: ~- •
E. •-g-*:iä*:8-*:*ä ä 1 Der Client-Code 650
CT - - - - - - -} - ;::::; ^ Der Server-Code 657
ISS- --- - — - z .ZZz - . t«««—«
l*«» ~_r säjimw»» 1
l ~ HZ - Sw«« **1 -
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 |
Titel: Java von Kopf bis Fuß
Autor: Sierra, Kathy
Jahr: 2007
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? xviii
Wir wissen, was Ihr Gehirn denkt xix
Metakognition xxi
Machen Sie sich Ihr Hirn Untertan xxiii
Was Sie für dieses Buch brauchen xxiv
Die Fachgutachter xxvi
Danksagungen xxvii
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 fv5?w| Code-Struktur in Java 7
¦11« tgM Anatomie einer Klasse 8
l^|^B^^t Die inain-Methode 9
Method Partyo k r^^l^^B^. Schleifen (i^Tests) 11
unvotepeciai 1/ ^ÜP^1^ -mJ2 Bedingte Verzweigungen 13
#1 Method K~ jffifäm »99 Bierflaschen« programmieren 14
4retUm I \. ~~—y^^W Phras-O-Mat 16
^^"^^^^ .«M Mm ÄL"T» Kamingespräche: Der Compiler und die JVM 18
Ausgäbe (f^S) !jjjyF
[find«) llBI^Bl ~~~ Ü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.
I Stuhlkriege (Stefan, der OO-Typ, gegen Harn',
I große e-me blasse den prozeduralen Programmierer) 28
_ |_ * Vererbung (eine Einführung) 31
IBBBKbeÜenÖ i_l ,^^K Methoden überschreiben (eine Einführung) 32
¦k ^ Jl^ iC^BV Was ist in einer Klasse? (Methoden, Instanzvariablen) 34
Jjj|flL ^^L ^jß^L *• Ein erstes Objekt machen 36
^^B^^^ f^^^Wtt ^^^ main() verwenden 38
K^fBÄf viele öbjek-tc Der Code für das Ratespiel 39
ti— J Übungen und Rätsel 42
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
^^Ji^^^k Elementare Typen (»Einen doppelten Espresso, bitte!«) 51
m iröS ^k Java-Schlüsselwörter 53
Ä \J m Referenzvariablen (Femsteuerung für ein Objekt) 54
JSfc^*'^^^fc: Objekte deklarieren und zuweisen 55
f i^ , fY3^ Objekteauf dem Garbage Collectible Heap 57
t?y| Arrays (ein erster Blick) 59
Eyl Ü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«. Ändern wir mal ein paar Zustände.
Java ist Pass-by-Value. ^ÄFX m*^Tzen^J^"
' i JaKSS \ ( Große beeinflusst das Bellen) 73
PaS bedeutet PaSS-bV-Copy. f~ jr/^l Methoden-Argumente und Rückgabetypen 74
¦sw ¦ ^¦P^dH3^H Pass-by-Value (Die Variable wird mm«-kopiert) 77
.J%^H j^^H Getter und Setter 79
^^^*^ Kapselung (tun Sie es oder machen Sie sich lächerlich) 80
°P« "on x ^"t^HL. Referenzen in Arrays verwenden 83
n\\ ^ r£5$" ' ~\ Übungen und Rätsel 88
foo.losTx); void los(tnt 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
yfr vec t* ^SU** Sch'ffe versenken)-
* . u,\„ »Dot-Com versenken« entwickeln 96
I 1 1 1 1 1 1 1 EinfachesDotComSpiel (die simple Version) 98
„_ _ Vorcode für EinfachesDotComSpiel schreiben 100
B _S Testcode für EinfachesDotComSpiel schreiben 102
c « EinfachesDotComSpiel schreiben 103
D S. Hwuttew com 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 img Utah i»m /or-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 ArravList (sich die Vorteile der Java API zunutze machen) 132
java.util eine ArrayList gibt. Aber wie
hätte ich das allein rausfinden können ?« en ° om~ '° e rePaneren
Das richtige Spiel bauen (»Dot-Com versenken«) 140
jm± - Julia, 31, Hand-Model fi H
H|^ Vorcode für das richtige Spiel 144
^5T X. Code für das richtige Spiel 146
^HL^^^^ Boolesche Ausdrücke 151
^^^^^^^^^m Die Bibliothek (die Java-API) verwenden 154
"^^^^^^^^^^^^^m Packages verwenden (Import-Anweisungen und
^^^^^^H^^^^r vollständige Namen) 155
^H^^ ^^W Die HTML-API-Dokumentation und Referenzbücher 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
^/L **"***, JL Einen Vererbungsbaum entwerfen (eine Tier-Simulation) 170
n_, ^^^VlM^B^ i Codeverdopplung verhindern (mit Vererbung) 171
"^eitbklbtW *•* £%•§ I Methoden überschreiben 170
Braderch* * "^ mmf f IST-EIN und HAT-EIN (die Badewannen-Frau) 177
n'kommt "^mmmmm m
c/erTai}Zi,g Zrnltmir. § Was kann man von der Superklasse erben? 180
Einr^alhin,ejn ^'nTier- I Was bringt der ganze Vererbungskram? 182
n'cht'Jedes r/er ¦ * m Polymorphie (eine Supertyp-Referenz für Unterklassen-Objekt
Jetzt*indSie 'StaUcf einBifr. f verwenden) 183
Oen,'f]Se'f'g/ce/te;n ""^Mache § Regeln fürs Überschreiben (lassen Sie die Finger von den
'S-AY^^ran^^msitniJ^'d^ I Argumenten und Rückgabetypen!) 190
1»BM p ^^^se/n. *"l**E*t/ijus'^t / Eine Methode überladen (nichts weiter als Methodennamen
""*-* "¦"»«w»^^ t wiederverwenden) 191
^^*~"****"'«*w»»Wll f Ü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 mcÄHnstantiiert werden BM| 200
Object o = al.get(index) ; ., , „, . . . , . «¦ „,
Abstrakte Klassen (können nicht mstantuert werden) ^^L. 201
Hund h = (Hund) o; ^^B^.
. — "" Abstrakte Methoden (müssen implementiert werden) ^^^^k 203
h.bewegen() ; V^M
^imm^. Polymorphie in Aktion |V^H ^"®
^S*' ~~~~~~~^~J\ /l-"*v Tk ^'e '^asse Object (die ultimative Superklasse für alles) JQmmKp 208
Jr£j^ P^V Jm Objekte aus einer ArrayList nehmen (sie kommen als Typ Object raus) 211
I (I ^_^---'"T^|^^^^ Der Compiler prüft den Referenztyp (bevor er Sie eine Methode
\J jT Ütld-Otf^ aufrufen lasst) 213
Object ( Finden Sie Ihr inneres Object 214
§Polymorphe Referenzen 215
3s Objeti vicda- \n den Eine Objektreferenz casten (im Vererbungsbaum nach unten
tfonä ^wkvet.wahde/ ,, verschieben) 216
en wii- dahinter wiss,.«. »The Deadly Diamond of Death« (Problem der Mehrfachvererbung) 223
Interfaces verwenden (die beste Lösung) 224
Übungen und Rätsel 230
x
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
Wen» je"and *e M^u'aS- Methoden auf dem Stack 237
f aJtvvki, wrd *ltse „" £„,„7. Wo die bkalen Variablen leben 238
^HranH«^*^nK/ £ £m£ 3niert Wo die Instanzvzriablen leben 239
JmhBBBHBK jl^H^^H^^HBttKk Das Wunder der Objekterzeugung 240
n8ru?'f?^BBB|3iBi^HiHI^^^I^B Konstruktoren (der Code, der ausgeführt wird, wenn Sie na» sagen) 241
II T 1 MaHH^BSSSH^H^H^B^H^H^F ^en Zustand einer neuen Ente initialisieren 243
fiRkV-Unj^^HnT ^B^BhBHH^HI Überladene Konstruktoren 247
yMtKj^^^K^KKB^ä^^^^^^^^Kj^ Superklassenkonstruktoren (Konstruktorverkettung) 250
^ Einen überladenen Konstruktor mit this() aufrufen 256
»e« «tfte*«e» ^-%|-t ^™ Das Leben eines Objekts 258
3ibt damit das *^^j£^ . ^ ^ Garbage Collection (und Objekte auswählbar machen) 260
Übungen und Rätsel 266
*if\ Zahlen, bitte!
¦ II Rechnen Sie'S aUS. In der Java-API gibt es eine Menge praktischer Methoden für
Alle Instanzen Absolutbeträge,zum Runden,zurExtremwertbestimmungetc.Aberwie sieht es mit der
der gleichen Klasse Formatierung aus? Vielleicht möchten Sie, dass Ihre Zahlen mit exakt zwei Nachkommastellen
Exe^niriar J^"^a"3BS 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.
eisAȣfa:l f. . 1 ,
, , . \ Kmd-iwtaia iWi Qie Klasse Math (brauchen wir davon eine Instanz?) 274
£«l-l»tare- ei» \ —-f^-^Fli
-^^^^^I^^HM^Bb Statische Methoden 275
I^^^^^^^^^^^^Bb |ns-lanz.vat-iablen: Statische Variablen 277
\^^^^^|^^HB^I^^Hh eine | tro Ins-tdnz. Konstanten (statische finale Variablen) 282
\^^Vj|H|^^H|^H^^BB . 1 , ., . 11 . Math-Methoden (randomO, round(),abs() usw.) 286
l^^^^H^^^^^SI ¦ blasse Wrapperklassen (Integer, Boolean, Character usw.) 287
I^EHHB^^^^H^Hb Autoboxing 289
IH^Bfc^^^^^^B ¦ Zahlen formatieren 294
t^^^^Bjj^^^^^^Hgpt B Formatierung und Manipulation von Datumsangaben 301
|y^^^^^^^^^HEpf|*' ¦ Statische Importe 307
|V^^^^HHJpPV^^l Übungen und Rätsel 310
xi
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
jp eine Xceptiot, Wenn eine Methode, die Sie aufrufen wollen, riskant ist. 319
"* -—®—"^ 55V
y/' ^^ N C4 Exceptions sagen: »Es ist etwas Schlimmes passiert.« 320
ll \ Der Compiler garantiert (er prüfi),dass Sie das Risiko kennen 321
"ä^HTT k . ""t/sii»™».« Das try-and-catch¥nnzvp (Skateboarder) 322
Lt^g, ¦ ®| f , •' I Flusskontrolle in try/catchSlöcken 326
-^m^^BiJ Methode auf *^^^^^^l Der finally-Block (»egal, was passiert, schalte den Herd aus!«) 327
Ihr^Oae^ Klasse Abfangen von Mehrfach-Exceptions 329
mit einer Eine Exception deklarieren (weichen Sie ihr einfach aus!) 335
riskanten Das q^^^ »Behandeln oder deklarieren« 337
Methode
CodeKüche (Sound erzeugen) 339
Übungen und Rätsel 348
*i(\ Innen hui, außen GUI
I f\ Sehen Sie den Tatsachen ins Auge: Um GUIs (grafische
¦ X^ 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
ciass MeineäußereKiasse { grundlegende Features der Sprache Java kennen lernen,z.B. Event-Handling und innere Klas-
cUw *»ii»inn*»ia«»0« ( sen. In diesem Kapitel setzen wir einen Button auf den Bildschirm und lassen ihn reagieren,
»oid ! •( f wenn man ihn anklickt. Außerdem zeichnen wir etwas auf den Bildschirm, zeigen ein JPEG-Bild
j an und versuchen 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. ^""m^ ,.T- , . . „ . „ „™
r~C\ W ^m man an ^ ActionEvent eines Buttons kommt 360
^-/ I i«t % 1 "t Dinge in eine GUI setzen 363
/^~"^C /^r'xfi' Schönes mit paintComponentQ 365
pl£seWe,Ob)^^;e (.jP^ DasGraPhics2D-°bJekt 366
#tS? tä6* e*e ^"^as inneve ^^*S^^ Zwei oder mehr Widgets in einen Frame setzen 370
ftindwnj aT"!ty^, des äußevem AieineSÜ^ Innere Klassen kommen uns zu Hilfe 376
EÄÄ-^^- Animation 382
CodeKüche (Grafiken zum Beat der Musik einfügen) 386
Übungen und Rätsel 394
BMehr Schwung mit Swing
Swing ist Ginfach. Wenn es Ihnen nicht so wichtig ist, wo die Dinge auf dem Bild¬
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«»«a 1 Swing-Komponenten 400
A4- d Wts't*" ^— Norden ) Layoutmanager steuern Größe und Platzierung 401
Vjeko»"*« ^*"e ^e" | ' 11 i ^*re' Layoutmanager: Border, Flow und Box 403
vorzw^te DrtVte- ff I i BorderLayout (managt fünf Bereiche) 404
i || I [ FlowLayout (managt bevorzugte Größe und die Reihenfolge) 408
Konfonenitn im j Westen j Zentrum j Osten BoxLayout (ähnelt FlowLayout, kann Komponenten vertikal
Norde« umI Süden j KoJ^^ j A 1. anordnen) 411
Ltr^nfi? ^l e " "^'^Mu JTextField (für einzeilige Benutzereingaben) 413
•* ' \ ){ j{ j JTextArea (für mehrzellige Benutzereingaben, Scrollen) 414
C, mim M 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
I fcJ* Objekte lassen sich flach drücken und wieder aufblasen.
¦ Jm 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
f *"ls|C\rt Ein serialisiertes Objekt in eine Datei schreiben 432
^^RB9| Input- und Outputströme (Anschluss und Verkettung) 433
^^BRBPv Serialisierte Objekte 434
„ ^^^f ¦«¦» • Dag Serializable-Interface implementieren 437
. ¦ .v 'v'V y ' Transiente Variablen verwenden 439
dese*-iallS»eVX"\ Ein Objekt deserialisieren 441
. / In eine Textdatei schreiben 447
ä ä vL-
1^^^^^ Die Klasse java.io.File 452
^^^^HHjft Aus einer Textdatei lesen 454
^^^^Hb Einen String mit splitQ in mehrere Tokens spalten 458
^H^HlOp!»'^ CodeKüche 462
Übungen und Rätsel 466
xiii
yä i*^ Eine Verbindung herstellen
I " ^ Nehmen Sie Verbindung mit der Außenwelt auf. Das ist nicht schwer.
| ^^^ 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/
Ausgabe ist, lediglich mit einem etwas anderen Verbindungsstrom am Ende der Kette. In diesem
Kapitel machen wir O/enf-Sockets.Wir machen Se/ver-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
^t-^i,,^ gesagt?
,a, .™* ¦So-ver aM^ Das Chat-Programm im Überblick 473
' \ ^^^^^^^^^^^ Verbinden, senden und empfangen 474
a/ ^^^^^^^^^M Netzwerk-Sockets 475
jf. ^^^^^^^B TCP-Ports 476
• 7*^^^^^^^^^^B Daten von einem Socket lesen (mit BufferedReader) 478
i / JBMBBPJ^Mi Daten in einen Socket schreiben (mit PrintWriter) 479
Cl'en+ V *•»$ Server Das TippDesTagesClient-Programm schreiben 480
• v ««» 0 Einen einfachen Server schreiben 483
^flbM-^00' DerTippDesTagesServer-Code 484
fort t0^' 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 lauffä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/~ Datenstrukturen
I BJ Sortieren ist in Java ein KlackS. Sie haben alle Werkzeuge zur Verfügung, um
¦ \*r 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 .
i#% % ^ «Ml Collections 533
^V^^ w w*r *=«¦¦» Eine ArrayList mit Collections.sort() sortieren 534
List |V|fl^HHH|^|Bj^H| Generics und Typsicherheit 540
Sachen sortieren, die das Comparable-Interface implementieren 547
M^, % m 41^k Mit einem eigenen Comparator sortieren 552
\ T^jmsr %^m» Die Collection-API (List, Set und Map) 557
Set ¦¦^HHH||H Verdopplungen mit HashSet verhindern 559
Überschreiben von hashCode() und equals() 560
£». ^ it jtm* HashMap 567
^=^L^^ r^S*1 mjum Wildcards für Polymorphie verwenden 574
Map P^Tfffl^^JffHMBIHiBECTfffl Übungen und Rätsel 576
A^Y Veröffentlichen Sie Ihren Code
M £ Es ist Zeit lOSZUlaSSen. Sie haben Ihren Code geschrieben.Sie haben ihn getestet.
¦ M Sie haben ihn verbessert. Sie haben allen Bekannten erzahlt.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.
¦ Ganz ruhig - einige der coolsten Dinge, die Java bietet, sind einfacher, als Sie denken.
_ Deployment-Optionen 582
MB I ffe ¦ Quellcode und class-Dateien getrennt halten 584
*4 «_L_Z Machen Sie das JAB. ausführbar 585
^"**^ I tiLjuiUJ "'"'• * Das JAR ausführen 586
MW*** I '" I Stecken Sie Ihre Klassen in Pakete! 587
PaketUebung.class
Pakete müssen eine passende Verzeichmsstruktur haben o»9
Kompilieren und Ausführen mit Paketen 590
\ -iWMHiTifäMfc ^^|_|^_m_ Kompilieren mit -d 591
I i ^WB^ (*5 ^^^^^^^Hi^^H ^m ;ills'ühibares JAR mit Paketen erzeugen 592
l mE^I ^~~™* ^BMz^H^^^ft Java Web Start ^ws'förs Dcp10)™6111 aus dem Web 597
4fMMflÜH ^^^^^^^^^^^^m ^° erstellt man eine jWS-Anwendung 600
^^^^^i^^^^^^^ Übungen und Rätsel 601
XV
/i ^\ Verteilte Anwendungen
I ä^k Entfernung mUSS kein Problem Sein. Sicheres ist einfacher, wenn alle Teile
¦ ^^^F Ihrer Anwendung an einem Ort sind, auf einem Heap, 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.
Q—a— u RMI zum Mitmachen, sehr ausführlich 614
Client jj^JÄ Server Ein kurzer Blick auf Servlets 625
^^^^_-——— Ein «Arkurzer Blick auf Enterprise Java Beans (EJB) 631
/ rmTsto i RM^smETON ^^p^ . Bezauberndes Jini 632
I f*"^\ l_ J \ ( IJ [ II Den wirklich coolen Universaldienstbrowser erzeugen 636
/ VrfJ* **" */ V"^ **25 ) Ende 648
A Anhang A
Das CodeKÜChen-Finale! Der vollständige Code für unser BeatBox-Client-Pro-
gramm - Ihre Chance, ein Rockstar zu werden!
ra—«" '—-—5=i"E: ~- '"•"' \
E. •-g-*:iä*:8-*:*ä 'ä\ 1 Der Client-Code 650
CT '-'-'-'-'-'-'-}'-';::::; '^ \ Der Server-Code 657
ISS- '---'-'—'-'z'.ZZz'-'.' t«««—« \
l*«» ~_r säjimw»» 1
l ~" ""HZ -" Sw««"**1"-
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 | BV022473200 |
classification_rvk | ST 250 |
ctrlnum | (OCoLC)180163010 (DE-599)BVBBV022473200 |
discipline | Informatik |
discipline_str_mv | Informatik |
edition | 1. Aufl., 2. korr. Nachdr. |
format | Book |
fullrecord | <?xml version="1.0" encoding="UTF-8"?><collection xmlns="http://www.loc.gov/MARC21/slim"><record><leader>01985nam a2200457 c 4500</leader><controlfield tag="001">BV022473200</controlfield><controlfield tag="003">DE-604</controlfield><controlfield tag="005">20191023 </controlfield><controlfield tag="007">t</controlfield><controlfield tag="008">070620s2007 ad|| |||| 00||| ger d</controlfield><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)180163010</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(DE-599)BVBBV022473200</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="049" ind1=" " ind2=" "><subfield code="a">DE-92</subfield><subfield code="a">DE-473</subfield><subfield code="a">DE-1046</subfield><subfield code="a">DE-858</subfield><subfield code="a">DE-863</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="b">[behandelt Java 5.0]</subfield><subfield code="c">Kathy Sierra ; Bert Bates</subfield></datafield><datafield tag="250" ind1=" " ind2=" "><subfield code="a">1. Aufl., 2. korr. Nachdr.</subfield></datafield><datafield tag="264" ind1=" " ind2="1"><subfield code="a">Beijing [u.a.]</subfield><subfield code="b">O'Reilly</subfield><subfield code="c">2007</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">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">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 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=015680649&sequence=000001&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-015680649</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.BV022473200 |
illustrated | Illustrated |
index_date | 2024-07-02T17:45:26Z |
indexdate | 2024-08-01T11:18:07Z |
institution | BVB |
isbn | 3897214482 9783897214484 |
language | German |
oai_aleph_id | oai:aleph.bib-bvb.de:BVB01-015680649 |
oclc_num | 180163010 |
open_access_boolean | |
owner | DE-92 DE-473 DE-BY-UBG DE-1046 DE-858 DE-863 DE-BY-FWS |
owner_facet | DE-92 DE-473 DE-BY-UBG DE-1046 DE-858 DE-863 DE-BY-FWS |
physical | XXVIII, 688 S. Ill., graph. Darst. |
publishDate | 2007 |
publishDateSearch | 2007 |
publishDateSort | 2007 |
publisher | O'Reilly |
record_format | marc |
spellingShingle | Sierra, Kathy ca. 20./21. Jahrhundert Bates, Bert ca. 20./21. Jahrhundert Java von Kopf bis Fuß [behandelt Java 5.0] Java Programmiersprache (DE-588)4401313-9 gnd Objektorientierte Programmierung (DE-588)4233947-9 gnd Java 2 Standard Edition 5.0 (DE-588)4799436-8 gnd |
subject_GND | (DE-588)4401313-9 (DE-588)4233947-9 (DE-588)4799436-8 |
title | Java von Kopf bis Fuß [behandelt Java 5.0] |
title_alt | Head First Java |
title_auth | Java von Kopf bis Fuß [behandelt Java 5.0] |
title_exact_search | Java von Kopf bis Fuß [behandelt Java 5.0] |
title_exact_search_txtP | Java von Kopf bis Fuß [behandelt Java 5.0] |
title_full | Java von Kopf bis Fuß [behandelt Java 5.0] Kathy Sierra ; Bert Bates |
title_fullStr | Java von Kopf bis Fuß [behandelt Java 5.0] Kathy Sierra ; Bert Bates |
title_full_unstemmed | Java von Kopf bis Fuß [behandelt Java 5.0] Kathy Sierra ; Bert Bates |
title_short | Java von Kopf bis Fuß |
title_sort | java von kopf bis fuß behandelt java 5 0 |
title_sub | [behandelt Java 5.0] |
topic | Java Programmiersprache (DE-588)4401313-9 gnd Objektorientierte Programmierung (DE-588)4233947-9 gnd Java 2 Standard Edition 5.0 (DE-588)4799436-8 gnd |
topic_facet | Java Programmiersprache Objektorientierte Programmierung Java 2 Standard Edition 5.0 |
url | http://bvbr.bib-bvb.de:8991/F?func=service&doc_library=BVB01&local_base=BVB01&doc_number=015680649&sequence=000001&line_number=0001&func_code=DB_RECORDS&service_type=MEDIA |
work_keys_str_mv | AT sierrakathy headfirstjava AT batesbert headfirstjava AT sierrakathy javavonkopfbisfußbehandeltjava50 AT batesbert javavonkopfbisfußbehandeltjava50 |
Inhaltsverzeichnis
THWS Würzburg Zentralbibliothek Lesesaal
Signatur: |
1000 ST 250 J35 S572 |
---|---|
Exemplar 1 | ausleihbar Verfügbar Bestellen |