summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/html/k100084.html
blob: ef0c737b487960a908fff49e8a287f1d2822e8a4 (plain)
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">&nbsp;Titel&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100083.html">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100083.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100085.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100090.html">&nbsp;&gt;&gt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</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&ouml;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&uuml;r das Verst&auml;ndnis der entwickelten Programme
und f&uuml;r die Kommunikation mit anderen Programmierern. 

<p>
Wir wollen uns dazu in diesem Kapitel die folgenden Programmelemente
ansehen: 
<ul>
<li>Anweisungen
<li>Bl&ouml;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&ouml;ren zu den elementarsten ausf&uuml;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&ouml;cke<a name="ixa100745"></a> </h3>

<p>
Ein Block ist eine Kollektion von Anweisungen, die nacheinander ausgef&uuml;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&ouml;rt, wenn
er wieder verlassen wird. 

<p>
Interessant ist ein Block vor allem deshalb, weil er selbst eine <i>Anweisung</i>
ist. W&auml;hrend er in seiner Zusammensetzung aus vielen verschiedenen
Anweisungen bestehen kann, stellt sich ein Block nach au&szlig;en
hin als eine einzige Anweisung dar. Die ganze Semantik einer blockstrukturierten
Sprache ist darauf ausgelegt, dass ein Block f&uuml;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&ouml;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&ouml;cken <a name="ixa100746"></a>
in Java entspricht den &uuml;blichen Regeln, die auch in anderen Programmiersprachen
g&uuml;ltig sind. Lokale Variablen werden angelegt, wenn die Ausf&uuml;hrung
des Blocks beginnt, und wieder zerst&ouml;rt, wenn der Block verlassen
wird. Innerhalb eines Blocks sind die lokalen Variablen des Blocks
und die lokalen Variablen der umgebenden Bl&ouml;cke bzw. der umgebenden
Methode sichtbar. Zus&auml;tzlich sind die Variablen der Klasse sichtbar,
in der die den Block umschlie&szlig;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">&nbsp;Tipp&nbsp;</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&uuml;r die formalen
Parameter nicht extra Namen ausdenken muss, nur damit sie sich von
den zugeh&ouml;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&ouml;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&uuml;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&ouml;hte Wert nicht der Membervariablen <font color="#000077"><tt>cnt</tt></font>
zugewiesen, sondern der lokalen Variablen gleichen Namens. Dieser
Fehler ist recht t&uuml;ckisch und kann bei un&uuml;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">&nbsp;Warnung&nbsp;</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&uuml;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&ouml;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">&nbsp;Hinweis&nbsp;</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&ouml;cke Kollektionen, die Deklarationen und
Anweisungen enthalten k&ouml;nnen. Genaugenommen enthalten sie neben
dem Funktionskopf genau <i>einen</i> Block, der alle anderen Elemente
enth&auml;lt. Sie unterscheiden sich von Bl&ouml;cken folgenderma&szlig;en:
<ul>
<li>Sie haben einen Namen und k&ouml;nnen von verschiedenen Stellen
des Programms aus aufgerufen werden
<li>Sie sind parametrisierbar, und ihr Verhalten ist so zur Laufzeit
strukturiert ver&auml;nderbar
<li>Sie k&ouml;nnen einen R&uuml;ckgabewert haben, mit dem ein Wert
an den Aufrufer zur&uuml;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&uuml;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">&nbsp;Hinweis&nbsp;</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&ouml;tigen
aber sp&auml;ter kein Objekt zur Ausf&uuml;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&ouml;hnlichen Funktionen werden Klassenmethoden
aber innerhalb einer Klasse definiert und besitzen damit einen eigenen
Namensraum, der sich &uuml;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&auml;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&ouml;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&ouml;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&szlig;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&uuml;r
Programmelemente an. 

<p>
Ein Paket ist eine Sammlung von Klassen, die einen gemeinsamen Zweck
verfolgen oder aus anderen Gr&uuml;nden zusammengefasst werden sollen.
Jede Klasse in Java ist Bestandteil genau eines Pakets. Paketnamen
k&ouml;nnen aus mehreren Teilen bestehen und beliebig tiefe Hierarchien
ausdr&uuml;cken. 

<p>
Der Name einer Methode oder einer Variablen besteht damit grunds&auml;tzlich
aus drei Elementen: 
<ul>
<li>Paketname
<li>Klassen- oder Objektname
<li>Methoden- bzw. Variablenname
</ul>

<p>
Ein Beispiel f&uuml;r einen Methodennamen ist <font color="#000077"><tt>java.lang.Math.sqrt</tt></font>.
Wir werden sp&auml;ter Mechanismen kennenlernen, mit denen es m&ouml;glich
ist, die Namen bei ihrer Verwendung abzuk&uuml;rzen. 

<!-- Section -->

<a name="sectlevel3id013001006"></a>
<h3>13.1.6 <a name="ixa100754">Applikationen</a></h3>

<p>
Applikationen bilden eigenst&auml;ndige Programme in Java. Sie ben&ouml;tigen
keinen Browser zur Ausf&uuml;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&auml;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&uuml;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&uuml;tzlich sein, um in Low-Level-Klassen,
die eigentlich nur als Dienstleister auftreten, eigenst&auml;ndig
ausf&uuml;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">&nbsp;Tipp&nbsp;</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&auml;hige Java-Programme. Anders als
Applikationen, werden sie aus einer HTML-Seite heraus aufgerufen und
ben&ouml;tigen zur Ausf&uuml;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&auml;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&uuml;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&uuml;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">&nbsp;Hinweis&nbsp;</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">&nbsp;Titel&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</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">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100083.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100085.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100090.html">&nbsp;&gt;&gt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
<td align="right">&copy; 1998, 2007 Guido Kr&uuml;ger &amp; Thomas
Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
</table>
<a name="endofbody"></a>
</body>
</html>