Lexikalische Konventionen

Ähnliche Dokumente
Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Vererbung, Polymorphie

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Einstieg in die Informatik mit Java

Javakurs für Anfänger

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 14.1.

1 Einleitung Generizität Syntax... 2

Javakurs für Anfänger

Einführung in die Programmierung WS 2009/10. Übungsblatt 5: Typen, Variablen und einfache Methoden in Java

Grundelemente objektorientierter Sprachen (1)

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Algorithmen und Datenstrukturen 07

Grundelemente objektorientierter Sprachen (1)

3 Objektorientierte Konzepte in Java

Grundelemente objektorientierter Sprachen (1)

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Programmieren in C++ Vererbung

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Objektorientierte Programmierung und Klassen

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Java Datentypen und Variablen

Einstieg in die Informatik mit Java

Programmierung Nachklausurtutorium

Repetitorium Informatik (Java)

Einstieg in die Informatik mit Java

Tafelübung 07 Algorithmen und Datenstrukturen

Programmiertechnik Klassenvariablen & Instantiierung

Javakurs für Anfänger

Programmieren in Java

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

6 Speicherorganisation

6 Speicherorganisation

Javakurs für Anfänger

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Tag 8 Repetitorium Informatik (Java)

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Einstieg in die Informatik mit Java

Variablen. int Flugzeug. float. I write code Hund. String. long. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

Vorkurs Informatik WiSe 15/16

4. Vererbung. Idee der Vererbung. Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende Klassen vor:

Einführung in die Programmierung

Javakurs für Anfänger

Algorithmen und Datenstrukturen

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Einführung in die Programmierung I. 11. Vererbung. Stefan Zimmer

Wo sind wir? Übersicht lexikale Struktur von Java

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

Grundlagen der Objektorientierten Programmierung - Methoden -

Vererbung und Polymorphie

Vorkurs Informatik WiSe 16/17

Java-Applikationen (Java-Programme)

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Implementieren von Klassen

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen

Java I Vorlesung Imperatives Programmieren

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Informatik Vorkurs - Vorlesung 2

Erste Java-Programme (Java Wiederholung & Vererbung)

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1

Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen. J. W. v. Goethe.

Java Einführung Methoden in Klassen

Java als erste. Programmiersprache. Java 2 Plattform. Von Prof. Dr. Joachim Goll Cornelia Weiß Peter Rothländer. 2., durchgesehene Auflage

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Programmieren in Java

Prof. W. Henrich Seite 1

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

5 Vererbung. Subklassen, Superklassen, Pakete Zugriffsrechte

Algorithmen und Datenstrukturen 06

Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017

Praxis der Programmierung

Kurzskript zur Veranstaltung Programmieren Prof. Dipl.-Ing. Jirka R. Dell'Oro-Friedl 2012

4. Vererbung Die Klasse Object. Die Klasse Object

Prozeduren vs. Funktionen

EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 15/16

Klassen als Datenstrukturen

3 Objektorientierte Konzepte in Java

1. Abstrakte Klassen

Java Vererbung. Inhalt

C++ - Objektorientierte Programmierung Polymorphie

C++ - Objektorientierte Programmierung Vererbung

3. Java - Sprachkonstrukte I

Geschachtelte Klassen

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Kapitel 10. Verweise und Referenzen. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Vorlesung Programmieren

Fragen zur OOP in Java

Transkript:

# 17 Kap. 3 Lexikalische Konventionen Kap. 3.1 Kap. 3.1.1 Kap. 3.1.2 Kap. 3.2 Kap. 3.2.1 Kap. 3.2.2 Kap. 3.2.3 Kap. 3.2.4 Kap. 3.2.5 Kap. 3.2.6 Zeichenvorrat von Java Programmier-Styleguide Der Unicode Lexikalische Einheiten Trenner Namen Reservierte Wörter Literale und symbolische Konstanten Satzzeichen Operatoren Kap. 3.1 Zeichenvorrat von Java # 18 Java benutzt den Unicode-Zeichensatz Buchstaben (ASCII / ISO-Latin-1: 1 Byte und Unicode: 2 Byte) A, B,...Y, Z; a, b,...y, z; _, $ Ziffern (ASCII / ISO-Latin-1: 1 Byte und Unicode: 2 Byte) 0, 1,...8, 9 Leerzeichen (blank) Steuerzeichen (Zeilenenden, Tabulator, Seitenvorschub) Sonderzeichen (separators) () { [] ;,. Sonderzeichen für Operatoren = > <!? : & + - * / ^ % für Ersatzdarstellungen \ Anführungszeichen einfach a und doppelt Name: Harms: "SoftwareEntwicklung", SWENT, WS 2001/02-9 -

# 19 Quelltext lässt sich allein in ASCII (American Standard Code for Information Interchange) - Zeichen schreiben. Unicode-Zeichen können durch \ux1x2x3x4 eingefügt werden. Dabei sind x1,...x4 hexadezimale Zeichen: 0,1,2,3,4,5,6, 7,8,9,A,B,C,D,E. \ux1x2x3x4 entspricht dem Unicodezeichen mit der dezimalen Nummer x1*16 3 +x2*16 2 +x3*16 1 +x4*16 0 Java unterscheidet Groß- und Kleinschreibung (alle reservierten Wörter werden mit kleinen Buchstaben geschrieben) Kap. 3.1.1 Programmier-Styleguide #20 Variablennamen klein variable Datenfeldnamen klein vorname Methodennamen klein methode() Klassennamen 1. Buchstabe groß, Rest klein Person symbol. Konstanten alle Buchstaben groß MAXIMUM Zusammengesetzte Namen: drittewurzel verschiebeschwerpunkt() Variable Methode Kap. 3.1.2 Der Unicode Die ersten 256 Zeichen sind die ASCII- / ISO-Latin-1-Zeichen. Es gibt über 30 000 Unicode-Zeichen. Harms: "SoftwareEntwicklung", SWENT, WS 2001/02-10 -

Kap. 3.2 Lexikalische Einheiten # 21 Trenner -> Parser (Syntaxprüfung) -> Wörter der Sprache Compiler verwandelt Quelltext in Unicode. Kap. 3.2.1 Trenner Whitespace-Zeichen (Leerzeichen, horizontaler Tabulator, Zeilentrenner, Seitenvorschub) Kommentare Blockkommentar /* Blockkommentar */ Zeilenkommentar // Zeilenkommentar Dokumentationskommentar /** Dok.kommentar */ (Tags: @version, @author u.a.) Kap. 3.2.2 Namen #22 Ein Name (Bezeichner) besteht aus einer beliebig langen Zeichenkette aus Buchstaben und Ziffern. Kap. 3.2.3 Reservierte Wörter abstract, boolean, char, class,..., while Kap. 3.2.4 Literale und symbolische Konstanten Literal: 1200 ; 3.1416 ; true, false ; Meier Symbol. Konstante: final int UPPER = 300; Ersatzdarstellungen/Escape-Sequenzen: \n \t \b \r \f \\ \ \ Harms: "SoftwareEntwicklung", SWENT, WS 2001/02-11 -

Kap. 3.2.5 Satzzeichen # 23 () { [] ;,. Kap. 3.2.6 Operatoren = > <! ~? : == >= <=!= && ++ -- () []. + - * / & ^ % << >> >>> += -= *= /= &= = ^= %= <<= >>= >>>= new instanceof (type) Beispiele für Operatoren # 24 u++; entspricht u = u + 1; (Postfix) int u = 1; int v; v = u++; Erg.: v = 1 / Nebeneffekt: u=2 ++u; entspricht u = u + 1; (Präfix) int u = 1; int v; v = ++u; Erg.: v = 2 / Nebeneffekt: u=2 u--; entspricht u = u - 1; (Postfix) int u = 1; int v; v = u--; Erg.: v = 1 / Nebeneffekt: u=0 --u; entspricht u = u - 1; (Präfix) int u = 1; int v; v = --u; Erg.: v = 0 / Nebeneffekt: u=0 a += b; entspricht a = a + b; a *= b; entspricht a = a * b; Harms: "SoftwareEntwicklung", SWENT, WS 2001/02-12 -

Kap. 10 Vererbung und Polymorphie # 25 Kap. 10.1 Das Konzept der Vererbung Kap. 10.1.1 Spezialisierung und Generalisierung Kap. 10.1.2 Erweitern einer Basisklasse in der abgeleiteten Klasse Kap. 10.2 Kap. 10.3 Polymorphie und das Liskov Substitution Principle Konstruktoren bei abgeleiteten Klassen Kap. 10.4 Typkonvertierung von Referenzen Kap. 10.4.1 Implizite Typkonvertierung von Referenzen Kap. 10.4.2 Explizite Typkonvertierung von Referenzen Kap. 10.4.3 Gültige Up- und Down-Cast Operationen Kap. 10.5 Verdecken und Überschreiben Kap. 10.5.1 Verdecken von Datenfeldern Kap. 10 Kap. 10.1 Vererbung und Polymorphie Das Konzept der Vererbung Person name setname() print() is a Student matrikelnummer setmatrikelnummer() printmatrikelnummer() # 26 Harms: "SoftwareEntwicklung", SWENT, WS 2001/02-13 -

class Person { private String name; public void setname(string name) { this.name = name; public void print() { System.out.println("Name: " + name); class Student extends Person { private int matrikelnummer; public void setmatrikelnummer(int nr) { this.matrikelnummer = nr; public void printmatrikelnummer() { System.out.println("Matrikelnummer: " + matrikelnummer); # 27 class Test1 { public static void main(string[] args){ Student studiosus = new Student(); studiosus.setname("maier"); studiosus.setmatrikelnummer(56123); studiosus.print(); studiosus.printmatrikelnummer(); # 28 Person pers = new Person(); pers.setname("mueller"); pers.print(); Ausgabe: Name: Maier Matrikelnummer: 56123 Name: Mueller Harms: "SoftwareEntwicklung", SWENT, WS 2001/02-14 -

# 29 pers:person studiosus:student name = "Mueller" Jedes Objekt der Klasse Person hat die Datenfelder und Methoden: name setname() print() ererbt von der Klasse Person name = "Maier" matrikelnummer = 56123 Jedes Objekt der Klasse Student hat die Datenfelder und Methoden: name setname() print() eigene Elemente der Klasse Student matrikelnummer; setmatrikelnummer(); printmatrikelnummer(); Kap. 10.1.1 Spezialisierung und Generalisierung # 30 Basisklasse Spezialisierung Generalisierung abgeleitete Klasse1 abgeleitete Klasse2 Harms: "SoftwareEntwicklung", SWENT, WS 2001/02-15 -

Kap. 10.1.2 Erweitern einer Basisklasse in der abgeleiteten Klasse # 31 In der Sohnklasse Student kommt zum geerbten Protokoll der Vaterklasse Person noch ein sohnspezifisches Zusatzprotokoll. Vererbt werden Instanzvariablen und Instanzmethoden, Klassenvariablen und Klassenmethoden. Die Sohnklasse erbt auch die privaten Datenfelder und privaten Methoden. Aber nicht alles ererbte ist in der Sohnklasse automatisch sichtbar und zugreifbar. Die Vaterklasse kann die Sichtbarkeit steuern. class Person { private String name;... class Student kann nicht auf name zugreifen class Person { protected String name;... class Student kann auf name zugreifen Kap. 10.3 Konstruktoren bei abgeleiteten Klassen class Person { private String name; public Person(String name) { this.name = name; public void print() { System.out.println("Name: " + name); class Student extends Person { private int matrikelnummer; public Student(String name,int matrikelnr) { super(name); this.matrikelnummer = matrikelnr; public void printmatrikelnummer() { System.out.println("Matrikelnummer: " + matrikelnummer); # 32 Harms: "SoftwareEntwicklung", SWENT, WS 2001/02-16 -

class Test2 { public static void main(string[] args){ Student stud = new Student("Maier", 56123); // stud.setname("maier"); // stud.setmatrikelnummer(56123); stud.print(); stud.printmatrikelnummer(); # 33 Person pers = new Person("Mueller"); // pers.setname("mueller"); pers.print(); Ausgabe: Name: Maier Matrikelnummer: 56123 Name: Mueller Der Konstruktor der Basisklasse (super()) ist immer an erster Stelle des Konstruktors der abgeleiteten Klasse aufzurufen. # 34 Ein voreingestellter Default-Konstruktor einer Sohnklasse ruft automatisch den parameterlosen Konstruktor (d.h. den voreingestellten Default-Konstruktor) der Vaterklasse auf. Alle Klassen sind von der Klasse Object abgeleitet. Der Konstruktor der Basisklasse wird immer vor den Initialisierungsanweisungen des Konstruktors der abgeleiteten Klasse ausgeführt. Dies aus 2 Gründen: Übernahme der Initialisierungen der Basisklasse. Überschreibung der Datenfelder der Basisklasse (wenn sie nicht als private deklariert sind). Harms: "SoftwareEntwicklung", SWENT, WS 2001/02-17 -

Ein formaler Parameter des Konstruktors der abgeleiteten Klasse kann als aktueller Parameter an den Konstruktor der Basisklasse übergeben werden. Z. B.: public Student(String name,int matrikelnr) { super(name); this.matrikelnummer = matrikelnr; # 35 Wird der voreingestellte Default-Konstruktor durch einen Konstruktor mit Parametern ersetzt, so steht für diese Klasse kein parameterloser Konstruktor mehr zur Verfügung. Wird in einer abgeleiteten Klasse jetzt super() nicht explizit aufgerufen, dann setzt der Compiler super() ohne Parameter ein. Da der zugehörige Konstruktor nicht existiert, erhält man eine Fehlermeldung. Es ist deshalb notwendig für eine Basisklasse, neben einem Konstruktor mit Parametern auch einen Default-Konstruktor ohne Paramter zu schreiben. # 36 Kap. 10.2 Polymorphie und das Liskov Substitution Principle Polymorphie (Vielgestaltigkeit) ist ein wichtiger Aspekt der objektorientierten Programmierung. Polymorphie bei Operationen Ein und derselbe Methodenaufruf kann bei verschiedene Klassen einen unterschiedlichen Methodenrumpf haben. Polymorphie von Objekten gibt es nur bei Vererbungshierarchien. An die Stelle eines Objektes der Basisklasse kann auch ein Objekt der abgeleiteten Klasse treten. Ein Objekt der Sohnklasse ist polymorph, da es sich wie ein Objekt der Sohnklasse und wie ein Objekt der Vaterklasse (genauer: wie ein Objekt irgendeiner Basisklasse) verhalten kann. Harms: "SoftwareEntwicklung", SWENT, WS 2001/02-18 -

# 37 Liskov Substitution Principle Methoden, die Referenzen auf Basisklassen benutzen, müssen in der Lage sein, Objekte von abgeleiteten Klassen zu benutzen, ohne es zu bemerken. Polymorphie von Objekten ist wichtig, da es so möglich ist, wiederverwendbaren Code zu schreiben. Dazu muß der Code nur Referenzen auf Objekte einer Basisklasse enthalten. Ein Objekt einer abgeleiteten Klasse kann dann diesen Code verwenden. Die spezifischen Eigenschaften der abgeleiteten Klasse werden dafür nicht benötigt. Ihr Zusatzprotokoll (d.h. ihre Schnittstellen) und ihre zusätzlichen Datenfelder bleiben also unsichtbar. Beispiel: In einer Klasse X sei die Methode f(vater refvater) vorhanden: # 38 class X{...; public void f(vater refvater){...; X refx = new X(); refx.f(refvater); oder refx.f(refsohn); Beim Aufruf erfolgt die Zuweisung: Vater refvater = refsohn; genauer: es findet ein Casting statt: Vater refvater = (Vater) refsohn; Beim Casten werden die vom Sohn hinzugefügten Elemente vom Compiler versteckt. Sie werden damit unsichtbar. Harms: "SoftwareEntwicklung", SWENT, WS 2001/02-19 -

Beispiel (Teil 1): class Person { private String name; public Person(String name) { this.name = name; public String getname() { return name; public void print() { System.out.println("Name: " + name); class Student extends Person { private int matrikelnr; public Student(String name,int matrikelnr) { super(name); this.matrikelnr = matrikelnr; public void printmatrikelnummer() { System.out.println("Matnr: "+ matrikelnr); # 39 Beispiel (Teil 2): public class Registrierung { private int nummer; private static int aktuellenummer = 1001; public Registrierung(Person pers ) { nummer = aktuellenummer++; System.out.print("Name: " +pers.getname()); System.out.println(" erhaelt die Nummer: " + nummer); public class TestReg { public static void main(string[] args) { Student studiosus = new Student("Maier", 56123); Person pers = new Person("Mueller"); Registrierung reg1 = new Registrierung(pers); Registrierung reg2 = new Registrierung(studiosus); # 40 Harms: "SoftwareEntwicklung", SWENT, WS 2001/02-20 -

# 41 Beispiel (Teil 3): Ergebnis: Name: Mueller erhaelt die Nummer: 1001 Name: Maier erhaelt die Nummer: 1002 # 42 Kap. 5 Kap. 5.1 Kap. 5.1.1 Kap. 5.1.2 Kap. 5.2 Kap. 5.2.1 Kap. 5.2.2 Kap. 5.2.3 Kap. 5.2.4 Kap. 5.2.5 Kap. 5.2.6 Datentypen und Variablen Datentypen Einfache Datentypen Klassentypen und deren Definition Variablen Variablen einfacher Datentypen Referenzvariablen von Klassen-Typen Dynamische Variablen - Objekte Klassenvariablen, Instanzvariablen und lokale Variablen Speicherbereiche für Variablen Konstante Variablen Harms: "SoftwareEntwicklung", SWENT, WS 2001/02-21 -

Kap. 5 Datentypen und Variablen # 43 Kap. 5.1 Datentypen Man unterscheidet einfache (elementare) Datentypen (z. B. int, double, boolean) Referenztypen (Klasse, Array, Schnittstelle). Kap. 5.1.1 Einfache Datentypen Typ Inhalt Wertebereich boolean true/false true / false char Zeichen 0... 65535 16-Bit-Unicode byte 1 Byte -2 7... +2 7-1 short 2 Byte -2 15... +2 15-1 int 4 Byte -2 31... +2 31-1 long 8 Byte -2 63... +2 63-1 Typ Inhalt Wertebereich float Gleitpunkttyp -3.4*10 38..+3.4*10 38 (4 Byte) Genauigkeit: 7 Stellen # 44 double Gleitpunkttyp -1.7*10 308..+1.7*10 308 (8 Byte) Genauigkeit: 15 Stellen Kap. 5.1.2 Klassentypen und deren Definition class Punkt // Deklaration einer Klasse { // Klassenrumpf beginnt mit {... // enthält Datenfelder... // und Methoden // Klassenrumpf endet mit Harms: "SoftwareEntwicklung", SWENT, WS 2001/02-22 -

Methoden # 45 public int getx() // Methodenkopf { // Methodenrumpf startet mit { return x; // Rückgabewert // Methodenrumpf endet mit Datenfelder (Variablen) private int x; // Datenfeld wird deklariert protected int x; // Datenfeld wird deklariert Kap. 5.2 Variablen Man unterscheidet statische Variable (nicht zu verwechseln mit Klassenvariablen, die static deklariert werden) dynamische Variable. class Test { public static void main(string[] args) { int wert; // statische Variable // eines einfachen Datentyps Punkt refv; // Referenzvariable ist eine // statische Variable refv = new Punkt(); // dynamische Variable // wird auf dem Heap angelegt, hat // keinen Namen. Ein Zugriff kann nur // über die Referenzvariable erfolgen. # 46 wert, refv sind lokale Variablen, da sie innerhalb einer Methode deklariert werden. wert wird auf dem Stack angelegt und existiert für die Dauer der Abarbeitung der Methode. refv referenziert eine dynamische Variable auf dem Heap. Dynamische Variablen sind immer Objekte. Methoden werden in der Method-Area abglegt. Harms: "SoftwareEntwicklung", SWENT, WS 2001/02-23 -

Kap. 5.2.1 Variablen einfacher Datentypen # 47 int x; int x,y,z; // Deklaration der int-variablen x // Deklaration der int-variablen x, y, z int x = 3; // Definition der int-variablen x mit dem Wert 3 Definition = Deklaration + Reservierung von Speicherplatz Kap. 5.2.2 Referenzvariablen von Klassen-Typen Punkt refp; // Deklaration der Referenzvariablen refp, // wird vom Compiler nicht initialisiert. Punkt refp = new Punkt(); // Zuweisung der Adresse, // an der sich das Objekt auf dem Heap befindet. Kap. 5.2.3 Dynamische Variablen - Objekte # 48 Punkt refp = new Punkt(); Man unterscheidet in exakter Sprechweise zwischen der Referenz auf ein Objekt und dem Objekt. Das Objekt selber befindet sich als dynamische Variable auf dem Heap. Ein Zugriff auf das Objekt kann nur über die Referenzvariablen erfolgen. Referenzvariablen als Datenfelder werden vom Compiler mit null (der null-referenz) initialisiert. Harms: "SoftwareEntwicklung", SWENT, WS 2001/02-24 -

Stack Stack # 49 refp refp Heap Heap Punkt-Objekt Punkt refp; refp = new Punkt(); Kap. 5.2.4 Klassenvariablen, Instanzvariablen und lokale Variablen # 50 Klassenvariablen werden im Unterschied zu Instanzvariablen nur einmal pro Klasse im Method Area angelegt. Lokale Variablen treten in Methoden auf und werden auf dem Stack angelegt. Übergabeparameter sind lokale Variablen, die in Methoden-Köpfen bzw. den Schnittstellen auftreten. class VariablenTypen { int x; static int y; // Instanzvariable // Klassenvariable public void setx(int x){ //Übergabeparameter int z = x; // lokale Vraible this.x = z; Harms: "SoftwareEntwicklung", SWENT, WS 2001/02-25 -

Kap. 5.2.5 Speicherbereiche für Variablen # 51 5.2.5.1 Der Stack Der Stack ist ein LIFO-Datenstruktur (Last in first out). 5.2.5.2 Der Heap new legt eine dynamische Variable auf dem Heap an. Sie bleibt dort bis zum Programmende. Es sei denn, der Variablen wird der Wert null zugewiesen. Der Garbage Collector kann dann die Variable aus dem Heap entfernen und den Speicherplatz wieder frei geben. Der Garbage Collector ordnet einen zerstückelten Heap neu. A B C 12345678901234567890 12345678901234567890 12345678901234567890 12345678901234567890 12345678901234567890 12345678901234567890 12345678901234567890 A 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 D A C C 1234567890123456789 1234567890123456789 1234567890123456789 1234567890123456789 1234567890123456789 1234567890123456789 1234567890123456789 12345678901234567890123456789 12345678901234567890123456789 12345678901234567890123456789 12345678901234567890123456789 12345678901234567890123456789 1234567890 1234567890123456789 A C D 123 123 123 123 123 123 123 5.2.5.3 Die Method-Area # 52 Hier befinden sich die Klassenvariablen der gesamte Programmcode (die Methoden) einer Klasse. Kap. 5.2.6 Konstante Variablen final macht jede Variable konstant: final int konstantvar = 1; Der Wert 1 kann nicht mehr verändert werden. final Punkt p = new Punkt(); p ist eine konstante Referenz (Adresse), die immer auf das gleiche Objekt zeigt. Das Objekt aber kann geändert werden! Harms: "SoftwareEntwicklung", SWENT, WS 2001/02-26 -