Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
1 Java ist auch eine Sprache
2 Sprachbeschreibung
3 Klassen und Objekte
4 Der Umgang mit Zeichenketten
5 Mathematisches
6 Eigene Klassen schreiben
7 Angewandte Objektorientierung
8 Exceptions
9 Die Funktionsbibliothek
10 Threads und nebenläufige Programmierung
11 Raum und Zeit
12 Datenstrukturen und Algorithmen
13 Dateien und Datenströme
14 Die eXtensible Markup Language (XML)
15 Grafische Oberflächen mit Swing
16 Grafikprogrammierung
17 Netzwerkprogrammierung
18 Verteilte Programmierung mit RMI und Web-Services
19 JavaServer Pages und Servlets
20 Applets
21 Midlets und die Java ME
22 Datenbankmanagement mit JDBC
23 Reflection und Annotationen
24 Logging und Monitoring
25 Sicherheitskonzepte
26 Java Native Interface (JNI)
27 Dienstprogramme für die Java-Umgebung
A Die Begleit-DVD
Stichwort

Download:
- ZIP, ca. 12,5 MB
Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Java ist auch eine Insel von Christian Ullenboom
Programmieren mit der Java Standard Edition Version 6
Buch: Java ist auch eine Insel

Java ist auch eine Insel
7., aktualisierte Auflage
geb., mit DVD (November 2007)
1.492 S., 49,90 Euro
Galileo Computing
ISBN 978-3-8362-1146-8
Pfeil 3 Klassen und Objekte
Pfeil 3.1 Objektorientierte Programmierung
Pfeil 3.1.1 Warum überhaupt OOP?
Pfeil 3.1.2 Wiederverwertbarkeit
Pfeil 3.2 Eigenschaften einer Klasse
Pfeil 3.2.1 Die Klasse Point
Pfeil 3.3 Die UML (Unified Modeling Language)
Pfeil 3.3.1 Hintergrund und Geschichte zur UML
Pfeil 3.3.2 Wichtige Diagrammtypen der UML
Pfeil 3.4 Neue Objekte erzeugen
Pfeil 3.4.1 Anlegen eines Exemplars einer Klasse mit dem new-Operator
Pfeil 3.4.2 Deklarieren von Referenzvariablen
Pfeil 3.4.3 Zugriff auf Variablen und Methoden mit dem ».«
Pfeil 3.4.4 Konstruktoren nutzen
Pfeil 3.4.5 Die API-Dokumentation
Pfeil 3.5 Import und Pakete
Pfeil 3.6 Mit Referenzen arbeiten
Pfeil 3.6.1 Die null-Referenz
Pfeil 3.6.2 Zuweisungen bei Referenzen
Pfeil 3.6.3 Funktionen mit nicht-primitiven Parametern
Pfeil 3.7 Identität und Gleichheit
Pfeil 3.7.1 Identität von Objekten
Pfeil 3.7.2 Gleichheit und die Methode equals()
Pfeil 3.8 Wrapper-Klassen und Autoboxing
Pfeil 3.8.1 Die Basisklasse Number für numerische Wrapper-Objekte
Pfeil 3.8.2 Die Klasse Integer
Pfeil 3.8.3 Unterschiedliche Ausgabeformate
Pfeil 3.8.4 Autoboxing: Boxing und Unboxing
Pfeil 3.8.5 Die Boolean-Klasse
Pfeil 3.8.6 Die Klassen Double und Float für Fließkommazahlen
Pfeil 3.9 Arrays
Pfeil 3.9.1 Deklaration von Arrays
Pfeil 3.9.2 Arrays mit Inhalt
Pfeil 3.9.3 Die Länge eines Arrays über das Attribut length
Pfeil 3.9.4 Zugriff auf die Elemente über den Index
Pfeil 3.9.5 Array-Objekte erzeugen
Pfeil 3.9.6 Fehler bei Arrays
Pfeil 3.9.7 Vorinitialisierte Arrays
Pfeil 3.9.8 Die erweiterte for-Schleife
Pfeil 3.9.9 Arrays mit nicht-primitiven Elementen
Pfeil 3.9.10 Mehrdimensionale Arrays
Pfeil 3.9.11 Die Wahrheit über die Array-Initialisierung
Pfeil 3.9.12 Mehrere Rückgabewerte
Pfeil 3.9.13 Methode mit variabler Argumentanzahl (Vararg)
Pfeil 3.9.14 Klonen kann sich lohnen – Arrays vermehren
Pfeil 3.9.15 Feldinhalte kopieren
Pfeil 3.9.16 Die Klasse Arrays zum Vergleichen, Füllen und Suchen
Pfeil 3.10 Der Einstiegspunkt für das Laufzeitsystem main()
Pfeil 3.10.1 Kommandozeilen-Argumente verarbeiten
Pfeil 3.10.2 Der Rückgabewert von main() und System.exit()
Pfeil 3.11 Eigene Pakete schnüren
Pfeil 3.11.1 Die package-Anweisung
Pfeil 3.11.2 Importieren von Klassen mit import
Pfeil 3.11.3 Hierarchische Strukturen und das Default-Package
Pfeil 3.11.4 Paketnamen
Pfeil 3.11.5 Klassen mit gleichen Namen in unterschiedlichen Paketen
Pfeil 3.11.6 Statisches Import
Pfeil 3.11.7 Eine Verzeichnisstruktur für eigene Projekte
Pfeil 3.12 Zum Weiterlesen


Galileo Computing - Zum Seitenanfang

3.4 Neue Objekte erzeugen Zur nächsten ÜberschriftZur vorigen Überschrift

Eine Klasse beschreibt also, wie ein Objekt aussehen soll. In einer Mengen- beziehungsweise Element-Beziehung ausgedrückt, entsprechen Objekte den Elementen und Klassen den Mengen, in denen die Objekte als Elemente enthalten sind. Diese Objekte haben Eigenschaften, die sich nutzen lassen. Wenn ein Punkt Koordinaten repräsentiert, wird es Möglichkeiten geben, diese Zustände zu erfragen und zu ändern.

Im Folgenden wollen wir untersuchen, wie sich von der Klasse Point zur Laufzeit Exemplare erzeugen lassen und wie der Zugriff auf die Eigenschaften der Point-Objekte aussieht.


Galileo Computing - Zum Seitenanfang

3.4.1 Anlegen eines Exemplars einer Klasse mit dem new-Operator Zur nächsten ÜberschriftZur vorigen Überschrift

Objekte müssen in Java immer ausdrücklich erzeugt werden. Dazu definiert die Sprache den new-Operator.


Beispiel Beispiel Anlegen eines Punkt-Objekts:

new java.awt.Point();

Hinter dem new-Operator folgt der Name der Klasse, von der ein Exemplar erzeugt werden soll. Der Klassenname ist hier voll qualifiziert angegeben, da sich Point in einem Paket java.awt befindet. (Ein Paket ist eine Gruppe zusammengehöriger Klassen. Wir werden später mit den import-Anweisungen sehen, dass Entwickler diese Schreibweise auch abkürzen können.) Hinter dem Klassennamen folgt ein Paar runde Klammern für den Konstruktoraufruf. Dieser ist eine Art Methodenaufruf, über den sich Werte für die Initialisierung des frischen Objektes übergeben lassen.

Das Ergebnis des new-Operators ist eine Referenz auf das neue Objekt. Diese Referenz lässt sich zum Beispiel an eine Methode übergeben.


Beispiel Beispiel Übergabe der Point-Referenz an println():

System.out.println( new java.awt.Point() );

Was passiert bei new?

Bekommt das Laufzeitsystem die Anfrage, ein Objekt mit new zu erzeugen, so reserviert es so viel Speicher, dass alle Objekt-Eigenschaften und Verwaltungsinformationen dort Platz haben. Ein Point-Objekt speichert die Koordinaten in zwei int-Werte, also sind mindestens 2 mal 4 Byte nötig. Den Speicherplatz nimmt die Laufzeitumgebung vom Heap. Der hat eine vordefinierte Maximalgröße, damit ein Java-Programm nicht beliebig viel Speicher vom Betriebssystem abgreifen kann, was die Maschine möglicherweise in den Ruin treibt. Ist das System nicht in der Lage, genügend Speicher bereitzustellen, wird der Garbage-Collector (GC) aufgerufen, um etwas aufzuräumen. Ist dann immer noch nicht ausreichend Speicher frei, generiert die Laufzeitumgebung einen OutOfMemoryError und bricht die Abarbeitung ab.

Konnte die Speicherverwaltung von Java freien Platz finden, ruft die Laufzeitumgebung den Konstruktor auf, der die Objektzustände initialisieren kann, und gibt anschließend eine Referenz auf das Objekt an das Programm zurück.


Hinweis Hinweis Bei der String-Konkatenation mit + ist ebenfalls der new-Operator für ein neues String-Objekt im Einsatz. Beim Ausdruck s + t für zwei Strings s und t generiert der Compiler selbstständig – die genaue Umsetzung ist je nach Compiler verschieden – zum Beispiel new StringBuilder().append(s).append(t).toString().

Des Weiteren kann auch die auf nativen Funktionen basierende Methode newInstance() vom Class- oder Constructor-Objekt ein neues Objekt erzeugen. Auch clone() aus Object kann ein neues Objekt als Kopie eines anderen Objekts erzeugen.



Galileo Computing - Zum Seitenanfang

3.4.2 Deklarieren von Referenzvariablen Zur nächsten ÜberschriftZur vorigen Überschrift

Mit new erzeugt das System das Objekt, aber die Referenz wird in der Regel zwischengespeichert, um fortlaufende Eigenschaften vom Objekt nutzen zu können.


Beispiel Beispiel Deklariere die Variable p vom Typ java.awt.Point. Belege p mit einer Referenz auf ein neues Objekt.

java.awt.Point p; 
p = new java.awt.Point();

Die Typen müssen kompatibel sein! So ist es nicht möglich, wenn zum Beispiel die Variable p als String deklariert wäre.


Den Verweis auf ein Objekt speichert eine Referenzvariable. Damit speichert eine Variable entweder einen einfachen Wert oder einen Verweis auf ein Objekt. Im Fall von lokalen Variablen ist auch eine Referenzvariable zu Beginn uninitialisiert. Würde es sich um eine Objekt- oder Klassenvariable handeln, wäre die Variable mit der Null-Referenz (null) initialisiert, die auf kein Objekt verweist.

Die Deklaration der Variablen p und die separate Erzeugung eines Exemplars der Klasse Point lassen sich, wie bei der Deklaration primitiver Datentypen, auch kombinieren.


Beispiel Beispiel Deklaration mit Initialisierung

double          pi = 3.1415926535; 
java.awt.Point  p  = new java.awt.Point();

Eclipse
Keyboard Strg + Keyboard 1 ermöglicht es, entweder eine neue lokale Variable oder eine Objektvariable für den Ausdruck anzulegen.


Galileo Computing - Zum Seitenanfang

3.4.3 Zugriff auf Variablen und Methoden mit dem ».« Zur nächsten ÜberschriftZur vorigen Überschrift

Die in einer Klasse deklarierten Variablen heißen »Objektvariablen«, beziehungsweise »Exemplar-, Instanz- oder Ausprägungsvariablen«. Wird ein Objekt geschaffen, dann erhält es seinen eigenen Satz von Objektvariablen. [Es gibt auch den Fall, dass sich mehrere Objekte eine Variable teilen, so genannte statische Variablen. Diesen Fall werden wir später betrachten. ] Sie bilden den Zustand des Objekts.

Der Punktoperator ».« erlaubt auf Objekten den Zugriff auf die Methoden oder Variablen. Er steht zwischen einem Ausdruck, der eine Referenz zurückgibt, [Sprachlich wird diese Formulierung gerne mit »Rechts steht eine Referenz« abgekürzt. ] und der Objekteigenschaft. Welche Möglichkeiten eine Klasse genau gibt, erfährt der Entwickler in der API-Dokumentation.


Beispiel Beispiel Eine Variable p referenziert ein neues java.awt.Point-Objekt. Die Objektvariablen x und y sollen initialisiert werden.

java.awt.Point p = new java.awt.Point(); 
p.x = 12; 
p.y = 45 + p.x;

Eclipse
Keyboard Strg + Leertaste zeigt an, welche Eigenschaften eine Referenz ermöglicht. Eine Auswahl mit Keyboard Return wählt die Eigenschaft aus und setzt insbesondere bei Funktionen den Cursor zwischen das Klammerpaar.

Ein Methodenaufruf gestaltet sich genauso einfach wie ein Variablenzugriff. Hinter dem Ausdruck mit der Referenz folgt nach dem Punkt der Methodenname.

Das nachfolgende Beispiel erzeugt einen Punkt, belegt ihn mit Werten und gibt eine String-Repräsentation des Objektes aus.

Listing 3.1 MyPoint.java

class MyPoint 
{ 
  public static void main( String[] args ) 
  { 
    java.awt.Point p = new java.awt.Point(); 
    p.x = p.y = 12; 
    p.setLocation( -3, 2 ); 
    System.out.println( p.toString() );   // java.awt.Point[x=-3,y=2] 
 
//    alternativ 
//    System.out.println( p ); 
  } 
}

Die letzte Anweisung ist gültig, da println() jedes beliebige Objekt als Argument akzeptiert und auf diesem Objekt dann automatisch die toString()-Methode aufruft.

Abbildung 3.2 Die Abhängigkeit, dass MyPoint einen java.awt.Point nutzt, zeigt das UML-Diagramm mit einer gestrichelten Linie an. Die Parameterliste und Rückgabe sind in UML optional und hier nicht dargestellt.

Eclipse
Keyboard Strg + Leertaste auf einem Eigenschaftennamen (oder bei einer Funktion im Klammerpaar) zeigt die API-Dokumentation in einem kleinen Fenster an. Dazu muss allerdings das Java SDK eingebunden sein – das JRE reicht nicht, da bei ihm keine Dokumentation zu finden ist.

Nach dem Punkt geht’s weiter

Die Funktion toString() liefert als Ergebnis ein String-Objekt, das den Zustand des Punkts preisgibt.

java.awt.Point  p = new java.awt.Point(); 
String          s = p.toString(); 
System.out.println( s );                     // java.awt.Point[x=0,y=0]

Das String-Objekt besitzt selbst wieder Methoden. Eine davon ist length(), die die Länge der Zeichenkette liefert.

System.out.println( s.length() );            // 23

Das Erfragen des String-Objekts und dessen Länge können wir zu einer Anweisung verbinden – p sei wieder unser Point-Objekt:

System.out.println( p.toString().length() ); // 23

Objekterzeugung ohne Variablenzuweisung

Bei der Nutzung von Objekteigenschaften muss der Typ links vom Punkt immer eine Referenz sein. Im Prinzip funktioniert auch Folgendes:

new java.awt.Point().x = 1;

Dies ist hier allerdings unsinnig, da zwar das Objekt erzeugt und ein Attribut gesetzt wird, anschließend das Objekt aber für den Garbage-Collector wieder Freiwild ist. Interessant ist die Anwendung zum Beispiel bei einem File-Objekt, um etwa herauszufinden, wie groß eine Datei ist:

long size = new java.io.File( "file.txt" ).length();

Galileo Computing - Zum Seitenanfang

3.4.4 Konstruktoren nutzen Zur nächsten ÜberschriftZur vorigen Überschrift

Werden Objekte mit dem new-Operator angelegt, so wird ein Konstruktor aufgerufen, eine Art Methode mit besonderer Signatur. [Ein Konstruktor hat keinen Rückgabetyp und trägt auch denselben Namen wie die Klasse. ] Bei der Schaffung eines Objekts sollen in der Regel die Objektvariablen initialisiert werden. Diese Initialisierung wird dazu in den Konstruktor gesetzt, um sicherzustellen, dass das neue Objekt einen sinnvollen Anfangszustand aufweist.

Ein Konstruktor ohne Argumente ist der Standard-Konstruktor (auch »Default-Konstruktor«, selten auch »No-Arg-Konstruktor« genannt).


Beispiel Beispiel Die folgenden Zeilen erzeugen schlussendlich zwei Point-Objekte mit denselben Koordinaten. Die Variablen p und q referenzieren jedoch zwei völlig getrennte Objekte; lediglich die Belegung der x- und y-Koordinaten ist bei den beiden Objekten »zufällig« gleich.

java.awt.Point p = new java.awt.Point(); 
p.setLocation( 10, 10 ); 
java.awt.Point q = new java.awt.Point( 10, 10 );

Der erste Konstruktor ist der Standard-Konstruktor, der zweite ein parametrisierter Konstruktor.



Galileo Computing - Zum Seitenanfang

3.4.5 Die API-Dokumentation topZur vorigen Überschrift

Die wichtigste Informationsquelle für Programmierer ist die API-Dokumentation von Sun. Zu unserem Punkt können wir dort lesen, dass dieser eine Funktion setLocation() besitzt, die Variablen x und y definiert und einen Konstruktor anbietet, der zwei Ganzzahlen annimmt.

Die Dokumentation ist kein Teil der Standardinstallation einer Laufzeitumgebung – dafür ist die Hilfe zu groß. Wer über eine permanente Internetverbindung verfügt, kann die Dokumentation online unter http://tutego.com/go/javaapi lesen oder sie extra von der Sun-Seite http://java.sun.com/javase/downloads/index.jsp bei »Java SE 6 Documentation« herunterladen und als Sammlung von HTML-Dokumenten auspacken.

Eclipse
In Eclipse kann mit Keyboard F1 die API-Dokumentation aufgerufen werden, denn Eclipse verweist auf die Sun-Seiten im Netz.

API-Dokumentation im HTML-Help Format

Die Sun-Dokumentation als Loseblattsammlung hat einen Nachteil, der sich im Programmieralltag bemerkbar macht: Sie lässt sich nur ungenügend durchsuchen. Da die Webseiten statisch sind, lässt sich nicht einfach nach Methoden forschen, die auf »listener« enden. Franck Allimant (http://tutego.com/go/allimant) übersetzt regelmäßig die HTML-Dokumentation von Sun in das Format Windows HTML-Help (CHM-Dateien), das auch unter Unix und Mac OS X mit der Open-Source-Software http://xchm.sourceforge.net/ gelesen werden kann. Neben den komprimierten Hilfe-Dateien lassen sich auch Sprach- und JVM-Spezifikation sowie die API-Dokumentation der Enterprise Edition und der Servlets im Speziellen beziehen.

Abbildung 3.3 API-Dokumentation mit der Windows-Hilfe



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






<< zurück



Copyright © Galileo Press 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de