diff options
Diffstat (limited to 'Master/Reference Architectures and Patterns/hjp5/html/k100085.html')
| -rw-r--r-- | Master/Reference Architectures and Patterns/hjp5/html/k100085.html | 1059 |
1 files changed, 1059 insertions, 0 deletions
diff --git a/Master/Reference Architectures and Patterns/hjp5/html/k100085.html b/Master/Reference Architectures and Patterns/hjp5/html/k100085.html new file mode 100644 index 0000000..234e032 --- /dev/null +++ b/Master/Reference Architectures and Patterns/hjp5/html/k100085.html @@ -0,0 +1,1059 @@ +<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,k100084.html;107,k100086.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="k100084.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100086.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="sectlevel2id013002"></a>
+<h2>13.2 <a name="ixa100760">Pakete</a></h2>
+<hr>
+<ul>
+<li><a href="k100085.html#sectlevel2id013002">13.2 Pakete</a>
+<ul>
+<li><a href="k100085.html#sectlevel3id013002001">13.2.1 Verwendung von Paketen</a>
+<ul>
+<li><a href="k100085.html#sectlevel4id013002001001">Der Import von java.lang</a>
+<li><a href="k100085.html#sectlevel4id013002001002">Die vordefinierten Pakete im JDK</a>
+</ul>
+<li><a href="k100085.html#bedeutungpaketnamen">13.2.2 Die Bedeutung der Paketnamen</a>
+<ul>
+<li><a href="k100085.html#sectlevel4id013002002001">Laden von Klassen im JDK 1.0 und 1.1</a>
+<li><a href="k100085.html#sectlevel4id013002002002">Laden von Klassen seit dem JDK 1.2</a>
+<li><a href="k100085.html#sectlevel4id013002002003">Die Dateien classes.zip und rt.jar</a>
+<li><a href="k100085.html#sectlevel4id013002002004">Umgekehrte Domain-Namen</a>
+</ul>
+<li><a href="k100085.html#zuspaketeeinbinden">13.2.3 Einbinden zusätzlicher Pakete</a>
+<li><a href="k100085.html#sectlevel3id013002004">13.2.4 Erstellen eigener Pakete</a>
+<ul>
+<li><a href="k100085.html#sectlevel4id013002004001">Benannte Pakete</a>
+<li><a href="k100085.html#sectlevel4id013002004002">Das Default-Paket</a>
+<li><a href="k100085.html#sectlevel4id013002004003">Das public-Attribut</a>
+</ul>
+</ul>
+</ul>
+<hr>
+
+
+<!-- Section -->
+<a name="sectlevel3id013002001"></a>
+<h3>13.2.1 Verwendung von Paketen </h3>
+
+<p>
+Jede Klasse in Java ist Bestandteil eines Pakets. Der vollständige
+Name einer Klasse besteht aus dem Namen des Pakets, gefolgt von einem
+Punkt, dem sich der eigentliche Name der Klasse anschließt.
+Der Name des Pakets selbst kann ebenfalls einen oder mehrere Punkte
+enthalten.
+
+<p>
+Damit eine Klasse verwendet werden kann, muss angegeben werden, in
+welchem Paket sie liegt. Hierzu gibt es zwei unterschiedliche Möglichkeiten:
+<ul>
+<li>Die Klasse wird über ihren vollen (qualifizierten) Namen
+angesprochen:
+<font color="#000077">
+<pre>
+java.util.Date d = new java.util.Date();
+</pre>
+</font>
+<li>Am Anfang des Programms werden die gewünschten Klassen mit
+Hilfe einer <a name="ixa100761"><a href="index_i.html#ixb100169"><font color=#000080><tt>import</tt></font></a></a>-Anweisung
+eingebunden:
+<font color="#000077">
+<pre>
+import java.util.*;
+...
+Date d = new Date();
+</pre>
+</font>
+</ul>
+
+<p>
+Die Verwendung voll qualifizierter Namen hat den Nachteil, dass die
+Klassennamen sehr lang und unhandlich werden. Bequemer ist daher die
+Anwendung der zweiten Variante, bei der die benötigten Klassen
+mit Hilfe einer <a href="index_i.html#ixb100169"><font color=#000080><tt>import</tt></font></a>-Anweisung
+dem Compiler bekanntgemacht werden.
+
+<p>
+Die <a href="index_i.html#ixb100169"><font color=#000080><tt>import</tt></font></a>-Anweisung
+gibt es in zwei unterschiedlichen Ausprägungen:
+<ul>
+<li>Mit der Syntax <font color="#000077"><tt>import Paket.Klasse;</tt></font>
+wird genau eine Klasse importiert. Alle anderen Klassen des Pakets
+bleiben unsichtbar:
+<font color="#000077">
+<pre>
+import java.util.Date;
+...
+Date d = new Date();
+java.util.Vector v = new java.util.Vector();
+</pre>
+</font>
+<li>Unter Verwendung der Syntax <font color="#000077"><tt>import Paket.*;</tt></font>
+können alle Klassen des angegebenen Pakets auf einmal importiert
+werden:
+<font color="#000077">
+<pre>
+import java.util.*;
+...
+Date d = new Date();
+Vector v = new Vector();
+</pre>
+</font>
+</ul>
+
+<p>
+Im Gegensatz zu ähnlichen Konstrukten in anderen Sprachen ist
+die Verwendung der zweiten Variante der <a href="index_i.html#ixb100169"><font color=#000080><tt>import</tt></font></a>-Anweisung
+nicht zwangsläufig ineffizienter als die der ersten. In der Sprachspezifikation
+wird sie als <i>type import on demand</i> bezeichnet, was bedeutet,
+dass die Klasse erst dann in den angegebenen Paketen gesucht wird,
+wenn das Programm sie wirklich benötigt. Keinesfalls muss der
+Compiler beim Parsen der <a href="index_i.html#ixb100169"><font color=#000080><tt>import</tt></font></a>-Anweisung
+zwangsläufig alle Klassendateien des angegebenen Pakets in den
+Hauptspeicher laden oder ähnlich zeit- und speicheraufwändige
+Dinge machen. Es schadet also im allgemeinen nichts, die zweite Variante
+der <a href="index_i.html#ixb100169"><font color=#000080><tt>import</tt></font></a>-Anweisung
+zu verwenden.
+<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>
+Allerdings kann es zur Vermeidung von Verwechslungen mitunter nötig
+sein, die erste Variante zu verwenden. Enthalten nämlich zwei
+oder mehr Pakete, die mit der *-Notation importiert wurden, Klassen
+mit demselben Namen, würde der Compiler die Übersetzung
+mit einer Fehlermeldung »mehrdeutige Referenz auf Klasse...«
+abbrechen. In diesem Fall muss im Programm entweder der qualifizierte
+Klassenname verwendet oder die gewünschte Variante der Klasse
+mit einer expliziten <a href="index_i.html#ixb100169"><font color=#000080><tt>import</tt></font></a>-Anweisung
+eingebunden werden.</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="#FF9900"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Seit der J2SE 5.0 gibt es unter dem Stichwort <i>static import</i>
+eine weitere Variante der <a href="index_i.html#ixb100169"><font color=#000080><tt>import</tt></font></a>-Anweisung.
+Weitere Informationen dazu finden Sie in <a href="k100061.html#weitereanwinterfaces">Abschnitt 9.4</a>.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#FF9900">
+<tr>
+<td><font color="#FFFFFF"> JDK1.1-6.0 </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+
+<!-- Section -->
+<a name="sectlevel4id013002001001"></a>
+<h4>Der <a name="ixa100762">Import von java.lang</a> </h4>
+
+<p>
+In vielen verschiedenen Beispielen in diesem Buch werden Klassennamen
+(wie beispielsweise <a href="index_s.html#ixb100117"><font color=#000080><tt>String</tt></font></a>,
+<a href="index_t.html#ixb100591"><font color=#000080><tt>Thread</tt></font></a>
+oder <a href="index_o.html#ixb100224"><font color=#000080><tt>Object</tt></font></a>)
+verwendet, ohne dass eine zugehörige <a name="ixa100763"><a href="index_i.html#ixb100169"><font color=#000080><tt>import</tt></font></a></a>-Anweisung
+zu erkennen wäre. In diesem Fall entstammen die Klassen dem Paket
+<a name="ixa100764"><a href="index_j.html#ixb100188"><font color=#000080><tt>java.lang</tt></font></a></a>.
+
+<p>
+Dieses Paket wurde von den Entwicklern der Sprache als so wichtig
+angesehen, dass es bei jedem Compilerlauf automatisch importiert wird.
+Man kann sich das so vorstellen, als wenn am Anfang jeder Quelldatei
+implizit die folgende Anweisung stehen würde:
+<font color="#000077">
+<pre>
+import java.lang.*;
+</pre>
+</font>
+
+<p>
+Ein expliziter Import von <a href="index_j.html#ixb100188"><font color=#000080><tt>java.lang</tt></font></a>
+ist daher niemals nötig. Alle anderen Pakete müssen jedoch
+vor ihrer Verwendung importiert werden, wenn auf die Anwendung voll
+qualifizierter Klassennamen verzichtet werden soll.
+
+<!-- Section -->
+
+<a name="sectlevel4id013002001002"></a>
+<h4>Die vordefinierten Pakete im JDK<a name="ixa100765"></a> </h4>
+
+<p>
+Während beim Wechsel der Java-Versionen die Sprachspezifikation
+relativ stabil geblieben ist, hat sich der Umfang der Laufzeitbibliothek
+um ein Vielfaches erhöht. Dies zeigt sich unter anderem an der
+gestiegenen Anzahl an vordefinierten Paketen, die mit dem JDK ausgeliefert
+werden (siehe <a href="k100085.html#vordefiniertestdpakete">Tabelle 13.1</a>
+und <a href="k100085.html#vordefinierteextpakete">Tabelle 13.2</a>).
+Sie stieg von 8 Standardpaketen im JDK 1.0 auf 22 im JDK 1.1, 50 im
+JDK 1.2, 70 im JDK 1.3, 130 im JDK 1.4 und schließlich knapp
+200 seit der Java 5 Standard Edition. <a name="vordefiniertestdpakete"></a>
+
+<p>
+<table cols=2 border width=100%>
+
+<tr>
+<td valign=top align=left width=33%><b>Paket</b></td>
+<td valign=top align=left width=66%><b>Bedeutung </b></td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100766"><a href="index_j.html#ixb100593"><font color=#000080><tt>java.applet</tt></font></a></a></td>
+<td valign=top align=left>Applets </td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100767"><a href="index_j.html#ixb100190"><font color=#000080><tt>java.awt</tt></font></a></a></td>
+<td valign=top align=left>Das Abstract Windowing Toolkit inkl. diverser
+Unterpakete </td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100768"><a href="index_j.html#ixb100594"><font color=#000080><tt>java.beans</tt></font></a></a></td>
+<td valign=top align=left>Java Beans </td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100769"><a href="index_j.html#ixb100189"><font color=#000080><tt>java.io</tt></font></a></a></td>
+<td valign=top align=left>Bildschirm- und Datei-I/O </td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100770"><a href="index_j.html#ixb100188"><font color=#000080><tt>java.lang</tt></font></a></a></td>
+<td valign=top align=left>Elementare Sprachunterstützung </td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100771"><a href="index_j.html#ixb100595"><font color=#000080><tt>java.lang.ref</tt></font></a></a></td>
+<td valign=top align=left>Referenz-Objekte </td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100772"><a href="index_j.html#ixb100596"><font color=#000080><tt>java.lang.reflect</tt></font></a></a></td>
+<td valign=top align=left>Reflection-API </td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100773"><a href="index_j.html#ixb100597"><font color=#000080><tt>java.math</tt></font></a></a></td>
+<td valign=top align=left>Fließkomma-Arithmetik </td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100774"><a href="index_j.html#ixb100194"><font color=#000080><tt>java.net</tt></font></a></a></td>
+<td valign=top align=left>Netzwerkunterstützung </td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100775"><a href="index_j.html#ixb100598"><font color=#000080><tt>java.nio</tt></font></a></a></td>
+<td valign=top align=left>Das seit dem JDK 1.4 vorhandene <a name="ixa100776"><i>New I/O
+Package</i></a> </td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100777"><a href="index_j.html#ixb100600"><font color=#000080><tt>java.rmi</tt></font></a></a></td>
+<td valign=top align=left>Remote Method Invocation (RMI) </td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100778"><a href="index_j.html#ixb100601"><font color=#000080><tt>java.security</tt></font></a></a></td>
+<td valign=top align=left>Security-Dienste </td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100779"><a href="index_j.html#ixb100193"><font color=#000080><tt>java.sql</tt></font></a></a></td>
+<td valign=top align=left>Datenbankzugriff (JDBC) </td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100780"><a href="index_j.html#ixb100556"><font color=#000080><tt>java.text</tt></font></a></a></td>
+<td valign=top align=left>Internationalisierung </td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100781"><a href="index_j.html#ixb100127"><font color=#000080><tt>java.util</tt></font></a></a></td>
+<td valign=top align=left>Diverse Utilities, Collection-Klassen und
+Datenstrukturen </td></tr>
+</table>
+<p><i>
+Tabelle 13.1: Wichtige Standard-Pakete des JDK </i></p>
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Neben den Standardpaketen gibt es seit der Version 1.2 des JDK eine
+Reihe von <a name="ixa100782"><i>Standarderweiterungen</i></a>, deren
+Paketname mit <font color="#000077"><tt>javax.</tt></font><a name="ixa100783"></a>
+beginnt. Sie stellen erweiterte Funktionalitäten in einem oder
+mehreren <font color="#660099">.jar</font>-Dateien zur Verfügung
+und werden typischerweise im Unterverzeichnis <font color="#660099">lib\ext</font>
+des JDK installiert. Im Gegensatz zu den Standardpaketen des JDK sind
+sie nicht unbedingt Bestandteil jedes Java-Entwicklungssystems und
+müssen nicht auf allen Plattformen zur Verfügung stehen.
+Sie stellen häufig gebrauchte Erweiterungen zur Verfügung,
+deren Umfang die reinen Kernbibliotheken um ein Vielfaches übertrifft:</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#FF9900">
+<tr>
+<td><font color="#FFFFFF"> JDK1.1-6.0 </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+<a name="vordefinierteextpakete"></a>
+<p>
+<table cols=2 border width=100%>
+
+<tr>
+<td valign=top align=left width=33%><b>Paket</b></td>
+<td valign=top align=left width=66%><b>Bedeutung </b></td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100784"><a href="index_j.html#ixb100604"><font color=#000080><tt>javax.accessibility</tt></font></a></a></td>
+<td valign=top align=left>Unterstützung für Braille-Zeilen
+und ähnliche Ein-/Ausgabegeräte </td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100785"><a href="index_j.html#ixb100605"><font color=#000080><tt>javax.crypto</tt></font></a></a></td>
+<td valign=top align=left>Kryptografische Erweiterungen </td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100786"><a href="index_j.html#ixb100606"><font color=#000080><tt>javax.imageio</tt></font></a></a></td>
+<td valign=top align=left>Lesen und Schreiben von Bilddateien </td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100787"><a href="index_j.html#ixb100607"><font color=#000080><tt>javax.naming</tt></font></a></a></td>
+<td valign=top align=left>Zugriff auf Namens-Services </td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100788"><a href="index_j.html#ixb100608"><font color=#000080><tt>javax.print</tt></font></a></a></td>
+<td valign=top align=left>Unterstützung zum Drucken </td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100789"><a href="index_j.html#ixb100609"><font color=#000080><tt>javax.security.auth</tt></font></a></a></td>
+<td valign=top align=left>Authentifizierung und Autorisierung </td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100790"><a href="index_j.html#ixb100610"><font color=#000080><tt>javax.sound</tt></font></a></a></td>
+<td valign=top align=left>Das Sound-API </td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100791"><a href="index_j.html#ixb100192"><font color=#000080><tt>javax.swing</tt></font></a></a></td>
+<td valign=top align=left>Das SWING-Toolkit </td></tr>
+<tr>
+<td valign=top align=left><a name="ixa100792"><a href="index_j.html#ixb100611"><font color=#000080><tt>javax.xml</tt></font></a></a></td>
+<td valign=top align=left>Zugriff auf XML-Dateien </td></tr>
+</table>
+<p><i>
+Tabelle 13.2: Wichtige Standarderweiterungen des JDK </i></p>
+
+<p>
+Des weiteren sind einige Pakete im JDK enthalten, deren Inhalt von
+Dritten hergestellt wurde. Beispiele dafür sind die diversen
+Pakete unterhalb der <a name="ixa100793"><a href="index_o.html#ixb100612"><font color=#000080><tt>org.omg</tt></font></a></a>-Hierarchie,
+mit deren Hilfe CORBA-Support<a name="ixa100794"></a> zur Verfügung
+gestellt wird. Oder die Paket-Hierarchien <a name="ixa100795"><a href="index_o.html#ixb100613"><font color=#000080><tt>org.xml</tt></font></a></a>
+und <a name="ixa100796"><a href="index_o.html#ixb100614"><font color=#000080><tt>org.w3c</tt></font></a></a>,
+die Unterstützung zum Zugriff auf <a name="ixa100797"><i>XML-Dateien</i></a>
+zur Verfügungv stellen.
+
+<!-- Section -->
+
+<a name="bedeutungpaketnamen"></a>
+<h3>13.2.2 Die Bedeutung der Paketnamen </h3>
+
+<p>
+Paketnamen bestehen in Java aus mehreren Komponenten, die durch Punkte
+voneinander getrennt sind. Neben der Aufgabe, die Paketnamen <i>visuell</i>
+zu strukturieren, hat die Unterteilung aber noch eine andere, sehr
+viel wichtigere Bedeutung.
+
+<p>
+Jeder Teil eines mehrstufigen Paketnamens bezeichnet nämlich
+ein Unterverzeichnis auf dem Weg zu der gewünschten Klassendatei.
+Soll beispielsweise eine Klasse aus dem Paket <a href="index_j.html#ixb100112"><font color=#000080><tt>java.awt.image</tt></font></a>
+eingebunden werden, sucht es der Java-Compiler im Unterverzeichnis
+<font color="#660099">java\awt\image</font>. Soll dagegen eine Klasse
+aus dem Paket <a name="ixa100798"><a href="index_c.html#ixb100616"><font color=#000080><tt>com.sun.image.codec.jpeg</tt></font></a></a>
+geladen werden, wird es im Unterverzeichnis <font color="#660099">com\sun\image\codec\jpeg</font>
+gesucht. Interessant ist in diesem Zusammenhang natürlich die
+Frage, in welchem Verzeichnis der Compiler mit der Suche beginnt.
+Bei der Antwort darauf muss zwischen den JDKs 1.2, 1.3 und 1.4 und
+ihren Vorgängerversionen 1.0 und 1.1 unterschieden werden.
+
+<!-- Section -->
+
+<a name="sectlevel4id013002002001"></a>
+<h4>Laden von Klassen im JDK 1.0 und 1.1 </h4>
+
+<p>
+Wurde keine Umgebungsvariable <a name="ixa100799"><a href="index_c.html#ixb100143"><font color=#000080><tt>CLASSPATH</tt></font></a></a>
+angegeben und der Schalter <a href="index_0.html#ixb100183"><font color=#000080><tt>-classpath</tt></font></a>
+beim Compiler-Aufruf nicht verwendet, so suchen der Java-Compiler
+und die übrigen Tools in einem systemspezifischen Installationsverzeichnis
+(z.B. <font color="#660099">c:\java1.1.7\lib</font> beim JDK 1.1.7)
+und zusätzlich im aktuellen Verzeichnis nach den Klassendateien.
+
+<p>
+Anders als im JDK 1.0 ist es bei einer Standardinstallation des JDK
+1.1 unter Windows 95 nicht erforderlich, den <a href="index_c.html#ixb100143"><font color=#000080><tt>CLASSPATH</tt></font></a>
+explizit zu setzen. Alle Tools generieren den <a href="index_c.html#ixb100143"><font color=#000080><tt>CLASSPATH</tt></font></a>
+implizit aus der Position des <font color="#660099">bin</font>-Verzeichnisses
+(z.B. <font color="#660099">c:\java1.1.7\bin</font>) nach folgendem
+Schema:
+<font color="#000077">
+<pre>
+.;[bin]\..\classes;[bin]\..\lib\classes.zip
+</pre>
+</font>
+
+<p>
+<font color="#000077"><tt>[bin]</tt></font> steht hier für den
+Pfad des <font color="#660099">bin</font>-Verzeichnisses. Nur wenn
+die Klassendateien in einem anderen Verzeichnis liegen oder Klassendateien
+in weiteren Verzeichnissen eingebunden werden sollen, muss die <a href="index_c.html#ixb100143"><font color=#000080><tt>CLASSPATH</tt></font></a>-Variable
+manuell geändert werden.
+
+<p>
+Existiert zum Zeitpunkt des Compiler-Aufrufs die Umgebungsvariable
+<a href="index_c.html#ixb100143"><font color=#000080><tt>CLASSPATH</tt></font></a>,
+beginnt der Compiler die Suche nach den eingebundenen Klassen in allen
+im <a href="index_c.html#ixb100143"><font color=#000080><tt>CLASSPATH</tt></font></a>
+angegebenen Verzeichnissen. Die einzelnen Verzeichnisse werden durch
+ein Semikolon (bzw. einen Doppelpunkt unter UNIX) voneinander getrennt.
+
+<p>
+Beim Aufruf des Compilers kann der Schalter <a href="index_0.html#ixb100183"><font color=#000080><tt>-classpath</tt></font></a>,
+gefolgt von einer Liste von Verzeichnisnamen, übergeben werden.
+Er hat dieselbe Bedeutung wie die Umgebungsvariable <a href="index_c.html#ixb100143"><font color=#000080><tt>CLASSPATH</tt></font></a>
+und definiert die Verzeichnisse, in denen der Compiler nach den <font color="#660099">.class</font>-Dateien
+sucht. Der Compiler-Schalter hat dabei Vorrang gegenüber einer
+möglichen Umgebungsvariablen.
+
+<!-- Section -->
+
+<a name="sectlevel4id013002002002"></a>
+<h4>Laden von Klassen seit dem JDK 1.2 </h4>
+
+<p>
+Die Verwendung der <a name="ixa100800"><a href="index_c.html#ixb100143"><font color=#000080><tt>CLASSPATH</tt></font></a></a>-Variable
+hat immer wieder zu Schwierigkeiten und Missverständnissen geführt.
+Es ist insbesondere häufig passiert, dass durch falsches Setzen
+der Umgebungsvariable die Systemklassen selbst nicht mehr gefunden
+werden konnten und auf diese Weise das gesamte Laufzeitsystem unbenutzbar
+wurde.
+
+<p>
+Seit dem JDK 1.2 wurde daher die Bedeutung der <a href="index_c.html#ixb100143"><font color=#000080><tt>CLASSPATH</tt></font></a>-Umgebungsvariable
+dahingehend verändert, dass sie nur noch zur Suche der <i>benutzerspezifischen</i>
+Klassen verwendet wird. Alle Standardpakete und Standarderweiterungen
+(beide zusammen werden seit dem JDK 1.2 <a name="ixa100801"><i>Bootstrap Classes</i></a>
+genannt) werden dagegen unabhängig vom <a href="index_c.html#ixb100143"><font color=#000080><tt>CLASSPATH</tt></font></a>
+mit Hilfe der auf das Installationsverzeichnis verweisenden Systemeigenschaft
+<a name="ixa100802"><a href="index_s.html#ixb100618"><font color=#000080><tt>sun.boot.class.path</tt></font></a></a>
+gefunden. Sie wird bei der JDK-Installation automatisch gesetzt und
+sollte später nicht mehr verändert werden. Der <a href="index_c.html#ixb100143"><font color=#000080><tt>CLASSPATH</tt></font></a>
+braucht also nur noch dann explizit gesetzt zu werden, wenn benutzerspezifische
+Klassen vorhanden sind, die nicht im aktuellen Verzeichnis liegen
+(letzteres wird ebenfalls automatisch durchsucht).
+<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>
+Falls Sie zuvor eine ältere Versionen des Java Development Kit
+auf Ihrem Rechner installiert hatten, überprüfen Sie bitte
+nach der Installation die Umgebungsvariablen. Sorgen Sie dafür,
+dass nicht ein veralteter <a href="index_c.html#ixb100143"><font color=#000080><tt>CLASSPATH</tt></font></a>
+auf Verzeichnisse oder Dateien verweist, aus denen das Laufzeitsystem
+versehentlich unbrauchbare Klassendateien laden würde.</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>
+
+
+<!-- Section -->
+<a name="sectlevel4id013002002003"></a>
+<h4>Die Dateien classes.zip und rt.jar </h4>
+
+<p>
+Im Installationsverzeichnis von JDKs der Versionen 1.0 und 1.1 findet
+man meist eine Datei <font color="#660099">classes.zip</font><a name="ixa100803"></a>
+anstelle der erwähnten Unterverzeichnisse mit den Klassendateien.
+Aus Gründen der Performance beim Übersetzen haben sich die
+Entwickler entschlossen, alle Standardklassendateien in diesem Archiv
+abzulegen, um einen schnelleren Lesezugriff auf sie zu ermöglichen.
+<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>
+Die Datei <font color="#660099">classes.zip</font> sollte nicht ausgepackt
+werden, denn der Compiler verwendet sie in archivierter Form. Obwohl
+beim Einpacken der Klassen auf die Komprimierung verzichtet wurde,
+bietet diese Form der Archivierung den Vorteil, dass viele kleine
+Dateien in einer einzigen großen zusammengefasst werden. Zeitaufwändige
+Verzeichniszugriffe und -wechsel können so entfallen, wenn der
+Compiler nach Klassennamen suchen muss oder den Inhalt einer Klassendatei
+lesen will.</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>
+Um dem Compiler diese Art der Speicherung der Klassendateien bekanntzumachen,
+muss in der <a name="ixa100804"><a href="index_c.html#ixb100143"><font color=#000080><tt>CLASSPATH</tt></font></a></a>-Umgebungsvariable
+nicht nur das Verzeichnis, sondern auch der Name der <font color="#660099">.zip</font>-Datei
+angegeben werden, z.B.:
+<font color="#000077">
+<pre>
+CLASSPATH=.;c:\java\LIB\CLASSES.ZIP
+</pre>
+</font>
+<p>
+<table border=0 cellspacing=0 cellpadding=0 width=100%>
+<tr>
+<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=1></td>
+<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top width=1000>
+
+<p>
+Seit dem JDK 1.2 gibt es die Datei <font color="#660099">classes.zip</font>
+nicht mehr. Die Klassenbibliotheken liegen nun als <font color="#660099">.jar</font>-Dateien
+(z.B. <font color="#660099">rt.jar</font> <a name="ixa100805"></a>)
+vor und befinden sich im Unterverzeichnis <font color="#660099">jre\lib</font>
+der JDK-Installation. Wie zuvor erwähnt, werden sie unabhängig
+vom Inhalt der <a href="index_c.html#ixb100143"><font color=#000080><tt>CLASSPATH</tt></font></a>-Umgebungsvariable
+gefunden. Weitere Informationen zu jar-Dateien finden Sie in <a href="k100317.html#kapitelwerkzeuge">Kapitel 51</a>.</td>
+<td><img src="trp1_1.gif" width=2></td>
+<td valign=top>
+<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#FF9900">
+<tr>
+<td><font color="#FFFFFF"> JDK1.1-6.0 </font></td>
+</tr>
+</table>
+</td>
+<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
+</tr>
+</table>
+
+
+<!-- Section -->
+<a name="sectlevel4id013002002004"></a>
+<h4>Umgekehrte Domain-Namen </h4>
+
+<p>
+Die Entwickler von Java haben sich einen Mechanismus ausgedacht, um
+auch bei sehr großen Projekten, an denen möglicherweise
+viele Entwickler beteiligt sind, Namenskollisionen zwischen den beteiligten
+Klassen und Paketen zu vermeiden. Auch die Verwendung einer großen
+Anzahl unterschiedlicher Klassenbibliotheken von verschiedenen Herstellern
+sollte möglich sein, ohne dass Namensüberschneidungen dies
+schon im Keim ersticken.
+
+<p>
+Um diese Probleme zu lösen, hat sich das Java-Team eine Vorgehensweise
+zur Vergabe von Paketnamen überlegt, die an das <i>Domain-Namen</i>-System
+bei Internet-Adressen angelehnt ist. Danach sollte jeder Anbieter
+seine Pakete entsprechend dem eigenen Domain-Namen benennen, dabei
+allerdings die Namensbestandteile in umgekehrter Reihenfolge verwenden.
+
+<p>
+So sollten beispielsweise die Klassen der Firma SUN, deren Domain-Name
+<font color="#000077"><tt>sun.com</tt></font> ist, in einem Paket
+<font color="#000077"><tt>com.sun</tt></font> oder in darunter befindlichen
+Subpaketen liegen. Da die Domain-Namen weltweit eindeutig sind, werden
+Namenskollisionen zwischen Paketen unterschiedlicher Hersteller auf
+diese Weise von vornherein vermieden. Beispiele für derartige
+Paketnamen liefert die Standardinstallation gleich mit. So stellt
+das JDK 1.2 diverse Pakete <font color="#000077"><tt>com.sun.*</tt></font>
+zur Verfügung. Sie gehören nicht zum Standard-Sprachumfang
+eines Java-Entwicklungssystems, sondern werden von SUN als eigenständige
+Erweiterung mit dem JDK ausgeliefert.
+<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>
+Unterhalb des Basispakets können Unterpakete beliebig geschachtelt
+werden. Die Namensvergabe liegt dabei in der Entscheidung des Unternehmens.
+Gibt es beispielsweise die Abteilungen <font color="#000077"><tt>is</tt></font>,
+<font color="#000077"><tt>se</tt></font> und <font color="#000077"><tt>tx</tt></font>
+in einem Unternehmen mit der Domain <font color="#000077"><tt>tl.de</tt></font>,
+kann es sinnvoll sein, diese Abteilungsnamen auch als Unterprojekte
+zu verwenden. Die von diesen Abteilungen erstellten Klassen würden
+dann in den Paketen <font color="#000077"><tt>de.tl.is</tt></font>,
+<font color="#000077"><tt>de.tl.se</tt></font> und <font color="#000077"><tt>de.tl.tx</tt></font>
+liegen.</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>
+Der Vollständigkeit halber sollte man anmerken, dass sich das
+hier beschriebene System in der Praxis noch nicht komplett durchgesetzt
+hat und insbesondere die Klassen der <font color="#000077"><tt>java.*</tt></font>-
+und <font color="#000077"><tt>javax.*</tt></font>-Hierarchie Ausnahmen
+bilden. Es wird mit der zunehmenden Anzahl allgemein verfügbarer
+Pakete jedoch an Bedeutung gewinnen. Manche Entwickler verwenden ein
+leicht abgewandeltes Schema, bei dem nur die Top-Level-Domain ausgelassen
+wird. Die Paketnamen beginnen in diesem Fall nicht mit <font color="#000077"><tt>org</tt></font>
+oder <font color="#000077"><tt>com</tt></font>, sondern direkt mit
+dem zweiten Teil des Domain-Namens (oder einem ähnlichen herstellerspezifischen
+Kürzel). Dadurch werden sie etwas kürzer und sind leichter
+zu handhaben.
+
+<!-- Section -->
+
+<a name="zuspaketeeinbinden"></a>
+<h3>13.2.3 Einbinden zusätzlicher Pakete<a name="ixa100806"></a>
+</h3>
+
+<p>
+In der Praxis wird man neben der Klassenbibliothek des JDK häufig
+zusätzliche Pakete von Drittanbietern verwenden wollen. Um den
+Klassenpfad nicht unnötig lang werden zu lassen, empfiehlt es
+sich, die Pakete in einem gemeinsamen Verzeichnis abzulegen. Falls
+sich alle Entwickler von Libraries an das oben besprochene Schema
+zur Vergabe von Paketnamen halten, kann es keine Überschneidungen
+geben.
+
+<p>
+Als Beispiel wollen wir einige Java-Klassen des Autors (zu finden
+als Datei <font color="#660099">gkjava.zip</font> unter <a href="http://www.gkrueger.com">http://www.gkrueger.com</a>
+oder auf der DVD zum Buch im Verzeichnis <font color="#660099">\misc</font>)
+und die Utilities der »ACME-Labs« von Jef Poskanzer (<a href="http://www.acme.com">http://www.acme.com</a>)
+installieren:
+<ul>
+<li>Zunächst legen wir ein gemeinsames Unterverzeichnis für
+unsere Klassendateien an, beispielsweise <font color="#660099">c:\classes</font>.
+<li>Nun wird die <font color="#660099">.zip</font>-Datei mit den Klassen
+des Autors geladen und im Verzeichnis <font color="#660099">c:\classes</font>
+ausgepackt. Da alle Paketnamen mit <font color="#000077"><tt>gk</tt></font>
+beginnen, landen alle Dateien im Unterverzeichnis <font color="#660099">gk</font>.
+<li>Auf die gleiche Weise packen wir die Klassendateien von Jef Poskanzer
+aus. Alle Klassen liegen im Paket <font color="#000077"><tt>acme</tt></font>
+oder in Unterpaketen und landen damit im Unterverzeichnis <font color="#660099">acme</font>.
+<li>Nun braucht lediglich noch der <a name="ixa100807"><a href="index_c.html#ixb100143"><font color=#000080><tt>CLASSPATH</tt></font></a></a>
+so gesetzt zu werden, dass er das Verzeichnis <font color="#660099">c:\classes</font>
+beinhaltet:
+<font color="#000077">
+<pre>
+set CLASSPATH=.;c:\classes
+</pre>
+</font>
+</ul>
+
+<p>
+Alle Libraries, die sich an diese Konventionen halten, können
+in der beschriebenen Weise installiert werden. Probleme gibt es nur,
+wenn ein Anbieter seine Klassendateien nicht in Paketen ablegt. In
+diesem Fall müssten die Klassendateien in das aktuelle Verzeichnis
+oder nach <font color="#660099">c:\classes</font> kopiert werden.
+Das würde bei Klassendateien von mehr als einem Anbieter natürlich
+schnell zum Chaos führen, läßt sich aber nicht so
+einfach ändern. Es bieten sich zwei Handlungsalternativen an:
+<ul>
+<li>Wenn man die Pakete in unterschiedlichen Unterverzeichnissen ablegt,
+benötigen die Programme einen relativ langen und möglicherweise
+schwer zu pflegenden Klassenpfad, in dem alle benötigten Verzeichnisse
+verzeichnet sind.
+<li>Wenn man die »paketlosen« Dateien verschiedener Anbieter
+in unterschiedliche Unterverzeichnisse von <font color="#660099">c:\classes</font>
+legen will, müsste man dazu die Quelldateien um die entsprechenden
+<a href="index_p.html#ixb100622"><font color=#000080><tt>package</tt></font></a>-Anweisungen
+(siehe nachfolgenden Abschnitt) ergänzen.
+</ul>
+
+<p>
+Beide Varianten sind unbefriedigend, und es bleibt zu hoffen, dass
+die Anbieter von Java-Klassenbibliotheken sich verstärkt an die
+Namenskonventionen des Java-Teams halten werden.
+
+<!-- Section -->
+
+<a name="sectlevel3id013002004"></a>
+<h3>13.2.4 <a name="ixa100808">Erstellen eigener Pakete</a><a name="ixa100809"></a></h3>
+
+
+<!-- Section -->
+<a name="sectlevel4id013002004001"></a>
+<h4>Benannte Pakete </h4>
+
+<p>
+Bisher wurde nur gezeigt, wie man Klassen aus fremden Paketen verwendet,
+nicht aber, wie man selbst Pakete erstellt. Glücklicherweise
+ist das aber keine Aufgabe für Spezialisten, sondern sehr einfach
+mit Bordmitteln realisierbar.
+
+<p>
+Um eine Klasse einem ganz bestimmten Paket zuzuordnen, muss lediglich
+am Anfang des Quelltextes eine geeignete <a name="ixa100810"><a href="index_p.html#ixb100622"><font color=#000080><tt>package</tt></font></a></a>-Anweisung
+verwendet werden. Diese besteht (analog zur <a href="index_i.html#ixb100169"><font color=#000080><tt>import</tt></font></a>-Anweisung)
+aus dem Schlüsselwort <a href="index_p.html#ixb100622"><font color=#000080><tt>package</tt></font></a>
+und dem Namen des Pakets, dem die nachfolgende Klasse zugeordnet werden
+soll. Die <a href="index_p.html#ixb100622"><font color=#000080><tt>package</tt></font></a>-Anweisung
+muss als erste Anweisung in einer Quelldatei stehen, so dass der Compiler
+sie noch vor den <a href="index_i.html#ixb100169"><font color=#000080><tt>import</tt></font></a>-Anweisungen
+findet.
+
+<p>
+Der Aufbau und die Bedeutung der Paketnamen in der <a href="index_p.html#ixb100622"><font color=#000080><tt>package</tt></font></a>-Anweisung
+entspricht exakt dem der <a href="index_i.html#ixb100169"><font color=#000080><tt>import</tt></font></a>-Anweisung.
+Der Compiler löst ebenso wie beim <a href="index_i.html#ixb100169"><font color=#000080><tt>import</tt></font></a>
+den dort angegebenen hierarchischen Namen in eine Kette von Unterverzeichnissen
+auf, an deren Ende die Quelldatei steht. Neben der Quelldatei wird
+auch die Klassendatei in diesem Unterverzeichnis erstellt.
+
+<p>
+Da der Java-Compiler eingebundene Quelldateien, die noch nicht übersetzt
+sind, während der Übersetzung einer anderen Klasse automatisch
+mit übersetzt, ist das Erstellen eines neuen Pakets sehr einfach.
+Wir wollen uns ein Beispiel ansehen, bei dem zwei Pakete <font color="#000077"><tt>demo</tt></font>
+und <font color="#000077"><tt>demo.tools</tt></font> angelegt und
+die darin enthaltenen Klassen <font color="#000077"><tt>A</tt></font>,
+<font color="#000077"><tt>B</tt></font> und <font color="#000077"><tt>C</tt></font>
+in einer Klasse <font color="#000077"><tt>PackageDemo</tt></font>
+verwendet werden. Am einfachsten ist es, wie nachfolgend beschrieben
+vorzugehen.
+
+<p>
+Wir gehen davon aus, dass der <a name="ixa100811"><a href="index_c.html#ixb100143"><font color=#000080><tt>CLASSPATH</tt></font></a></a>
+das aktuelle Verzeichnis enthält (also beispielsweise den Inhalt
+».;c:\classes« hat), und legen im aktuellen Verzeichnis
+die Unterverzeichnisse <font color="#660099">demo</font> und <font color="#660099">demo\tools</font>
+an.
+<ul>
+<li>Zunächst wird im Unterverzeichnis <font color="#660099">demo</font>
+die Datei <font color="#660099">A.java</font> angelegt:
+<a name="listingid013003"></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">package</font> demo;
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> A
+<font color="#555555">004 </font>{
+<font color="#555555">005 </font> <font color="#0000AA">public</font> <font color="#006699">void</font> hello()
+<font color="#555555">006 </font> {
+<font color="#555555">007 </font> System.out.println(<font color="#0000FF">"Hier ist A"</font>);
+<font color="#555555">008 </font> }
+<font color="#555555">009 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/demo/A.java"><font color="#000055" size=-1>demo/A.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 13.3: Die Klasse A des Pakets demo</i></p>
+
+<p>
+Sie enthält die Anweisung <font color="#000077"><tt>package demo;</tt></font>,
+um anzuzeigen, dass die Klasse <font color="#000077"><tt>A</tt></font>
+zum Paket <font color="#000077"><tt>demo</tt></font> gehört.
+<li>Im Unterverzeichnis <font color="#660099">demo</font> wird weiterhin
+die Datei <font color="#660099">B.java</font> angelegt:
+<a name="listingid013004"></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">package</font> demo;
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> B
+<font color="#555555">004 </font>{
+<font color="#555555">005 </font> <font color="#0000AA">public</font> <font color="#006699">void</font> hello()
+<font color="#555555">006 </font> {
+<font color="#555555">007 </font> System.out.println(<font color="#0000FF">"Hier ist B"</font>);
+<font color="#555555">008 </font> }
+<font color="#555555">009 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/demo/B.java"><font color="#000055" size=-1>demo/B.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 13.4: Die Klasse B des Pakets demo</i></p>
+
+<p>
+Auch diese Quelldatei enthält die Anweisung <font color="#000077"><tt>package
+demo;</tt></font>, um anzuzeigen, dass die Klasse zum Paket <font color="#000077"><tt>demo</tt></font>
+gehört.
+<li>Im Unterverzeichnis <font color="#660099">demo\tools</font> wird
+die Datei <font color="#660099">C.java</font> angelegt:
+<a name="listingid013005"></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">package</font> demo.tools;
+<font color="#555555">002 </font>
+<font color="#555555">003 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> C
+<font color="#555555">004 </font>{
+<font color="#555555">005 </font> <font color="#0000AA">public</font> <font color="#006699">void</font> hello()
+<font color="#555555">006 </font> {
+<font color="#555555">007 </font> System.out.println(<font color="#0000FF">"Hier ist C"</font>);
+<font color="#555555">008 </font> }
+<font color="#555555">009 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/demo/tools/C.java"><font color="#000055" size=-1>demo/tools/C.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 13.5: Die Klasse C des Pakets demo.tools</i></p>
+
+<p>
+Diese Quelldatei enthält die Anweisung <font color="#000077"><tt>package
+demo.tools;</tt></font>, um anzuzeigen, dass die Klasse zum Paket
+<font color="#000077"><tt>demo.tools</tt></font> gehört.
+<li>Nun wird im Stammverzeichnis die Datei <font color="#660099">PackageDemo.java</font>
+angelegt:
+<a name="listingid013006"></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">import</font> demo.*;
+<font color="#555555">002 </font><font color="#0000AA">import</font> demo.tools.*;
+<font color="#555555">003 </font>
+<font color="#555555">004 </font><font color="#0000AA">public</font> <font color="#0000AA">class</font> PackageDemo
+<font color="#555555">005 </font>{
+<font color="#555555">006 </font> <font color="#0000AA">public</font> <font color="#0000AA">static</font> <font color="#006699">void</font> main(String[] args)
+<font color="#555555">007 </font> {
+<font color="#555555">008 </font> (<font color="#0000AA">new</font> A()).hello();
+<font color="#555555">009 </font> (<font color="#0000AA">new</font> B()).hello();
+<font color="#555555">010 </font> (<font color="#0000AA">new</font> C()).hello();
+<font color="#555555">011 </font> }
+<font color="#555555">012 </font>}</pre>
+</font>
+</td>
+<td valign=top align=right>
+<a href="../examples/PackageDemo.java"><font color="#000055" size=-1>PackageDemo.java</font></a></td>
+</tr>
+</table>
+<i>
+Listing 13.6: Verwendung der Klassen aus selbstdefinierten Paketen</i></p>
+</ul>
+
+<p>
+Ohne vorher die Klassen <font color="#000077"><tt>A</tt></font>, <font color="#000077"><tt>B</tt></font>
+oder <font color="#000077"><tt>C</tt></font> separat übersetzen
+zu müssen, kann nun einfach <font color="#000077"><tt>PackageDemo</tt></font>
+kompiliert werden. Der Compiler erkennt die Verwendung von <font color="#000077"><tt>A</tt></font>,
+<font color="#000077"><tt>B</tt></font> und <font color="#000077"><tt>C</tt></font>,
+findet die Paketverzeichnisse <font color="#660099">demo</font> und
+<font color="#660099">demo\tools</font> und erkennt, dass die Quellen
+noch nicht übersetzt wurden. Er erzeugt dann aus den <font color="#660099">.java</font>-Dateien
+<a name="ixa100812"></a> die zugehörigen <font color="#660099">.class</font>-Dateien
+<a name="ixa100813"></a> (in demselben Verzeichnis wie die Quelldateien),
+bindet sie ein und übersetzt schließlich die Klasse <font color="#000077"><tt>PackageDemo</tt></font>.
+Die Ausgabe des Programms ist:
+<font color="#333300">
+<pre>
+Hier ist A
+Hier ist B
+Hier ist C
+</pre>
+</font>
+
+
+<!-- Section -->
+<a name="sectlevel4id013002004002"></a>
+<h4>Das <a name="ixa100814">Default-Paket</a> </h4>
+
+<p>
+Würde nur dann ein eigenes Paket erzeugt werden, wenn die Quelldatei
+eine <a href="index_p.html#ixb100622"><font color=#000080><tt>package</tt></font></a>-Anweisung
+enthält, müsste man sich fragen, zu welchem Paket die Klassen
+gehören, in deren Quelldatei die <a href="index_p.html#ixb100622"><font color=#000080><tt>package</tt></font></a>-Anweisung
+fehlt (was ja erlaubt ist). Die Antwort auf diese Frage lautet, dass
+es in Java ein <i>Default-Paket</i> gibt, das genau dann verwendet
+wird, wenn keine andere Zuordnung getroffen wurde.
+
+<p>
+Das Default-Paket ist ein Zugeständnis an kleinere Programme
+oder einfache Programmierprojekte, bei denen es sich nicht lohnt,
+eigene Pakete anzulegen. Ohne Teile des Projektes in Unterverzeichnissen
+abzulegen und durch <a href="index_i.html#ixb100169"><font color=#000080><tt>import</tt></font></a>-
+und <a href="index_p.html#ixb100622"><font color=#000080><tt>package</tt></font></a>-Anweisungen
+unnötigen Aufwand zu treiben, ist es auf diese Weise möglich,
+Quelldateien einfach im aktuellen Verzeichnis abzulegen, dort zu kompilieren
+und automatisch einzubinden. Klassen des Default-Pakets können
+ohne explizite <a href="index_i.html#ixb100169"><font color=#000080><tt>import</tt></font></a>-Anweisung
+verwendet werden.
+<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>
+Ein Java-Compiler braucht laut Spezifikation nur ein einziges Default-Paket
+zur Verfügung zu stellen. Typischerweise wird dieses Konzept
+aber so realisiert, dass jedes unterschiedliche Verzeichnis die Rolle
+eines Default-Pakets übernimmt. Auf diese Weise lassen sich beliebig
+viele Default-Pakete erzeugen, indem bei Bedarf einfach ein neues
+Unterverzeichnis angelegt wird und die Quelldateien eines Java-Projektes
+dort abgelegt 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>
+
+
+<!-- Section -->
+<a name="sectlevel4id013002004003"></a>
+<h4>Das public-Attribut<a name="ixa100815"></a> </h4>
+
+<p>
+Es gibt noch eine wichtige Besonderheit bei der Deklaration von Klassen,
+die von anderen Klassen verwendet werden sollen. Damit eine Klasse
+<font color="#000077"><tt>A</tt></font> eine andere Klasse <font color="#000077"><tt>B</tt></font>
+einbinden darf, muss nämlich eine der beiden folgenden Bedingungen
+erfüllt sein:
+<ul>
+<li>Entweder gehören <font color="#000077"><tt>A</tt></font>
+und <font color="#000077"><tt>B</tt></font> zu demselben Paket oder
+<li>die Klasse <font color="#000077"><tt>B</tt></font> wurde als <a href="index_p.html#ixb100084"><font color=#000080><tt>public</tt></font></a>
+deklariert.
+</ul>
+<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>
+Wenn also nur Default-Pakete verwendet werden, spielt es keine Rolle,
+ob eine Klasse vom Typ <a href="index_p.html#ixb100084"><font color=#000080><tt>public</tt></font></a>
+ist, denn alle Klassen liegen in demselben Paket. Werden aber Klassen
+aus externen Paketen eingebunden, so gelingt das nur, wenn die einzubindende
+Klasse vom Typ <a href="index_p.html#ixb100084"><font color=#000080><tt>public</tt></font></a>
+ist. Andernfalls verweigert der Compiler deren Einbindung und bricht
+die Übersetzung mit einer Fehlermeldung ab.</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>
+<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="k100084.html"> < </a>
+<td width="7%" align=center bgcolor="#DDCC99"><a href="k100086.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>
|
