1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
|
<html>
<head>
<title>
Handbuch der Java-Programmierung, 5. Auflage
</title>
</head>
<body>
<a name="startofbody"></a>
<script language="JavaScript" src="hjp4lib.js">
</script>
<script language="JavaScript">
installKbdHandler("97,#startofbody;101,#endofbody;116,cover.html;122,k100003.html;115,search.html;105,index.html;100,JDKDOCS;112,APIDOCS;104,k100083.html;106,k100083.html;107,k100085.html;108,k100090.html");
</script>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100083.html"> << </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100083.html"> < </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100085.html"> > </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100090.html"> >> </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
<td align="right">Kapitel 13 - Strukturierung von Java-Programmen
</table>
<hr>
<!-- Section -->
<a name="sectlevel2id013001"></a>
<h2>13.1 Programmelemente </h2>
<hr>
<ul>
<li><a href="k100084.html#sectlevel2id013001">13.1 Programmelemente</a>
<ul>
<li><a href="k100084.html#sectlevel3id013001001">13.1.1 Anweisungen</a>
<li><a href="k100084.html#sectlevel3id013001002">13.1.2 Blöcke</a>
<li><a href="k100084.html#sectlevel3id013001003">13.1.3 Methoden</a>
<li><a href="k100084.html#sectlevel3id013001004">13.1.4 Klassen</a>
<li><a href="k100084.html#subsectionpakete">13.1.5 Pakete</a>
<li><a href="k100084.html#sectlevel3id013001006">13.1.6 Applikationen</a>
<li><a href="k100084.html#sectlevel3id013001007">13.1.7 Applets</a>
</ul>
</ul>
<hr>
<p>
Wie in jeder Programmiersprache kann man auch in Java Strukturen erkennen,
die auf den unterschiedlichen Abstraktionsebenen die Bestandteile
eines Programms bilden. Die Kenntnis und Bezeichnung dieser Strukturen
ist hilfreich für das Verständnis der entwickelten Programme
und für die Kommunikation mit anderen Programmierern.
<p>
Wir wollen uns dazu in diesem Kapitel die folgenden Programmelemente
ansehen:
<ul>
<li>Anweisungen
<li>Blöcke
<li>Methoden
<li>Klassen
<li>Pakete
<li>Applikationen
<li>Applets
</ul>
<!-- Section -->
<a name="sectlevel3id013001001"></a>
<h3>13.1.1 <a name="ixa100744">Anweisungen</a></h3>
<p>
Anweisungen gehören zu den elementarsten ausführbaren Programmelementen
in Java. Eine Anweisung kann eine Deklaration enthalten, einen Ausdruck
auswerten oder den Programmablauf steuern. Wir wollen Anweisungen
an dieser Stelle als die kleinsten Bausteine von Java betrachten,
und alle anderen Elemente sollen darauf aufbauen.
<!-- Section -->
<a name="sectlevel3id013001002"></a>
<h3>13.1.2 Blöcke<a name="ixa100745"></a> </h3>
<p>
Ein Block ist eine Kollektion von Anweisungen, die nacheinander ausgeführt
werden. Anders als eine einfache Anweisung kann ein Block eigene Variablen
definieren, die nur innerhalb des Blocks sichtbar sind. Sie werden
angelegt, wenn der Block aufgerufen wird, und zerstört, wenn
er wieder verlassen wird.
<p>
Interessant ist ein Block vor allem deshalb, weil er selbst eine <i>Anweisung</i>
ist. Während er in seiner Zusammensetzung aus vielen verschiedenen
Anweisungen bestehen kann, stellt sich ein Block nach außen
hin als eine einzige Anweisung dar. Die ganze Semantik einer blockstrukturierten
Sprache ist darauf ausgelegt, dass ein Block für die Anweisungen,
die ihn verwenden, wie eine homogene Einzelanweisung aussieht.
<p>
Rekursive Konstruktionsschemata, wie das hier beschriebene, treten
an vielen verschiedenen Stellen und in vielen verschiedenen Erscheinungsformen
bei der Programmentwicklung auf. Es gibt Methoden, die sich selbst
aufrufen, Strukturvariablen, die andere Variablen enthalten, oder
eben Blöcke, die Anweisungen <i>enthalten</i> und Anweisungen
<i>sind</i>. Grundlage von rekursiven <i>Part-of</i>-Beziehungen ist
immer der Umstand, dass die Kollektion selbst vom Typ der darin enthaltenen
Elemente ist.
<p>
Die Sichtbarkeit und Lebensdauer von Blöcken <a name="ixa100746"></a>
in Java entspricht den üblichen Regeln, die auch in anderen Programmiersprachen
gültig sind. Lokale Variablen werden angelegt, wenn die Ausführung
des Blocks beginnt, und wieder zerstört, wenn der Block verlassen
wird. Innerhalb eines Blocks sind die lokalen Variablen des Blocks
und die lokalen Variablen der umgebenden Blöcke bzw. der umgebenden
Methode sichtbar. Zusätzlich sind die Variablen der Klasse sichtbar,
in der die den Block umschließende Methode enthalten ist.
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=1></td>
<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>
<p>
Lokale Variablen verdecken gleichnamige Instanz- oder Klassenvariablen<a name="ixa100747"></a>.
Durch Voranstellen des <a name="ixa100748"><a href="index_t.html#ixb100273"><font color=#000080><tt>this</tt></font></a></a>-Zeigers
kann trotzdem auf sie zugegriffen werden. Dies wird in Java oft ausgenutzt,
um im Konstruktor einer Methode Membervariablen zu initialisieren,
die denselben Namen wie formale Parameter haben:
<a name="listingid013001"></a>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
<tr>
<td valign=top>
<font color="#000055">
<pre>
<font color="#555555">001 </font><font color="#0000AA">class</font> Point
<font color="#555555">002 </font>{
<font color="#555555">003 </font> <font color="#0000AA">private</font> <font color="#006699">int</font> x, y;
<font color="#555555">004 </font> <font color="#0000AA">public</font> Point(<font color="#006699">int</font> x, <font color="#006699">int</font> y)
<font color="#555555">005 </font> {
<font color="#555555">006 </font> <font color="#006699">this</font>.x = x;
<font color="#555555">007 </font> <font color="#006699">this</font>.y = y;
<font color="#555555">008 </font> }
<font color="#555555">009 </font>}</pre>
</font>
</td>
</tr>
</table>
<i>
Listing 13.1: Zugriff auf verdeckte Membervariablen</i></p>
</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#0099CC">
<tr>
<td><font color="#FFFFFF"> Tipp </font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
</tr>
</table>
<p>
Diese Vorgehensweise hat den Vorteil, dass man sich für die formalen
Parameter nicht extra Namen ausdenken muss, nur damit sie sich von
den zugehörigen Membervariablen unterscheiden.
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=1></td>
<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>
<p>
Sie hat aber auch den Nachteil, dass Membervariablen <i>versehentlich</i>
durch lokale Variablen verdeckt werden können. Das folgende Beispiel
zeigt einen typischen Fehler dieser Art:
<a name="verdeckmember"></a>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
<tr>
<td valign=top>
<font color="#000055">
<pre>
<font color="#555555">001 </font><font color="#00AA00">/* Listing1302.java */</font>
<font color="#555555">002 </font>
<font color="#555555">003 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> Listing1302
<font color="#555555">004 </font>{
<font color="#555555">005 </font> <font color="#0000AA">private</font> <font color="#006699">int</font> cnt = 0;
<font color="#555555">006 </font>
<font color="#555555">007 </font> <font color="#0000AA">public</font> <font color="#006699">void</font> printNext()
<font color="#555555">008 </font> {
<font color="#555555">009 </font> <font color="#006699">int</font> value = cnt;
<font color="#555555">010 </font> System.out.println(<font color="#0000FF">"value = "</font> + value);
<font color="#555555">011 </font> <font color="#006699">int</font> cnt = value + 1; <a name="verdeckmember.a"></a>
<font color="#555555">012 </font> }
<font color="#555555">013 </font>
<font color="#555555">014 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> main(String[] args)
<font color="#555555">015 </font> {
<font color="#555555">016 </font> Listing1302 obj = <font color="#0000AA">new</font> Listing1302();
<font color="#555555">017 </font> obj.printNext();
<font color="#555555">018 </font> obj.printNext();
<font color="#555555">019 </font> obj.printNext();
<font color="#555555">020 </font> }
<font color="#555555">021 </font>}</pre>
</font>
</td>
<td valign=top align=right>
<a href="../examples/Listing1302.java"><font color="#000055" size=-1>Listing1302.java</font></a></td>
</tr>
</table>
<i>
Listing 13.2: Versehentliches Verdecken einer Membervariable</i></p>
<p>
Auf den ersten Blick würde man erwarten, dass nacheinander die
Werte 0, 1 und 2 ausgegeben werden. Dem ist aber nicht so, denn in
<a href="k100084.html#verdeckmember.a">Zeile 011</a> wird der um eins
erhöhte Wert nicht der Membervariablen <font color="#000077"><tt>cnt</tt></font>
zugewiesen, sondern der lokalen Variablen gleichen Namens. Dieser
Fehler ist recht tückisch und kann bei unübersichtlichem
Programmcode leicht entstehen. Die hier vorgestellte Variante passiert
vor allem dann leicht, wenn eine ehemals lokale Variable zu einer
Membervariable umfunktioniert wurde und der Programmierer nicht daran
gedacht hat, den Typnamen zu entfernen.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#CC0000">
<tr>
<td><font color="#FFFFFF"> Warnung </font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
</tr>
</table>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>
<p>
Im Gegensatz zu den meisten anderen Programmiersprachen gibt es in
Java die Regel, dass <i>lokale</i> Variablen sich nicht gegenseitig
verdecken dürfen. Es ist also nicht erlaubt, innerhalb eines
Blocks eine lokale Variable zu deklarieren, die unter demselben Namen
bereits als lokale Variable sichtbar ist. Weitere Details zu Blöcken
sind in <a href="k100040.html#kapitelanweisungen">Kapitel 6</a> zu
finden.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
<tr>
<td><font color="#FFFFFF"> Hinweis </font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
</tr>
</table>
<!-- Section -->
<a name="sectlevel3id013001003"></a>
<h3>13.1.3 <a name="ixa100749">Methoden</a></h3>
<p>
Methoden sind wie Blöcke Kollektionen, die Deklarationen und
Anweisungen enthalten können. Genaugenommen enthalten sie neben
dem Funktionskopf genau <i>einen</i> Block, der alle anderen Elemente
enthält. Sie unterscheiden sich von Blöcken folgendermaßen:
<ul>
<li>Sie haben einen Namen und können von verschiedenen Stellen
des Programms aus aufgerufen werden
<li>Sie sind parametrisierbar, und ihr Verhalten ist so zur Laufzeit
strukturiert veränderbar
<li>Sie können einen Rückgabewert haben, mit dem ein Wert
an den Aufrufer zurückgegeben werden kann
</ul>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>
<p>
Methoden werden in Java immer <i>lokal zu einer Klasse</i> definiert.
Klassenlose Funktionen, wie sie beispielsweise in C++ zur Verfügung
stehen, gibt es in Java nicht. In diesem Sinne ist Java eine wirklich
objektorientierte Programmiersprache, denn die Methoden operieren
immer auf den Daten eines bestimmten Objekts, zu dem sie aufgerufen
werden.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
<tr>
<td><font color="#FFFFFF"> Hinweis </font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
</tr>
</table>
<p>
Allerdings gibt es noch die <a name="ixa100750"><i>Klassenmethoden</i></a>.
Sie werden zwar auch innerhalb einer Klasse definiert, benötigen
aber später kein Objekt zur Ausführung. Statt dessen entsprechen
Klassenmethoden eher den globalen Funktionen anderer Programmiersprachen
und haben somit keinen Zugriff auf die Membervariablen eines Objekts.
Im Unterschied zu gewöhnlichen Funktionen werden Klassenmethoden
aber innerhalb einer Klasse definiert und besitzen damit einen eigenen
Namensraum, der sich über die Methoden der aktuellen Klasse erstreckt.
Der Zugriff auf eine Klassenmethode erfordert immer die Verwendung
eines qualifizierten Namens, der sich aus dem Klassennamen, einem
Punkt und dem eigentlichen Methodennamen zusammensetzt.
<!-- Section -->
<a name="sectlevel3id013001004"></a>
<h3>13.1.4 <a name="ixa100751">Klassen</a></h3>
<p>
Klassen sind das wichtigste Strukturierungsmittel objektorientierter
Sprachen. Eine Klasse enthält eine Menge von Variablen, die den
<i>Zustand</i> von Objekten dieser Klasse beschreiben, und eine Menge
von Methoden, die das <i>Verhalten</i> der Objekte festlegen.
<p>
Klassen sind insofern schachtelbar, als ihre Instanzvariablen vom
Typ einer Klasse sein können. Dabei ist es insbesondere erlaubt,
dass die Membervariablen von demselben Typ wie die zu definierende
Klasse sind. Da in Java alle Objekte als Referenzen abgelegt werden,
können auf diese Weise rekursive Datentypen erzeugt und zur Konstruktion
von <a name="ixa100752">dynamischen Datenstrukturen</a> verwendet
werden.
<!-- Section -->
<a name="subsectionpakete"></a>
<h3>13.1.5 <a name="ixa100753">Pakete</a></h3>
<p>
In großen Programmsystemen reichen Klassen als Strukturelemente
alleine nicht aus. Deshalb bietet Java mit den <i>Packages</i> (oder
Paketen) oberhalb der Ebene der Klassen eine weitere Kollektion für
Programmelemente an.
<p>
Ein Paket ist eine Sammlung von Klassen, die einen gemeinsamen Zweck
verfolgen oder aus anderen Gründen zusammengefasst werden sollen.
Jede Klasse in Java ist Bestandteil genau eines Pakets. Paketnamen
können aus mehreren Teilen bestehen und beliebig tiefe Hierarchien
ausdrücken.
<p>
Der Name einer Methode oder einer Variablen besteht damit grundsätzlich
aus drei Elementen:
<ul>
<li>Paketname
<li>Klassen- oder Objektname
<li>Methoden- bzw. Variablenname
</ul>
<p>
Ein Beispiel für einen Methodennamen ist <font color="#000077"><tt>java.lang.Math.sqrt</tt></font>.
Wir werden später Mechanismen kennenlernen, mit denen es möglich
ist, die Namen bei ihrer Verwendung abzukürzen.
<!-- Section -->
<a name="sectlevel3id013001006"></a>
<h3>13.1.6 <a name="ixa100754">Applikationen</a></h3>
<p>
Applikationen bilden eigenständige Programme in Java. Sie benötigen
keinen Browser zur Ausführung, sondern nur den Java-Interpreter
und die <font color="#660099">.class</font>-Files der verwendeten
Klassen.
<p>
Technisch betrachtet ist eine Applikation nicht mehr als eine einzelne
Klasse, in der eine Methode vom Typ <font color="#000077"><tt>public
static void main</tt></font><a name="ixa100755"></a> definiert wurde.
Jede Klasse, die eine solche Methode enthält, kann als Applikation
verwendet werden.
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=1></td>
<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>
<p>
Durch einfaches Hinzufügen einer Methode <font color="#000077"><tt>public
static void main</tt></font> kann also jede beliebige Klasse sehr
leicht in eine Applikation verwandelt und vom Java-Interpreter aufgerufen
werden. Dies kann beispielsweise nützlich sein, um in Low-Level-Klassen,
die eigentlich nur als Dienstleister auftreten, eigenständig
ausführbaren Testcode unterzubringen, oder um eine solche Klasse
mit Benutzungshinweisen auszustatten, die der Entwickler durch einfaches
Starten der Klasse als Applikation abrufen kann.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#0099CC">
<tr>
<td><font color="#FFFFFF"> Tipp </font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#0099CC"><img src="trp1_1.gif"></td>
</tr>
</table>
<!-- Section -->
<a name="sectlevel3id013001007"></a>
<h3>13.1.7 <a name="ixa100756">Applets</a></h3>
<p>
Applets sind ebenfalls lauffähige Java-Programme. Anders als
Applikationen, werden sie aus einer HTML-Seite heraus aufgerufen und
benötigen zur Ausführung einen Web-Browser (oder ein Hilfsprogramm
wie den <a name="ixa100757"><i>Appletviewer</i></a>, das sich in gewissem
Sinne wie ein Web-Browser verhält).
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>
<p>
Applets werden nicht durch die Methode <font color="#000077"><tt>public
static void main</tt></font> gestartet, sondern müssen aus der
Klasse <a name="ixa100758"><a href="index_a.html#ixb100588"><font color=#000080><tt>Applet</tt></font></a></a>
abgeleitet und nach deren Architekturmerkmalen konstruiert werden.
Zum Starten des Programms erzeugt der Browser eine Instanz der abgeleiteten
Klasse und ruft nacheinander eine Reihe vordefinierter <a name="ixa100759"><i>Callback-Methoden</i></a>
auf. Callback-Methoden sind Methoden, die von der abgeleiteten Klasse
zur Verfügung gestellt und vom Browser oder AppletViewer aufgerufen
werden. Weitere Details zur Applet-Programmierung finden sich in <a href="k100248.html#kapitelapplets1">Kapitel 39</a>
und <a href="k100254.html#kapitelapplets2">Kapitel 40</a>.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
<tr>
<td><font color="#FFFFFF"> Hinweis </font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
</tr>
</table>
<hr>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage, Addison
Wesley, Version 5.0.1
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100083.html"> << </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100083.html"> < </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100085.html"> > </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100090.html"> >> </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
<td align="right">© 1998, 2007 Guido Krüger & Thomas
Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
</table>
<a name="endofbody"></a>
</body>
</html>
|