Upload
rupert-ede
View
110
Download
2
Embed Size (px)
Citation preview
Programmieren mit JAVA
Teil III
Hauptbestandteile der Sprache
• Token• Typen• Ausdrücke und Operatoren• Anweisungen• Klassen• Methoden• Schnittstellen• Pakete• Variablen
Klassen• Eine Klassendefinition in Java wird durch das
Schlüsselwort class eingeleitet. Anschließend folgt innerhalb von geschweiften Klammern eine beliebige Anzahl an Variablen- und Methodendefinitionen. Das folgende Listing ist ein Beispiel für eine einfache Klassendefinition: public class Auto
{
public String name;
public int erstzulassung;
public int leistung;
}
Klasse - DeklarationSyntax:
[modifiers] class NeueKlasse [extends NamederSuperklasse]
[implements NamederSchnittstelle]
4 Eigenschaften einer Klasse können in der Deklaration definiert werden:•Modifier•Klassenname•Superklasse•Schnittstellen
Klasse - Modifier
• keinen (freundliche Klasse)
können nur von Objekten eines Paketes genutzt werden• public
alle Objekte können auf diese Klasse zugreifen• final
kann nicht mehr abgeleitet werden (haben keine Subklassen)
• abstract
von dieser Klasse wird nie eine Instanz benötigt und kann auch keine bilden, sie dient zu allgemeinen Verweisen
Klasse - Klassenname
• jede Klasse muss einen eigenen Namen haben• Regel für den Namen siehe Token• man sollte sprechende Klassennamen verwenden• der Name sollte mit einem Großbuchstaben beginnen,
der Rest Kleinbuchstaben• hat der Name mehrere Wörter, so darf kein
Leerzeichen dazwischen sein• Bsp.: MeineNeueKlasse
Klasse - Superklassen• mit dem Schlüsselwort extends spezifiziert man die
Klasse, auf welche die neue Klasse aufbaut• die Superklasse wird durch die neue Klasse erweitert
(Vererbung)• Bsp.:import java.awt.Graphics;
public class HelloJavaApplet extends java.applet.Applet {
public void paint(Graphics g) {
g.drawString("Hello Java!",5,25);
}
}
Klasse - Schnittstelle
• statt Mehrfachvererbung gibt es das Schnittstellenkonzept• Objekte können eine beliebige Zahl davon implementieren• sind Sammlungen von Methodennamen ohne konkrete
Definition• deshalb muss jede nichtabstrakte Klasse alle in der
Schnittstelle deklarierten Methoden überschreiben
Objekte• Um von einer Klasse ein Objekt anzulegen, muß eine
Variable vom Typ der Klasse deklariert werden• und ihr mit Hilfe des new-Operators ein neu erzeugtes
Objekt zugewiesen werden• Bsp.:
Auto meinKombi;
meinKombi = new Auto();
public class Auto{ public String name; public int erstzulassung; public int leistung;}
Auto meinKombi = new Auto();
Objekte• Nach der Initialisierung haben alle Variablen des Objekts
zunächst Standardwerte• Referenztypen haben den Standardwert null, die
Standardwerte der primitiven Typen können V2 entnommen werden
• Der Zugriff auf sie erfolgt mit Hilfe der Punktnotation Objekt.Variable
• Bsp.: meinKombi.name = "Mercedes 600"; meinKombi.erstzulassung = 1972; meinKombi.leistung = 250;
public class Auto{ public String name; public int erstzulassung; public int leistung;}
Objekte
• auch der lesende Zugriff erfolgt mit Hilfe der Punktnotation
• Bsp.:System.out.println("Name........: "+meinKombi.name);System.out.println("Zugelassen..: "+meinKombi.erstzulassung);System.out.println("Leistung....: "+meinKombi.leistung);
Methoden
• Methoden definieren das Verhalten von Objekten• Sie werden innerhalb einer Klassendefinition angelegt• Sie haben Zugriff auf alle Variablen des Objekts• Methoden sind das Pendant zu den Funktionen anderer
Programmiersprachen• Sie arbeiten aber immer nur mit den Variablen des
aktuellen Objekts• In Java gibt es keine globalen Methoden wie auch
keine globale Variablen
Methoden - Syntax[Modifier] /* private, protected, public, static, final */
Typ Name([Parameter])
/*Typ des Rückgabewerts der Funktion, ihr Name und eine optionale Parameterliste
*/
{
Anweisung; /* Methodenrumpf=Liste der Anweisungen, die das Verhalten der Methode festlegen */
}
Methode - Beispiel• Beispielklasse Auto um eine Methode zur Berechnung
des Alters des Auto-Objekts erweitert: public class Auto
{
public String name;
public int erstzulassung;
public int leistung;
public int alter()
{
return 1999 - erstzulassung;
}
}
Methode - Aufruf• Der Aufruf einer Methode erfolgt ähnlich der
Verwendung einer Instanzvariablen in Punktnotation• Zur Unterscheidung von einem Variablenzugriff müssen
zusätzlich die Parameter der Methode in Klammern angegeben werden, selbst wenn die Liste leer ist
• Bsp.: Auto golf1 = new Auto(); golf1.erstzulassung = 1990; System.out.println(golf1.alter());
• Welcher Wert wird ausgegeben?
Methoden - Parameter• Eine Methode kann mit Parametern definiert werden• Jeder formale Parameter besteht aus einem Typnamen
und dem Namen des Parameters• Mehrere Parameter sind durch Kommata zu trennen• Bsp.:
public void printAlter(int wieoft) { while (wieoft-- > 0) { System.out.println("Alter = " + alter()); } }
• Wie oft wird in diesem Programm das Alter des Autos ausgegeben?public class Auto { public int erstzulassung; Auto meinAuto = new Auto(); meinAuto.erstzulassung = 1990; public int alter() { return 1999 - erstzulassung; } public void printAlter(int wieoft) { while (wieoft-- > 0) { System.out.println("Alter = " + alter()); } } int a = 3; auto.printAlter(a); auto.printAlter(a);}
Methoden - Übergabe von Objekten
• Die Methode erhält keine Kopie, sondern arbeitet mit dem Originalobjekt
• Sollen Objekte kopiert werden, so muss dies explizit durch Aufruf der Methode clone der Klasse Object erfolgen.
Methoden - Rückgabe• Jede Methode in Java ist typisiert• Der Typ einer Methode wird zum Zeitpunkt der
Definition festgelegt und bestimmt den Typ des Rückgabewerts
• Dieser kann von einem beliebigen primitiven Typ, einem Objekttyp oder vom Typ void sein
• Die Methoden vom Typ void haben gar keinen Rückgabewert und dürfen nicht in Ausdrücken verwendet werden
• Hat eine Methode einen Rückgabewert, so kann sie mit Hilfe der return-Anweisung einen Wert an den Aufrufer zurückgeben
• Syntax: return Ausdruck;
Methoden - Überladen• In Java ist es erlaubt, innerhalb einer Klasse zwei
unterschiedliche Methoden mit demselben Namen zu definieren
• Der Compiler unterscheidet die verschiedenen Varianten anhand der Anzahl und Typisierung der Parameter
• Überladen von Methoden ist dann sinnvoll, wenn die gleichnamigen Methoden auch eine vergleichbare Funktionalität haben
• Bsp.: public int alter(String titel) { int alter = alter(); System.out.println(titel+alter); return alter; }
Methoden - Konstruktoren
• Konstruktoren sind spezielle Methoden, die bei der Initialisierung von Objekten aufgerufen werden.
• ~ werden als Methoden ohne Rückgabewert definiert, die den Namen der Klasse erhalten, zu der sie gehören
• Konstruktoren dürfen eine beliebige Anzahl an Parametern haben und können überladen werden
• Soll ein Objekt unter Verwendung eines parametrisierten Konstruktors instanziert werden, so sind die Argumente wie bei einem Methodenaufruf in Klammern nach dem Namen des Konstruktors anzugeben
Methoden - Konstruktoren
• Bsp.:public class Auto { public String name; public int erstzulassung; public int leistung; public Auto(String name) { this.name = name; } Auto dasAuto = new Auto("Porsche 911"); System.out.println(dasAuto.name);}
mehrere Konstruktoren public class Auto { public String name; public int erstzulassung; public int leistung; public Auto(String name){ this.name = name; } public Auto(String name, int erstzulassung, int leistung) { this.name = name; this.erstzulassung = erstzulassung; this.leistung = leistung; } }
Methoden - Destruktoren• Destruktoren werden unmittelbar vor dem Zerstören
eines Objekts aufgerufen• Ein Destruktor wird als geschützte parameterlose
Methode mit dem Namen finalize definiert• Syntax:protected void finalize(){...}
• Da Java über ein automatisches Speichermanagement verfügt, kommt den Destruktoren eine viel geringere Bedeutung zu als in anderen objektorientierten Sprachen
Weiter:
• Vererbung• Attribute von Klassen, Methoden und Variablen • Klassen mit static-Elementen• Abstrakte Klassen und Methoden• Interfaces• Spezielle Klassen• ...