Lektion3

Werbung
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 - Deklaration
Syntax:
[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.:
public class Auto
Auto meinKombi;
meinKombi = new Auto();
Auto meinKombi = new Auto();
{
public String name;
public int erstzulassung;
public int leistung;
}
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
public class Auto
• Bsp.:
meinKombi.name = "Mercedes 600";
meinKombi.erstzulassung = 1972;
meinKombi.leistung = 250;
{
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
public int
public int
{
name;
erstzulassung;
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
...
Herunterladen