Objektorientierte Programmierung und Klassen

Objektorientierte Programmierung und Klassen Gerd Bohlender Institut f¨ ur Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik ...
Author: Manfred Krämer
1 downloads 2 Views 216KB Size
Objektorientierte Programmierung und Klassen Gerd Bohlender Institut f¨ ur Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java

16.5.07

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

1 / 18

¨ Ubersicht 1

Die Philosophie

2

Definition von Klassen

3

Datenkapselung

4

Instanzen

5

Zugriff auf Elemente

6

Konstruktoren

7

Speicherverwaltung Garbage Collection finalize Lebenszyklen von Klassen und Instanzen

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

2 / 18

Die Philosophie Paradigmen: (1) Generalisierung: Gemeinsame Strukturen von Objekten werden in Superklassen zusammengefasst. (2) Vererbung: Eigenschaften einer Superklasse werden automatisch an eine Subklasse vererbt.

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

3 / 18

Die Philosophie Paradigmen: (1) Generalisierung: Gemeinsame Strukturen von Objekten werden in Superklassen zusammengefasst. (2) Vererbung: Eigenschaften einer Superklasse werden automatisch an eine Subklasse vererbt. (3) Daten-Kapselung: Variablen und Methoden werden in einem Objekt zusammengefasst. Die interne Struktur wird vor dem Benutzer versteckt, der Zugriff erfolgt nur u ¨ber genau definierte Schnittstellen.

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

3 / 18

Die Philosophie Paradigmen: (1) Generalisierung: Gemeinsame Strukturen von Objekten werden in Superklassen zusammengefasst. (2) Vererbung: Eigenschaften einer Superklasse werden automatisch an eine Subklasse vererbt. (3) Daten-Kapselung: Variablen und Methoden werden in einem Objekt zusammengefasst. Die interne Struktur wird vor dem Benutzer versteckt, der Zugriff erfolgt nur u ¨ber genau definierte Schnittstellen. (4) Polymorphie: Eine Methode kann in verschiedenen Subklassen individuell angepasst werden.

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

3 / 18

Die Philosophie Paradigmen: (1) Generalisierung: Gemeinsame Strukturen von Objekten werden in Superklassen zusammengefasst. (2) Vererbung: Eigenschaften einer Superklasse werden automatisch an eine Subklasse vererbt. (3) Daten-Kapselung: Variablen und Methoden werden in einem Objekt zusammengefasst. Die interne Struktur wird vor dem Benutzer versteckt, der Zugriff erfolgt nur u ¨ber genau definierte Schnittstellen. (4) Polymorphie: Eine Methode kann in verschiedenen Subklassen individuell angepasst werden. Vorteile Es entsteht weniger Quelltext. Es bestehen weniger Fehlerm¨oglichkeiten. Das Programm erh¨alt eine bessere Strukturierung. Der Quelltext ist besser wartbar. G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

3 / 18

Die Philosophie Paradigmen: (1) Generalisierung: Gemeinsame Strukturen von Objekten werden in Superklassen zusammengefasst. (2) Vererbung: Eigenschaften einer Superklasse werden automatisch an eine Subklasse vererbt. (3) Daten-Kapselung: Variablen und Methoden werden in einem Objekt zusammengefasst. Die interne Struktur wird vor dem Benutzer versteckt, der Zugriff erfolgt nur u ¨ber genau definierte Schnittstellen. (4) Polymorphie: Eine Methode kann in verschiedenen Subklassen individuell angepasst werden. Vorteile Es entsteht weniger Quelltext. Es bestehen weniger Fehlerm¨oglichkeiten. Das Programm erh¨alt eine bessere Strukturierung. Der Quelltext ist besser wartbar. G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

3 / 18

Die Philosophie Beispiel Superklasse

6

6

6

Subklasse

6

Lebewesen

Tiere

Subklasse

6

6

...

G. Bohlender (IANM – UNI Karlsruhe)

6

OOP und Klassen

Pflanzen

6

...

16.5.07

4 / 18

Definition von Klassen

Syntax Modifizierer class Bezeichner {Elementliste} Die Elementliste besteht aus Datenelementen (d. h. Variablen) und Methoden (d.h. Funktionen), die diese Daten berarbeiten (vgl. in Pascal: record und in C/C++: struct, class).

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

5 / 18

Definition von Klassen

Syntax Modifizierer class Bezeichner {Elementliste} Die Elementliste besteht aus Datenelementen (d. h. Variablen) und Methoden (d.h. Funktionen), die diese Daten berarbeiten (vgl. in Pascal: record und in C/C++: struct, class). Zur Datenkapselung kann die Sichtbarkeit der Elemente mit Hilfe von vorangestellten Modifizierern geregelt werden (siehe n¨achster Abschnitt).

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

5 / 18

Definition von Klassen

Syntax Modifizierer class Bezeichner {Elementliste} Die Elementliste besteht aus Datenelementen (d. h. Variablen) und Methoden (d.h. Funktionen), die diese Daten berarbeiten (vgl. in Pascal: record und in C/C++: struct, class). Zur Datenkapselung kann die Sichtbarkeit der Elemente mit Hilfe von vorangestellten Modifizierern geregelt werden (siehe n¨achster Abschnitt).

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

5 / 18

Datenkapselung M¨ogliche Modifizierer nichts

public private protected

Standard-Rechte, auch friendly genannt. Element kann u. a. in der Klasse selber sowie in allen Klassen des gleichen Pakets verwendet werden. Element kann von jeder Klasse verwendet werden. Element kann nur von der eigenen Klasse verwendet werden. sp¨ater . . .

Datenelemente werden aus Gr¨ unden der Datenkapselung meistens mit dem Modifizierer private versehen.

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

6 / 18

Datenkapselung M¨ogliche Modifizierer nichts

public private protected

Standard-Rechte, auch friendly genannt. Element kann u. a. in der Klasse selber sowie in allen Klassen des gleichen Pakets verwendet werden. Element kann von jeder Klasse verwendet werden. Element kann nur von der eigenen Klasse verwendet werden. sp¨ater . . .

Datenelemente werden aus Gr¨ unden der Datenkapselung meistens mit dem Modifizierer private versehen. Die Klasse selber darf nur Standardrechte oder public–Rechte besitzen.

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

6 / 18

Datenkapselung M¨ogliche Modifizierer nichts

public private protected

Standard-Rechte, auch friendly genannt. Element kann u. a. in der Klasse selber sowie in allen Klassen des gleichen Pakets verwendet werden. Element kann von jeder Klasse verwendet werden. Element kann nur von der eigenen Klasse verwendet werden. sp¨ater . . .

Datenelemente werden aus Gr¨ unden der Datenkapselung meistens mit dem Modifizierer private versehen. Die Klasse selber darf nur Standardrechte oder public–Rechte besitzen. In einer Datei d¨ urfen mehrere Klassen definiert werden, jedoch darf nur eine davon public–Rechte besitzen. Diese Klasse muss den gleichen Namen wie die Datei tragen. G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

6 / 18

Datenkapselung M¨ogliche Modifizierer nichts

public private protected

Standard-Rechte, auch friendly genannt. Element kann u. a. in der Klasse selber sowie in allen Klassen des gleichen Pakets verwendet werden. Element kann von jeder Klasse verwendet werden. Element kann nur von der eigenen Klasse verwendet werden. sp¨ater . . .

Datenelemente werden aus Gr¨ unden der Datenkapselung meistens mit dem Modifizierer private versehen. Die Klasse selber darf nur Standardrechte oder public–Rechte besitzen. In einer Datei d¨ urfen mehrere Klassen definiert werden, jedoch darf nur eine davon public–Rechte besitzen. Diese Klasse muss den gleichen Namen wie die Datei tragen. G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

6 / 18

Beispiel zur Klassendefinition und Datenkapselung Nachfolgend wird der neue Datentyp Point definiert. class Point { private double x,y; // gesch¨ utzt vor unberecht. Zugriff public double getx () { return x; } public double gety () { return y; } void move (double dx, double dy) { x += dx; y += dy; }

}

public static void main (String[] args) { Point p = new Point (); // bildet Instanz der Klasse } // Point durch Aufruf des // Standardkonstruktors // --> siehe Kapitel 11.4

Achtung Unterscheidung zwischen Klasse und Instanz!

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

7 / 18

Beispiel zur Klassendefinition und Datenkapselung Nachfolgend wird der neue Datentyp Point definiert. class Point { private double x,y; // gesch¨ utzt vor unberecht. Zugriff public double getx () { return x; } public double gety () { return y; } void move (double dx, double dy) { x += dx; y += dy; }

}

public static void main (String[] args) { Point p = new Point (); // bildet Instanz der Klasse } // Point durch Aufruf des // Standardkonstruktors // --> siehe Kapitel 11.4

Achtung Unterscheidung zwischen Klasse und Instanz!

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

7 / 18

Instanzen Klasse Instanz

Datentyp, es wird noch kein Speicher f¨ ur Komponenten reserviert. Variable des Datentyps, auch Objekt genannt es wird f¨ ur Komponenten Speicher reserviert (→ Instanzvariablen, Instanz–Methoden).

Von einer Klasse k¨onnen viele Instanzen (bzw. Objekte) gebildet werden. Die Instanzen sind dann zwar vom selben Datentyp, belegen aber nicht die selben Speicherbereiche. Dadurch sind sie voneinander unabh¨angig handhabbar. Eine Ausnahme bilden Komponenten mit dem Modifizierer static. Diese werden f¨ ur die gesamte Klasse nur einmal angelegt, unabh¨angig davon, ob keine, eine oder mehrere Instanz(en) der Klasse gebildet wurden (→ Klassenvariablen, Klassenmethoden).

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

8 / 18

Instanzen Klasse Instanz

Datentyp, es wird noch kein Speicher f¨ ur Komponenten reserviert. Variable des Datentyps, auch Objekt genannt es wird f¨ ur Komponenten Speicher reserviert (→ Instanzvariablen, Instanz–Methoden).

Von einer Klasse k¨onnen viele Instanzen (bzw. Objekte) gebildet werden. Die Instanzen sind dann zwar vom selben Datentyp, belegen aber nicht die selben Speicherbereiche. Dadurch sind sie voneinander unabh¨angig handhabbar. Eine Ausnahme bilden Komponenten mit dem Modifizierer static. Diese werden f¨ ur die gesamte Klasse nur einmal angelegt, unabh¨angig davon, ob keine, eine oder mehrere Instanz(en) der Klasse gebildet wurden (→ Klassenvariablen, Klassenmethoden).

Achtung Im Gegensatz zu C++ ist keine separate Deklaration und Definition der Methoden m¨oglich! G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

8 / 18

Instanzen Klasse Instanz

Datentyp, es wird noch kein Speicher f¨ ur Komponenten reserviert. Variable des Datentyps, auch Objekt genannt es wird f¨ ur Komponenten Speicher reserviert (→ Instanzvariablen, Instanz–Methoden).

Von einer Klasse k¨onnen viele Instanzen (bzw. Objekte) gebildet werden. Die Instanzen sind dann zwar vom selben Datentyp, belegen aber nicht die selben Speicherbereiche. Dadurch sind sie voneinander unabh¨angig handhabbar. Eine Ausnahme bilden Komponenten mit dem Modifizierer static. Diese werden f¨ ur die gesamte Klasse nur einmal angelegt, unabh¨angig davon, ob keine, eine oder mehrere Instanz(en) der Klasse gebildet wurden (→ Klassenvariablen, Klassenmethoden).

Achtung Im Gegensatz zu C++ ist keine separate Deklaration und Definition der Methoden m¨oglich! G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

8 / 18

Zugriff auf Elemente Erinnerung: Syntax Modifizierer class Bezeichner {Elementliste} Elementvariablen und Elementmethoden werden auch unter dem Begriff Komponenten zusammengefasst. Innerhalb der Klasse ist der Zugriff auf alle Komponenten erlaubt, und zwar einfach durch Angabe des entsprechenden Bezeichners. Wird der Bezeichner durch eine gleichnamige lokale Variable verdeckt, kann mit this.Bezeichner auf die Komponenten der gerade aktiven Instanz zugegriffen werden. this ist dabei eine Referenz auf die momentan betrachtete Instanz.

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

9 / 18

Zugriff auf Elemente Erinnerung: Syntax Modifizierer class Bezeichner {Elementliste} Elementvariablen und Elementmethoden werden auch unter dem Begriff Komponenten zusammengefasst. Innerhalb der Klasse ist der Zugriff auf alle Komponenten erlaubt, und zwar einfach durch Angabe des entsprechenden Bezeichners. Wird der Bezeichner durch eine gleichnamige lokale Variable verdeckt, kann mit this.Bezeichner auf die Komponenten der gerade aktiven Instanz zugegriffen werden. this ist dabei eine Referenz auf die momentan betrachtete Instanz.

Achtung this ist nur f¨ ur Instanz-, nicht f¨ ur statische Variablen und Methoden zul¨assig, da es von ihnen nicht mehrere zu unterscheidende Werte geben kann. G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

9 / 18

Zugriff auf Elemente Erinnerung: Syntax Modifizierer class Bezeichner {Elementliste} Elementvariablen und Elementmethoden werden auch unter dem Begriff Komponenten zusammengefasst. Innerhalb der Klasse ist der Zugriff auf alle Komponenten erlaubt, und zwar einfach durch Angabe des entsprechenden Bezeichners. Wird der Bezeichner durch eine gleichnamige lokale Variable verdeckt, kann mit this.Bezeichner auf die Komponenten der gerade aktiven Instanz zugegriffen werden. this ist dabei eine Referenz auf die momentan betrachtete Instanz.

Achtung this ist nur f¨ ur Instanz-, nicht f¨ ur statische Variablen und Methoden zul¨assig, da es von ihnen nicht mehrere zu unterscheidende Werte geben kann. G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

9 / 18

Zugriff auf Elemente Beispiel zu this public class Point2{ private double x,y; // Instanzvariablen public double getx () { return x; } public double gety () { return y; } void move(double x, double y){ this.x = x; // Ueberschreiben der Inst.var. this.y = y; // mit den gleichnamigen Var. x,y } public static void main (String s){ Point2 p2 = new Point2(); // Instanz erzeugen } } G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

10 / 18

Zugriff auf Elemente Außerhalb der Klasse, d.h. in einer anderen Klasse, ist der Zugriff nur auf sichtbare Komponenten erlaubt. Diese sind folglich mit o¨ffentlichen Zugriffsrechten bzw. f¨ ur den Fall, dass sich die Klasse im gleichen Verzeichnis befindet, mit Standardrechten ausgestattet. Syntax Klassenname.Komponenten Instanzname.Komponenten

G. Bohlender (IANM – UNI Karlsruhe)

bei Klassenkomponenten bei Instanzkomponenten

OOP und Klassen

16.5.07

11 / 18

Zugriff auf Elemente Außerhalb der Klasse, d.h. in einer anderen Klasse, ist der Zugriff nur auf sichtbare Komponenten erlaubt. Diese sind folglich mit o¨ffentlichen Zugriffsrechten bzw. f¨ ur den Fall, dass sich die Klasse im gleichen Verzeichnis befindet, mit Standardrechten ausgestattet. Syntax Klassenname.Komponenten Instanzname.Komponenten

bei Klassenkomponenten bei Instanzkomponenten

Beispiel (erweiterte Klasse Point2) ... // im Hauptprogramm: System.out.println ("x-Koodinate von p" + p.getx()); System.out.println (p.x); // syntaktisch richtig, ... // aber Zugriff verboten!

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

11 / 18

Zugriff auf Elemente Außerhalb der Klasse, d.h. in einer anderen Klasse, ist der Zugriff nur auf sichtbare Komponenten erlaubt. Diese sind folglich mit o¨ffentlichen Zugriffsrechten bzw. f¨ ur den Fall, dass sich die Klasse im gleichen Verzeichnis befindet, mit Standardrechten ausgestattet. Syntax Klassenname.Komponenten Instanzname.Komponenten

bei Klassenkomponenten bei Instanzkomponenten

Beispiel (erweiterte Klasse Point2) ... // im Hauptprogramm: System.out.println ("x-Koodinate von p" + p.getx()); System.out.println (p.x); // syntaktisch richtig, ... // aber Zugriff verboten!

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

11 / 18

Konstruktoren Beim letzten Beispiel gab es die M¨oglichkeit, Werte f¨ ur die Variablen x und y u ¨ber die Methode move vorzugeben. Beispiel (erweiterte Klasse Point2) ... // im Hauptprogramm: Point2 p2 = new Point2(); // erzeuge Instanz p2.move(1000, 1000); // belegt x,y mit 1000 ...

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

12 / 18

Konstruktoren Beim letzten Beispiel gab es die M¨oglichkeit, Werte f¨ ur die Variablen x und y u ¨ber die Methode move vorzugeben. Beispiel (erweiterte Klasse Point2) ... // im Hauptprogramm: Point2 p2 = new Point2(); // erzeuge Instanz p2.move(1000, 1000); // belegt x,y mit 1000 ...

Nachteil Die Methode move muss f¨ ur jedes neue Objekt aufgerufen werden! Besser ist die Verwendung eines Konstruktors.

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

12 / 18

Konstruktoren Beim letzten Beispiel gab es die M¨oglichkeit, Werte f¨ ur die Variablen x und y u ¨ber die Methode move vorzugeben. Beispiel (erweiterte Klasse Point2) ... // im Hauptprogramm: Point2 p2 = new Point2(); // erzeuge Instanz p2.move(1000, 1000); // belegt x,y mit 1000 ...

Nachteil Die Methode move muss f¨ ur jedes neue Objekt aufgerufen werden! Besser ist die Verwendung eines Konstruktors.

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

12 / 18

Konstruktoren

Konstruktoren erlauben es sehr komfortabel Instanzvariablen schon bei der Erzeugung einer Instanz/eines Objektes zu initialisieren. Ein Konstruktor ist eine spezielle Methode ohne Ergebnistyp (auch nicht void), die den gleichen Namen wie die Klasse tr¨agt.

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

13 / 18

Konstruktoren

Konstruktoren erlauben es sehr komfortabel Instanzvariablen schon bei der Erzeugung einer Instanz/eines Objektes zu initialisieren. Ein Konstruktor ist eine spezielle Methode ohne Ergebnistyp (auch nicht void), die den gleichen Namen wie die Klasse tr¨agt. Konstruktoren k¨onnen u urfen mehrere ¨berladen werden, d.h. es d¨ Konstuktoren existieren.

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

13 / 18

Konstruktoren

Konstruktoren erlauben es sehr komfortabel Instanzvariablen schon bei der Erzeugung einer Instanz/eines Objektes zu initialisieren. Ein Konstruktor ist eine spezielle Methode ohne Ergebnistyp (auch nicht void), die den gleichen Namen wie die Klasse tr¨agt. Konstruktoren k¨onnen u urfen mehrere ¨berladen werden, d.h. es d¨ Konstuktoren existieren. Konstruktoren ohne Argumente werden Standardkonstruktoren genannt. Werden keine Konstruktoren definiert, so erzeugt der Kompiler automatisch den Standardkonstruktor, andernfalls nicht.

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

13 / 18

Konstruktoren

Konstruktoren erlauben es sehr komfortabel Instanzvariablen schon bei der Erzeugung einer Instanz/eines Objektes zu initialisieren. Ein Konstruktor ist eine spezielle Methode ohne Ergebnistyp (auch nicht void), die den gleichen Namen wie die Klasse tr¨agt. Konstruktoren k¨onnen u urfen mehrere ¨berladen werden, d.h. es d¨ Konstuktoren existieren. Konstruktoren ohne Argumente werden Standardkonstruktoren genannt. Werden keine Konstruktoren definiert, so erzeugt der Kompiler automatisch den Standardkonstruktor, andernfalls nicht. Konstruktoren k¨onnen gegenseitig mittels this aufgerufen werden. Dieser Aufruf ist allerdings in jedem Konstruktor nur als erste Anweisung erlaubt.

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

13 / 18

Konstruktoren

Konstruktoren erlauben es sehr komfortabel Instanzvariablen schon bei der Erzeugung einer Instanz/eines Objektes zu initialisieren. Ein Konstruktor ist eine spezielle Methode ohne Ergebnistyp (auch nicht void), die den gleichen Namen wie die Klasse tr¨agt. Konstruktoren k¨onnen u urfen mehrere ¨berladen werden, d.h. es d¨ Konstuktoren existieren. Konstruktoren ohne Argumente werden Standardkonstruktoren genannt. Werden keine Konstruktoren definiert, so erzeugt der Kompiler automatisch den Standardkonstruktor, andernfalls nicht. Konstruktoren k¨onnen gegenseitig mittels this aufgerufen werden. Dieser Aufruf ist allerdings in jedem Konstruktor nur als erste Anweisung erlaubt.

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

13 / 18

Konstruktoren Beispiel public Point (double x, double y) { // 1.Konstruktor this.x = x; this.y = y; } public Point () { // 2.Konstruktor = Standardkonstruktor x = 0; // alternativ ueber Aufruf y = 0; // des 1.Konstruktors: this (0,0); } public static void main (String[] args) { // im Hauptprogramm Point q = new Point (1,2); // Aufruf des 1.Konstr. Point r = new Point (); // Aufruf des 2.Konstr. }

Mittels new wird der ben¨otigte Speicher beschafft, und die angegebenen Anweisungen im Konstruktor ausgef¨ uhrt (evtl. noch weitere Operationen). G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

14 / 18

Konstruktoren Beispiel public Point (double x, double y) { // 1.Konstruktor this.x = x; this.y = y; } public Point () { // 2.Konstruktor = Standardkonstruktor x = 0; // alternativ ueber Aufruf y = 0; // des 1.Konstruktors: this (0,0); } public static void main (String[] args) { // im Hauptprogramm Point q = new Point (1,2); // Aufruf des 1.Konstr. Point r = new Point (); // Aufruf des 2.Konstr. }

Mittels new wird der ben¨otigte Speicher beschafft, und die angegebenen Anweisungen im Konstruktor ausgef¨ uhrt (evtl. noch weitere Operationen). G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

14 / 18

Garbage Collection Im Gegensatz zu Pascal (new, delete) und C++ (new, delete, Konstruktor, Destruktor) gibt es in Java im Wesentlichen kein Gegenst¨ uck zum Konstruktor. Der Speicher von nicht mehr referenzierten Objekten wird fr¨ uher oder sp¨ater automatisch freigegeben, im schlimmsten Fall erst am Programmende → Garbage collection. Syntax System.gc();

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

15 / 18

Garbage Collection Im Gegensatz zu Pascal (new, delete) und C++ (new, delete, Konstruktor, Destruktor) gibt es in Java im Wesentlichen kein Gegenst¨ uck zum Konstruktor. Der Speicher von nicht mehr referenzierten Objekten wird fr¨ uher oder sp¨ater automatisch freigegeben, im schlimmsten Fall erst am Programmende → Garbage collection. Syntax System.gc(); Beispiel 1 String s = "blub"; ... s = null; // Ref. auf "blub" geht verloren, // sofern keine weitere Referenz ex.

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

15 / 18

Garbage Collection Im Gegensatz zu Pascal (new, delete) und C++ (new, delete, Konstruktor, Destruktor) gibt es in Java im Wesentlichen kein Gegenst¨ uck zum Konstruktor. Der Speicher von nicht mehr referenzierten Objekten wird fr¨ uher oder sp¨ater automatisch freigegeben, im schlimmsten Fall erst am Programmende → Garbage collection. Syntax System.gc(); Beispiel 1 String s = "blub"; ... s = null; // Ref. auf "blub" geht verloren, // sofern keine weitere Referenz ex.

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

15 / 18

Garbage Collection

Beispiel 2 class Demo { } ... Demo d = new Demo(); //Instanz der Klasse Demo ... d = new Demo(); //neue Instanz, alte geht verloren

Achtung Selbst beim expliziten Aufruf des Garbage collectors muss der Speicher nicht komplett freigegeben werden!

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

16 / 18

Garbage Collection

Beispiel 2 class Demo { } ... Demo d = new Demo(); //Instanz der Klasse Demo ... d = new Demo(); //neue Instanz, alte geht verloren

Achtung Selbst beim expliziten Aufruf des Garbage collectors muss der Speicher nicht komplett freigegeben werden!

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

16 / 18

finalize

Sind weitere Aufr¨aumarbeiten wie das Z¨ahlen lebender Objekte, Abbau der Internetverbindung usw. n¨otig, dann kann man eine Methode finalize() definieren. Diese wird aufgerufen, bevor ein Objekt vom Garbage collector freigegeben wurde. Syntax protected void finalize () throws Throwable { ... }

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

17 / 18

finalize

Sind weitere Aufr¨aumarbeiten wie das Z¨ahlen lebender Objekte, Abbau der Internetverbindung usw. n¨otig, dann kann man eine Methode finalize() definieren. Diese wird aufgerufen, bevor ein Objekt vom Garbage collector freigegeben wurde. Syntax protected void finalize () throws Throwable { ... }

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

17 / 18

Lebenszyklen von Klassen und Instanzen

(1) Ein Klasse wird “geladen” (z. B. von der Festplatte in den Hauptspeicher), sobald sie ben¨otigt wird und wieder entfernt, sobald sie nicht mehr ben¨otigt wird. (2) Instanzen werden i. allg. mit new erzeugt. Sobald keine Referenz mehr auf die Instanz existiert, kann sie vom Java–System u ¨ber die automatische Garbage collection wieder entfernt werden. Dies kann allerdings sp¨ater oder auch gar nicht geschehen (siehe oben).

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

18 / 18

Lebenszyklen von Klassen und Instanzen

(1) Ein Klasse wird “geladen” (z. B. von der Festplatte in den Hauptspeicher), sobald sie ben¨otigt wird und wieder entfernt, sobald sie nicht mehr ben¨otigt wird. (2) Instanzen werden i. allg. mit new erzeugt. Sobald keine Referenz mehr auf die Instanz existiert, kann sie vom Java–System u ¨ber die automatische Garbage collection wieder entfernt werden. Dies kann allerdings sp¨ater oder auch gar nicht geschehen (siehe oben).

G. Bohlender (IANM – UNI Karlsruhe)

OOP und Klassen

16.5.07

18 / 18