diff options
| author | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
|---|---|---|
| committer | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
| commit | 33613a85afc4b1481367fbe92a17ee59c240250b (patch) | |
| tree | 670b842326116b376b505ec2263878912fca97e2 /Master/Reference Architectures and Patterns/hjp5/html/k100027.html | |
| download | Studium-master.tar.gz Studium-master.tar.bz2 | |
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100027.html')
| -rw-r--r-- | Master/Reference Architectures and Patterns/hjp5/html/k100027.html | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100027.html b/Master/Reference Architectures and Patterns/hjp5/html/k100027.html new file mode 100644 index 0000000..d507d07 --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/html/k100027.html @@ -0,0 +1,183 @@ +<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,k100022.html;106,k100026.html;107,k100028.html;108,k100030.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="k100022.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100026.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100028.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100030.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 4 - Datentypen
+</table>
+<hr>
+
+
+<!-- Section -->
+<a name="sectlevel2id004005"></a>
+<h2>4.5 <a name="ixa100303">Referenztypen</a><a name="ixa100304"></a></h2>
+<hr>
+<ul>
+<li><a href="k100027.html#sectlevel2id004005">4.5 Referenztypen</a>
+<ul>
+<li><a href="k100027.html#sectlevel3id004005001">4.5.1 Beschreibung</a>
+<li><a href="k100027.html#sectlevel3id004005002">4.5.2 Speichermanagement</a>
+</ul>
+</ul>
+<hr>
+
+
+<!-- Section -->
+<a name="sectlevel3id004005001"></a>
+<h3>4.5.1 Beschreibung </h3>
+
+<p>
+Referenztypen sind neben den primitiven Datentypen die zweite wichtige
+Klasse von Datentypen in Java. Zu den Referenztypen gehören Objekte,
+Strings und Arrays. Weiterhin gibt es die vordefinierte Konstante
+<a name="ixa100305"><a href="index_n.html#ixb100235"><font color=#000080><tt>null</tt></font></a></a>,
+die eine <i>leere</i> Referenz bezeichnet.
+
+<p>
+Eigentlich sind auch Strings und Arrays Objekte, aber es gibt bei
+ihnen einige Besonderheiten, die eine Unterscheidung von normalen
+Objekten rechtfertigen:
+<ul>
+<li>Sowohl bei Strings als auch bei Arrays kennt der Compiler Literale,
+die einen expliziten Aufruf des <a href="index_n.html#ixb100089"><font color=#000080><tt>new</tt></font></a>-Operators
+überflüssig machen.
+<li>Arrays sind »klassenlose« Objekte. Sie können ausschließlich
+vom Compiler erzeugt werden, besitzen aber keine explizite Klassendefinition.
+Dennoch haben sie eine öffentliche Instanzvariable <a name="ixa100306"><a href="index_l.html#ixb100275"><font color=#000080><tt>length</tt></font></a></a>
+und werden vom Laufzeitsystem wie normale Objekte behandelt.
+<li>Die Klasse <a name="ixa100307"><a href="index_s.html#ixb100117"><font color=#000080><tt>String</tt></font></a></a>
+ist zwar wie eine gewöhnliche Klasse in der Laufzeitbibliothek
+von Java vorhanden. Der Compiler hat aber Kenntnisse über den
+inneren Aufbau von Strings und generiert bei Stringoperationen Code,
+der auf Methoden der Klassen <a href="index_s.html#ixb100117"><font color=#000080><tt>String</tt></font></a>
+und <a name="ixa100308"><a href="index_s.html#ixb100119"><font color=#000080><tt>StringBuffer</tt></font></a></a>
+zugreift. Eine ähnlich enge Zusammenarbeit zwischen Compiler
+und Laufzeitbibliothek gibt es auch bei Threads und Exceptions. Wir
+werden auf diese Besonderheiten in den nachfolgenden Kapiteln noch
+einmal zurückkommen.
+</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>
+Das Verständnis für Referenztypen ist entscheidend für
+die Programmierung in Java. Referenztypen können prinzipiell
+genauso benutzt werden wie primitive Typen. Da sie jedoch lediglich
+einen Verweis darstellen, ist die Semantik einiger Operatoren anders
+als bei primitiven Typen:</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>
+<ul>
+<li>Die Zuweisung einer Referenz kopiert lediglich den Verweis auf
+das betreffende Objekt, das Objekt selbst dagegen bleibt unkopiert.
+Nach einer Zuweisung zweier Referenztypen zeigen diese also auf ein
+und dasselbe Objekt. Sollen Referenztypen kopiert werden, so ist ein
+Aufruf der Methode <a name="ixa100309"><a href="index_c.html#ixb100278"><font color=#000080><tt>clone</tt></font></a></a>
+erforderlich (siehe <a href="k100052.html#klasseobject">Abschnitt 8.1.2</a>).
+<li>Der Gleichheitstest zweier Referenzen testet, ob beide Verweise
+gleich sind, d.h. auf ein und dasselbe Objekt zeigen. Das ist aber
+eine strengere Forderung als inhaltliche Gleichheit. Soll lediglich
+auf inhaltliche Gleichheit getestet werden, kann dazu die <a name="ixa100310"><a href="index_e.html#ixb100223"><font color=#000080><tt>equals</tt></font></a></a>-Methode
+verwendet werden, die von den meisten Klassen implementiert wird (ebenfalls
+in <a href="k100052.html#klasseobject">Abschnitt 8.1.2</a> erläutert).
+Analoges gilt für den Test auf Ungleichheit.
+</ul>
+
+<p>
+Anders als in C und C++, wo der <font color="#000077"><tt>*</tt></font>-Operator
+zur Dereferenzierung eines Zeigers nötig ist, erfolgt in Java
+der Zugriff auf Referenztypen in der gleichen Weise wie der auf primitive
+Typen. Einen expliziten Dereferenzierungsoperator gibt es dagegen
+nicht.
+
+<!-- Section -->
+
+<a name="sectlevel3id004005002"></a>
+<h3>4.5.2 <a name="ixa100311">Speichermanagement</a></h3>
+
+<p>
+Während primitive Typen lediglich deklariert werden, reicht dies
+bei Referenztypen nicht aus. Sie müssen mit Hilfe des <a name="ixa100312"><a href="index_n.html#ixb100089"><font color=#000080><tt>new</tt></font></a></a>-Operators
+oder - im Falle von Arrays und Strings - durch Zuweisung von Literalen
+zusätzlich noch explizit erzeugt werden.
+<a name="listingid004011"></a>
+
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#DDDDDD">
+<tr>
+<td valign=top>
+<font color="#000055">
+<pre>
+Vector v = <font color="#0000AA">new</font> Vector();</pre>
+</font>
+</td>
+</tr>
+</table>
+<i>
+Listing 4.11: Erzeugen eines Objekts mit dem new-Operator</i></p>
+
+<p>
+Java verfügt über ein automatisches <a name="ixa100311">Speichermanagement</a>.
+Dadurch braucht man sich als Java-Programmierer nicht um die Rückgabe
+von Speicher zu kümmern, der von Referenzvariablen belegt wird.
+Ein mit niedriger Priorität im Hintergrund arbeitender <a name="ixa100313"><i>Garbage
+Collector</i></a> sucht periodisch nach Objekten,
+die nicht mehr referenziert werden, um den durch sie belegten Speicher
+freizugeben.
+<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="k100022.html"> << </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100026.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100028.html"> > </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100030.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>
|
