summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/html/k100272.html
blob: ca0f0d96fae5852bb472885bdd7f465b977bfc5c (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
<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,k100271.html;106,k100271.html;107,k100273.html;108,k100279.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="k100271.html">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100271.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100273.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100279.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 43 - Reflection
</table>
<hr>


<!-- Section -->
<a name="sectlevel2id043001"></a>
<h2>43.1 Einleitung </h2>
<hr>
<ul>
<li><a href="k100272.html#sectlevel2id043001">43.1 Einleitung</a>
</ul>
<hr>

<p>
Bei der Entwicklung des JDK 1.1 sahen sich die Entwickler mit einer
Schw&auml;che von Java konfrontiert, die die Entwicklung bestimmter
Typen von Tools und Bibliotheken unm&ouml;glich machte: der statischen
Struktur von Klassen und Objekten. Um ein Objekt anzulegen, eine seiner
Methoden aufzurufen oder auf eine seiner Membervariablen zuzugreifen,
mu&szlig;te der Code der Klasse zur <i>Compilezeit</i> bekannt sein.
W&auml;hrend dies f&uuml;r die meisten gew&ouml;hnlichen Anwendungen
kein Problem darstellt, ist es f&uuml;r die Entwicklung generischer
Werkzeuge und hochkonfigurierbarer Anwendungen, die durch PlugIns
erweiterbar sind, unzureichend. Insbesondere die Entwicklung der Beans-
und Serialisierungs-APIs war mit den in der Version 1.0 verf&uuml;gbaren
Spracheigenschaften nicht m&ouml;glich. 

<p>
Ben&ouml;tigt wurde vielmehr die M&ouml;glichkeit, Klassen zu laden
und zu instanzieren (auch mit parametrisierten Konstruktoren), ohne
dass bereits zur Compilezeit ihr Name bekannt sein mu&szlig;te. Weiterhin
sollten statische oder instanzbasierte Methoden aufgerufen und auf
Membervariablen auch dann zugegriffen werden k&ouml;nnen, wenn ihr
Name erst zur Laufzeit des Programms bekannt ist. 

<p>
Gesucht wurde also ein Mechanismus, der diese normalerweise vom Compiler
angeforderten F&auml;higkeiten des Laufzeitsystems auch &#187;normalen&#171;
Anwendungen zur Verf&uuml;gung stellte. Mit dem Reflection-API des
JDK 1.1 wurde eine Library-Schnittstelle geschaffen, die alle erw&auml;hnten
F&auml;higkeiten (und noch einige mehr) implementiert und beliebigen
Anwendungen als integralen Bestandteil der Java-Klassenbibliothek
zur Verf&uuml;gung stellt. Erweiterungen am Sprachkern waren dazu
nicht n&ouml;tig. 

<p>
Wir wollen uns in diesem Kapitel die wichtigsten Eigenschaften des
Reflection-APIs ansehen und ein paar n&uuml;tzliche Anwendungen vorstellen.
Die als <a name="ixa103161"><i>Introspection</i></a> bezeichneten
Erweiterungen f&uuml;r die Beans-Behandlung werden in <a href="k100279.html#kapitelbeans">Kapitel 44</a>
behandelt. 
<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="k100271.html">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100271.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100273.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100279.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>