Kein Folientitel - Institut für Geodäsie und Geoinformation der

Werbung
Institut für Kartographie und Geoinformation
Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe
Einführung in die
Programmierung mit Java
7. Vorlesung WS 2001/2002
Übersicht
• Besprechung der Übungsaufgabe
• Klassenvariablen (static variables)
• Klassenmethoden (static methods)
• Überladen von Methoden
• Einarbeitung in Klassen der Java-Bibliothek am
Beispiel der Klasse String
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
2
Übungsaufgabe vom 28. 11.
• Verbinden Sie die beiden Programme „Autsch“ und
„Textuelle Zahlenausgabe“ der 3. bzw. 5. Vorlesung.
Entwickeln Sie dazu zwei Klassen in eigenen
Dateien:
– Die Klasse „Zahlenobjekt“ soll Objekte für ganzzahlige
Zahlen zwischen 0 und 999 bereitstellen. Die textuelle
Ausgabe soll über eine Methode aufrufbar sein.
– Die Klasse „Autsch“ soll anstelle einer int-Zahl und der
Methode System.out.print auf die Klasse „Zahlenobjekt“
zurückgreifen.
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
3
Lösungsvariante 1
• siehe Zahlenobjekt1.java und Autsch1.java
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
4
Klassenvariablen
• Klassenvariablen sind nicht Teil von Objekten,
sondern existieren nur einmal pro Klasse

Speicherung Klassen-globaler Informationen (z.B. Anzahl
der Instanzen einer Klasse)
• Deklaration erfolgt (genau wie bei Instanzvariablen)
innerhalb der Klassendefinition
• Syntax:
class Klassenbezeichner {
static Typ Variablenbezeichner ;
...
// ab hier Methodendefinitionen
}
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
5
Zugriff auf Klassenvariablen
• Zugriff auf Klassenvariablen ist auch ohne die Existenz
von Instanzen der Klasse möglich
• Der Zugriff erfolgt
a) im Regelfall über den Klassenbezeichner
b) oder wie bei Instanzvariablen über eine Referenzvariable,
die auf ein Objekt der Klasse verweist
• Syntax zu Fall a):
Klassenbezeichner.Variablenbezeichner
• Beispiel: Klasse MyClass besitzt Klassenvariable v1;
v1 soll auf den Wert 20 gesetzt werden:
MyClass.v1 = 20;
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
6
Übung im GIS-Labor
• Ergänzen Sie die Klasse Zahlenobjekt1 um eine
statische Variable, die die Anzahl der erzeugten
Objekte mitzählt.
Tip: Der Konstruktor wird bei jeder neuen Instanz
aufgerufen!
• Ergänzen Sie das Programm Autsch1.java, so dass
vor Programmende noch die Anzahl der erzeugten
Objekte ausgegeben wird.
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
7
Zusammenfassung Variablen (I)
Es gibt generell 2 Arten von Variablen
1. Einfache Variablen (primitive Datentypen)
– beinhalten den Wert
– Initialisierung durch Zuweisen eines Wertes des entsprechenden Typs
2. Referenzvariablen
– Referenzieren („zeigen auf“) ein Objekt
– Initialisierung durch
• Instantiierung eines Objekts der entsprechenden Klasse und
Zuweisung des Rückgabewertes von new Klasse(...)
• Zuweisung des Inhalts einer anderen Referenzvariablen der
gleichen Klasse
• Zuweisung von null, falls aktuell auf kein Objekt verwiesen wird
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
8
Zusammenfassung Variablen (II)
Beide Arten von Variablen können auf folgende Weisen
verwendet werden:
• lokale Variable
– Existiert nur innerhalb einer Methode bzw. eines Blockes
– wird bei jedem Methodenaufruf neu angelegt und am Methodenende
gelöscht
– auch die formalen Parameter einer Methode stellen lokale Variablen dar
• Instanzvariable
– Zur Speicherung des Zustands / der Eigenschaften eines Objekts
– Jede Instanz besitzt eine eigene Instanzvariable
• Klassenvariable
– Zur Speicherung Klassen-globaler / Instanz-übergreifender
Informationen
– Existiert pro Klasse (und damit unabhängig von Instanzen der Klasse)
nur einmal
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
9
Zusammenfassung Variablen (III)
Lebensdauer
• Lokale Variable:
– vom Zeitpunkt der Deklaration bis zum Ende des aktuellen
Blocks (spätestens am Methodenende)
• Instanzvariable
– gleiche Lebensdauer wie das Objekt (wird mit dem Objekt
erschaffen und mit Terminierung des Objekts gelöscht)
• Klassenvariable
– Ab dem ersten Zugriff auf die Klasse (durch Instantiierung
eines Objekts oder Aufruf einer statischen Methode)
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
10
Zusammenfassung Variablen (IV)
Sichtbarkeit innerhalb einer Klasse
• lokale Variable
– nur innerhalb des Blockes, in dem sie deklariert wurde (auf jeden
Fall nur innerhalb einer Methode)
– verdeckt u.U. Instanz- oder Klassenvariablen
 Zugriff auf gleichnamige Instanzvariablen über this.-Referenz
• Instanzvariable
– innerhalb des Objekts selbst (also nicht in Klassenmethoden)
• Klassenvariablen
– in allen Objekten und Methoden der Klasse sichtbar
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
11
this-Referenz (I)
• Soll explizit auf Instanzvariablen eines Objektes
zugegriffen werden (z.B. zur Sicherstellung, dass
keine gleichnamige lokale Variable angesprochen
wird), so wird dem Variablennamen ein this.
vorangestellt.
Der formale Parameter zahl
ist eine lokale Variable und
• Beispiel:
verdeckt die gleichnamige
class Test {
Instanzvariable.
Der Zugriff
int zahl;
// Instanzvariable
ist nur über this. möglich.
Test (int zahl) {
// Konstruktor
this.zahl = zahl;
}
}
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
12
2. Lösungsvariante zur Übungsaufgabe
• siehe Zahlenobjekt1.java und Autsch2.java
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
13
3. Lösungsvariante zur Übungsaufgabe
• siehe Zahlenobjekt3.java und Autsch3.java
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
14
Klassenmethoden
• Klassenmethoden beziehen sich nicht auf ein
bestimmtes Objekt, sondern nur auf die Klasse

der Aufruf von Klassenmethoden ist unabhängig von der
Existenz von Instanzen der Klasse
• Definition von Klassenmethoden erfolgt über das
Voranstellen des Modifikators static vor der
Methodendefinition
• Syntax:
class Klassenbezeichner {
static Rückgabetyp Methodenbezeichner (Parameterliste) {
...
}
}
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
15
Aufruf von Klassenmethoden
• Aufruf der Klassenmethode erfolgt über den
Klassennamen:
Klassenbezeichner.Methodenbezeichner (Parameterliste)
• es ist auch möglich (aber eher unüblich),
Klassenmethoden über eine Referenz auf ein Objekt
aufzurufen (wie Instanzmethoden)
– Instanzmethoden sind jedoch nur über eine Referenz auf ein
Objekt aufrufbar
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
16
4. Lösungsvariante zur Übungsaufgabe
mittels einer Klassenmethode
• siehe Zahlenobjekt4.java und Autsch4.java
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
17
Signatur von Methoden
• Identifikation einer auszuführenden Methode erfolgt
nicht ausschliesslich über den Methodenbezeichner,
sondern über ihre Signatur
• Signatur einer Methode besteht aus
– Methodenbezeichner
– Liste der Datentypen der formalen Parameter
(die Reihenfolge spielt dabei eine Rolle)
• Beispiel:
int meineMethode1(int par1, char par2) {
...
}
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
18
Überladen von Methoden
Überladen (engl. Overloading):
• Definition gleichnamiger Methoden innerhalb einer
Klasse mit unterschiedlichen Parameterlisten
– „der Methodenname ist mehrfach (über-)belegt“
– Die Zuordnung von Methodenaufruf und auszuführender
Methode wird vom Compiler über die Signatur entschieden
– zwei Methoden mit gleichen Signaturen, aber verschiedenen
Rückgabetypen sind nicht möglich
• Mittels Überladen kann ein Objekt auf Botschaften
(Aufruf seiner Methoden aus anderen Objekten) in
Abhängigkeit der Datentypen ihrer Parameter
angemessen reagieren.
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
19
Beispiele für das Überladen von Methoden
• Beispiel:
int addition(int a, int b) {
return a+b;
Bei einem Aufruf
}
int wert=addition(4,6);
double addition(double a, double
b) { Methode
würde diese
return a+b;
ausgeführt
}
Bei einem Aufruf
double wert=addition(4.7,6.0);
würde diese Methode ausgeführt
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
20
Beispiele für das Überladen von Methoden
• Beispiel:
int addition(int a, int b) {
return a+b;
}
double addition(double a, double b) {
return a+b;
}
• Beispiele aus Java-Klassenbibliothek:
– Methoden der Klasse Math sind wie oben für verschiedene
Datentypen definiert
– Die Methode System.out.println(...) ist auch für verschiedene
Datentypen unterschiedlich definiert
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
21
Arbeiten mit Zeichenketten - die Klasse String
• siehe Java-Online-Dokumentation
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
22
Übungsaufgabe
Stichwort: selbstständiges Arbeiten mit der
Java-Dokumentation
Aufgabe:
• Schreiben Sie ein Programm, das Ihren Vor- und
Nachnamen mit einem Leerzeichen getrennt einer
String-Variablen zuweist. Leiten Sie aus diesem
String folgendes durch entsprechende Methoden der
Klasse String ab:
– einen String, der nur den Vornamen enthält
– einen String, der nur den Nachnamen enthält
– einen String mit Nach- und Vornamen (mit Leerzeichen)
– die Anzahl der Buchstaben des Strings
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
23
Herunterladen