Java
Programmierung mit
Eine Einführung in Java
> Anweisungen
Mark Egloff 2006
1
Java
Programmierung mit
Lernziel Heute Abend
>
Sie verstehen die Bedeutung des Begriffes „Anweisung“.
>
Sie kennen die verschiedenen Arten der Anweisungen in
Java und können diese auch unterscheiden
Mark Egloff 2006
2
Java
Programmierung mit
Anweisungen in Java
> Was ist eine Anweisung ?
>
Eine Anweisung (engl. statement) ist in einer Programmiersprache verfasste Arbeitsvorschrift.
>
In der Maschinensprache z.B. Assembler kann die
Bezeichnung Anweisung direkt als Synonym für Befehl
gesehen werden, jedoch in höheren Programmiersprachen
nicht, da eine Anweisung aus Befehlsfolgen bestehen kann.
>
Java zählt zu den imperativen Programmiersprachen, in
denen der Programmierer die Abarbeitungsschritte seiner
Algorithmen durch Anweisungen vorgibt.
Mark Egloff 2006
3
Java
Programmierung mit
Anweisungen in Java
Übersicht verschiedene Anweisungen in Java (1/4)
>
In Java lassen sich die Anweisungen ca. in 7 Arten einteilen:
;
Leere Anweisung
{}
Block Anweisung
Label:
Bezeichnete Anweisung
class ABC{}
int i;
public static void main(){}
String str = "Hello" + "World";
System.out.print("O");
X++; Y = X + 2;
Mark Egloff 2006
DeklarationsAnweisung
AusdrucksAnweisung
4
Java
Programmierung mit
Anweisungen in Java
Übersicht verschiedene Anweisungen in Java (2/4)
AuswahlAnweisung
if (x==1) do();
if (x==1){...}
else {...}
test()? A : B;
switch(x)
{
case(1): do();
break;
}
Mark Egloff 2006
5
Java
Programmierung mit
Anweisungen in Java
Übersicht verschiedene Anweisungen in Java (3/4)
IterationsAnweisung
while(x < 1)
{...}
do
{...} while(x < 1);
for( int i = 0; i < 23; i++)
{...}
break;
continue;
return;
throw;
SprungAnweisung
Mark Egloff 2006
6
Java
Programmierung mit
Anweisungen in Java
Übersicht verschiedene Anweisungen in Java (4/4)
synchronized{...}
threadsafe{..}
SynchronisationsAnweisung
try{...}
catch(IOException){...}
finally{...}
Mark Egloff 2006
SchutzAnweisung
7
Java
Programmierung mit
Anweisungen in Java
Reservierte Schlüsselwörter in Java (Java 1.5)
abstract
continue
for
new
switch
assert1.4
default
if
package
synchronized
boolean
do
goto
private
this
break
double
implements
protected
throw
byte
else
import
public
throws
case
enum1.5
instanceof
return
transient
catch
extends
int
short
try
char
final
interface
static
void
class
finally
long
strictfp1.2
volatile
const
float
native
super
while
“const” u. “goto” können nicht verwendet werden, sind aber Schlüsselwörter
Mark Egloff 2006
8
Java
Programmierung mit
Anweisungen in Java
Reservierte Schlüsselwörter in Java (1/5)
abstract Deklarationsanweisung, für Klasse nu. Methoden definiert eine
nichtinstanzierbare Klasse bzw. zu überschreibender Bereich
assert1.4
Ausdrucksanweisung Einbettung von Testanweisungen die
ausgeschaltet werden können (seit Java 1.4)
boolean
Deklarationsanweisung, Primitiver Datentyp
break
Sprunganweisung, bricht aktueller Block ab
byte
Deklarationsanweisung, Primitiver Datentyp
case
Verzweigung in einer MehrfachVerzweigungs-Anweisung (switch)
catch
Schutzanweisung, zum Auffangen einer Exception
char
Deklarationsanweisung, Primitiver Datentyp
class
Deklarationsanweisung, Deklaration einer Klasse
const
Reserviertes Wort aber nicht verwendet in Java
Mark Egloff 2006
9
Java
Programmierung mit
Anweisungen in Java
Reservierte Schlüsselwörter in Java (2/5)
continue Sprunganweisung, aktuellen Block unterbrechen & weiterfahren
default
Auswahl-Anweisung, Standard b. Mehrfach-Verzweigung (switch)
do
Iterations-Anweisung, leitet do … while Schleife ein
double
Deklarationsanweisung, Primitiver Datentyp
else
Auswahl-Anweisung, Verzweigung bei nicht zutreffen
enum1.5
Deklarationsanweisung, Ermöglich die Erstellung von
Nummerierungstypen (seit Java 1.5)
extends
Deklarationsanweisung, Vererbung bei Klassen und Interfaces
final
Deklarationsanweisung, Konstanten und Schuz um Klassen zu
überschreiben
finally
Schutzanweisung, leitet ein Block ein der immer ausgeführt wird
float
Deklarationsanweisung, Primitiver Datentyp
Mark Egloff 2006
10
Java
Programmierung mit
Anweisungen in Java
Reservierte Schlüsselwörter in Java (3/5)
for
Iterations-Anweisung, Definition einer for Schleife
if
Auswahlanweisung, Einleitung des zu testenden Ausdrucks
goto
Geschütztes Wort aber in Java nicht verwendet
implements
Deklarationsanweisung, Klassen-Modifizierer, gibt an welche
Interfaces implementiert wurden
import
Bekanntmachung der Packages, Namespaces
instanceof
Operator um den Datentyp eines Objekts zu testen
int
Deklarationsanweisung, Primitiver Datentyp
interface
Deklarationsanweisung, Definiert ein Interface
long
Deklarationsanweisung, Primitiver Datentyp
native
Deklarationsanweisung, Klassen – Methodenmodifizierer,
Element ist in einer anderen Sprache geschrieben
Mark Egloff 2006
11
Java
Programmierung mit
Anweisungen in Java
Reservierte Schlüsselwörter in Java (4/5)
new
Ausdrucksanweisung, zur Erzeugung eines neuen Objektes
package
Deklarationsanweisung, definiert Zugehörigkeit der Klasse
private
Deklarationsanweisung, Zugriffschutz für Kapselung
protected
Deklarationsanweisung, Zugriffschutz für Kapselung
public
Deklarationsanweisung, Zugriffschutz für Kapselung
return
Ausdrucksanweisung, Rückgabe bei Methoden
short
Deklarationsanweisung, Primitiver Datentyp
static
Deklarationsanweisung, Definiert globaler Bereich in Klasse
strictfp1.2
Deklarationsanweisung, um Floatingpoint Kompatibilität auf
allen Plattformen zu gewährleisten (seit Java 1.2)
super
Ausdrucksanweisung, Aufruf der Elemente der Basisklasse
Mark Egloff 2006
12
Java
Programmierung mit
Anweisungen in Java
Reservierte Schlüsselwörter in Java (5/5)
switch
Auswahl-Anweisung, leitet eine Mehrfach-Auswal ein
synchronized
Deklarationsanweisung bei Methoden- oder Block, dieser
Bereich wird mit Semaphoren geschützt, für Multi-threading
this
Ausdrucks-Anweisung, Referenz auf sich selber das
momentanes Objekt
throw
Schutzanweisung um einen Fehler (Exception) auszulösen
throws
Deklarationsanweisung, definiert welche Exceptions ausgelöst
werden dürfen
transient
Deklarationsanweisung, keine Serialisierung für Attribute
try
Schutzanweisung, Einleitung eines zu überprüfenden Blocks
void
Deklarationsanweisung, definiert keine Rückgabe b. Methoden
volatile
Deklarationsanweisung, Überprüfung für Compiler das
Variable nicht verwendet wird von mehreren threads
while
Iterations-Anweisung, Einleitung einer „while“ Schleife
Mark Egloff 2006
13
Java
Programmierung mit
Eine Einführung in Java
> Kontrollstrukturen
Mark Egloff 2006
14
Java
Programmierung mit
Lernziel Heute Abend
>
Sie kennen die Bedeutung von Kontrollstrukturen
>
Sie verstehen den Aufbau und Ablauf von Schleifen und
Auswahlanweisungen
>
Sie erstellen eigene Schleifen mit Mehrfachauswahl.
Mark Egloff 2006
15
Java
Programmierung mit
Kontrollstrukturen
> Was sind Kontrollstrukturen ?
>
Kontrollstrukturen dienen in einer Programmiersprache dazu,
Programmteile unter bestimmten Bedingungen auszuführen.
>
Java bietet zum Ausführen verschiedener Programmteile eine
if- und if /else-Anweisung sowie die switchAnweisung
>
Mittels den Iterationsanweisungen von while /do while
/for können in Java sämtliche Schleifen (Mehrfachausführungen von Anweisungen) erstellt werden
>
Mit den Sprunganweisungen break / continue können in
Java Blöcke bzw. Schelifen abgebrochen und fortgesetzt
werden
Mark Egloff 2006
16
Java
Programmierung mit
Kontrollstrukturen
Die „if/else“ Anweisung (1/6)
>
Die Anweisung beginnt mit dem Schlüsselwort „if“, dem
zwingend ein Ausdruck vom Typ „boolean“ in Klammern folgt.
>
Es folgt eine Anweisung die nur ausgeführt wird falls der
boolean - Ausdruck „true“ ist
>
Mit „else“ kann die Anweisung definiert werden welche im Falle
„false“ ausgeführt werden soll. Dieser Teil ist optional
Syntax:
if ( boolean-Ausdruck )
Anweisung;
[ else
Anweisung; ]
Mark Egloff 2006
17
Java
Programmierung mit
Kontrollstrukturen
Die „if/else“ Anweisung – Beispiele (2/6)
Einfach Auswahl ohne else - Anweisung
if( i == 45 )System.out.print("i ist 45");
if ( x < y )
System.out.print("x ist kleiner als y");
Einfach Auswahl mit else - Anweisung
if( x == 3 )System.out.print("x ist 3");
else System.out.print("x ist anders");
if( x==3 && i!=4 )
System.out.print("x == 3 und i !=4");
Mark Egloff 2006
18
Java
Programmierung mit
Kontrollstrukturen
Die „if/else“ Anweisung – Beispiele (3/6)
>
Mehrere Anweisungen müssen in einem separaten Block
„{}“ untergebracht werden
z.B.:
if( x==3 )
{
System.out.print("x");
System.out.print(" ist ");
System.out.println("3");
}
else
{
System.out.print("x ist anders");
}
Mark Egloff 2006
19
Java
Programmierung mit
Kontrollstrukturen
Die „if/else“ Anweisung – Beispiele (4/6)
>
Achtung bei Verschachtelung von „if“ Anweisungen, das
„else“ gehört immer zum letzten „if“
z.B.: ohne Einrückung und ohne Klammern ist es schlecht lesbar !
if( x==3 )
if (i==4)
System.out.print("x = 3 und i = 4");
else
System.out.print("x = 3 und i != 4");
else if (j > 0)
System.out.print("x !=3, i = ? und" +
"j > 0!");
Mark Egloff 2006
20
Java
Programmierung mit
Kontrollstrukturen
Die „if/else“ Anweisung – Beispiele (5/6)
z.B.: besser mit Einrückung, aber noch besser Klammern
setzen
if( x==3 )
{
if (i==4)
{
System.out.print("x = 3 und i = 4"); }
else
{
System.out.print("x = 3 und i != 4"); }
else
{
if (j > 0)
{ System.out.print("x !=3, i = ? und j > 0!"); }
}
Mark Egloff 2006
21
Java
Programmierung mit
Kontrollstrukturen
Die „if/else“ Anweisung – Beispiele (6/6)
>
Mehrere „if“ Anweisungen können mittels den
Operatoren „&&“ „||“ „!“ zusammengefasst werden
z.B.: Verschachtelte if-Anweisung zusammenfassen mit „&&“
if( x==3 )
{
if (i==4)
{
System.out.print("x = 3 und i = 4"); }
}
if( x==3 && i==4)
System.out.print("x = 3 und i = 4");
Mark Egloff 2006
22
Java
Programmierung mit
Kontrollstrukturen
Die „switch/case“ Anweisung (1/6)
>
Die switch-Anweisung ist für Mehrfachverzweigungen. Sie
vergleicht nacheinander einen Ausdruck mit einem jeweiligen
Wert bzw. Fall „case“.
switch( Ausdruck )
{
case(Wert_1): [Anweisung im Falle Ausdruck == Wert1]
break;
case(Wert_n): [Anweisung im Falle Ausdruck == Wert_n]
break;
default:
[Anweisung im Falle kein Wert zutrifft]
break;
}
Mark Egloff 2006
23
Java
Programmierung mit
Kontrollstrukturen
Die „switch/case“ Anweisung (2/6) – Syntax / Regeln
>
Der zu testende Ausdruck „switch(Ausdruck)“ muss vom Typ
„int“ oder in „int“ wandelbar sein z.B. „byte“, „char“ etc.
>
Jeder Fall wird mit einem „case(Wert):“ eingeleitet wobei der
zu prüfende Wert ebenfalls vom Typ „int“ und konstant sein
muss.
>
Trifft ein „case“ Fall zu, so wird dieser ausgewertet und alle
Anweisungen bis zum „break“ abgearbeitet.
>
Trifft kein Fall zu so wird der optionale „default“ abgearbeitet
>
Der switch- Block muss mindestens ein „case“ oder
„default“ haben
Mark Egloff 2006
24
Java
Programmierung mit
Kontrollstrukturen
Die „switch/case“ Anweisung (3/6) – Syntax / Regeln
switch( Ausdruck )
Datentyp „int“
{
case(Wert_1): [Anweisung im Falle Ausdruck == Wert1]
break;
case(Wert_n): [Anweisung im Falle Ausdruck == Wert_n]
break;
Konstanter Wert
Abbruch des Blocks
Datentyp „int“
default:
[Anweisung im Falle kein Wert zutrifft]
break;
}
Mark Egloff 2006
25
Java
Programmierung mit
Kontrollstrukturen
Die „switch/case“ Anweisung (4/6) – einfaches Beispiel
switch( x )
{
case(4): System.out.print("x ist 4 !");
break;
case(3): System.out.print("x ist 3 !");
break;
default: System.out.print("x ist anders !");
break;
}
Mark Egloff 2006
26
Java
Programmierung mit
Kontrollstrukturen
Die „switch/case“ Anweisung (5/6) – Beispiel „Durchfall“
>
Falls bei einem „case“ kein „break“ angegeben wird werden
sämtliche Anweisungen abgearbeitet bis zum nächsten „break“
>
Dadurch lassen sich „case“ Fälle absichtlich zusammenfassen
z.B.: switch( x )
{
case(4):
System.out.print("x ist 4 und");
case(3):
System.out.print("x ist 3 !");
break;
default:
System.out.print("x ist anders!");
break;
}
Mark Egloff 2006
27
Java
Programmierung mit
Kontrollstrukturen
Die „switch/case“ Anweisung (6/6) - Beispiel Konstante
>
z.B.:
Bei jedem zu prüfenden Fall „case“ kann nur ein konstanter „int“
Wert (oder wandelbar in „int“) angegeben werden, also entweder
eine Literale oder Konstante
final byte b = 3;
Lokale Konstante
switch( x )
{
case(4):
System.out.print("x ist 4 !");
break;
case(b):
System.out.print("x ist 3 !");
break;
}
Mark Egloff 2006
28
Java
Programmierung mit
Kontrollstrukturen
Die „while“ Schleife (1/3)
>
Mittels „while“ wird in Java eine einfache Schleife (Iteration)
eingeleitet.
>
Die Schleife wird solange wiederholt bis der zu prüfende
Ausdruck „false“ ist. Der Ausdruck muss Typ „boolean“ sein
>
Die „while“-Schleife ist eine abweisende Schleife, da sie vor
jedem Schleifeneintritt die Schleifenbedingung prüft
>
Mehrere Anweisungen müssen in einem Block „{}“
zusammengefasst werden
Syntax: while( boolean-Ausdruck )
Anweisung;
Mark Egloff 2006
29
Java
Programmierung mit
Kontrollstrukturen
Die „while“ Schleife (2/3) – Beispiele 1
z.B. Einfacher Zähler
int i = 0;
stoppt bei i = 10, läuft 10 mal
while ( i < 10 ) i++;
z.B. Mehrere Anweisungen
int i = 0;
while ( i < 10 )
{
i++;
System.out.println(i);
}
Mark Egloff 2006
30
Java
Programmierung mit
Kontrollstrukturen
Die „while“ Schleife (3/3) – Beispiele 2
Einfache Endlosschleifen
Bedingung bleibt „true“
while( true )
System.out.println("endlos");
keine Anweisung die was ändert
while( x == 3 );
Endlosschleifen durch Überlauf
byte b = 0;
while( b < 129 ) b++
129 wird als int angesehen
129 ist nicht in byte enthalten
Endlosschleifen durch Ungenauigkeit
double d = 0.0;
while( d != 1.0 ) d += 0.1;
Mark Egloff 2006
double u. float ist „ungenau“
0.999999 != 1.0
31
Java
Programmierung mit
Kontrollstrukturen
Die „do / while“ Schleife (1/2)
>
Die „do/while“ Schleife ist fast wie die „while“ Schleife. Die
Bedingung wird jedoch am Schluss geprüft
>
Dieser Schleifentyp ist eine annehmende Schleife, da die
Schleifenbedingung erst nach jedem Schleifendurchgang geprüft
wird
>
Mehrere Anweisungen müssen in einem Block „{}“
zusammengefasst werden
Syntax: do
Anweisung;
while( boolean-Ausdruck );
Mark Egloff 2006
32
Java
Programmierung mit
Kontrollstrukturen
Die „do / while“ Schleife (2/2) – Beispiele
z.B. Einfacher Zähler mit mehreren Anweisungen
int pos = 1;
do
{
System.out.println( pos );
pos++;
} while ( pos < 10 );
Mark Egloff 2006
33
Java
Programmierung mit
Kontrollstrukturen
Die „for“ Schleife (1/5)
>
Die for-Schleife ist eine spezielle Variante einer while-Schleife
und wird typischerweise zum Zählen benutzt.
>
for-Schleifen sind abweisend, der Rumpf wird also erst dann
ausgeführt, wenn die Bedingung true ist.
>
Die for-Schleife besteht aus Initial-Anweisung, zu prüfender
Ausdruck, Schrittanweisung und der zu wiederholenden
Anweisung
>
Mehrere Anweisungen müssen in einem Block „{}“
zusammengefasst werden
Syntax: for( InitialAnw; boolean-Ausdruck; SchrittAnw)
Anweisung;
Mark Egloff 2006
34
Java
Programmierung mit
Kontrollstrukturen
Die „for“ Schleife (2/5)
z.B. Gib die Zahlen von 1 bis 10 auf dem Bildschirm aus
1.
2.
4.
for ( int i = 1; i <= 10; i++ )
System.out.println( i );
3.
Ablauf:
1. Initialisiere i mit 1
2. Teste, ob i <= 10 gilt.
3. Ergibt sich true, dann führe den Block aus, sonst ist es das
Ende der Schleife.
4. Erhöhe i um 1.
5. Geh zu Schritt 2.
Mark Egloff 2006
35
Java
Programmierung mit
Kontrollstrukturen
Die „for“ Schleife (3/5) – Beispiele 1
z.B. „<“ und „<=“
for ( i = 0; i < 10; i++ ) ...
Beide sind gleich
for ( i = 0; i <= 9; i++ ) ...
werden 10 mal ausgeführt
z.B. Einfache Endlosschleife
; muss immer angegeben werden
for ( ; ; ) ...;
z.B. Geschachtelte Schleifen
for ( int i = 1; i <= 5; i++ )
{
for ( int j = 1; j <= i; j++ )
System.out.print( "*" );
System.out.println();
}
Mark Egloff 2006
Ausgabe:
*
**
***
****
*****
36
Java
Programmierung mit
Kontrollstrukturen
Die „for“ Schleife (4/5) - mehrere Initial-Anweisungen
>
Variabeln die in der Initialanweisung deklariert wurden sind nur
innerhalb der Schleife gültig, danach nicht mehr
>
Mehrere Variablen können deklariert werden, werden mit ','
getrennt, alle müssen denselben Datentyp verwenden
z.B.: zwei Variabeln vom Typ „int“
for ( int i = 1 , j = 0; i <= 10; i++ )
System.out.println( i + j++ );
Ausgabe: 1
3
5
7
...
Mark Egloff 2006
37
Java
Programmierung mit
Kontrollstrukturen
Die „for“ Schleife (5/5) - mehrere Schrittanweisungen
>
Bei der for-Schleife können auch mehrere Schrittanweisungen
angegeben werden. Die einzelnen Anweisungen müssen dabei
mit ',' getrennt werden
z.B.: Schleife mit zwei Zählern
for ( int i = 1 , j = 9; i <= j; i++ , j-- )
System.out.println( i + "*" + j + "=" + i * j );
Ausgabe: 1*9
2*8
3*7
4*6
5*5
=
=
=
=
=
9
16
21
24
25
Mark Egloff 2006
38
Java
Programmierung mit
Kontrollstrukturen
Sprunganweisungen „break“ und „continue“ (1/4)
>
In Schleifen können Sprung-Anweisungen ausgeführt werden um
die Schleife abzubrechen oder sie frühzeitig fortzuführen.
>
Mittels „break“ wird eine Schleife abgebrochen
>
Mittels „continue“ springt die Schleife zum nächsten Durchlauf
>
Die Anweisungen sind nützlich um festzustellen, ob die Schleife
noch einmal durchlaufen werden soll.
Syntax:
Iterations-Anweisung
{
if ( Ausdruck ) break [label];
if ( Ausdruck ) continue [label];
}
Mark Egloff 2006
39
Java
Programmierung mit
Kontrollstrukturen
Sprunganweisungen „break“ und „continue“ (2/4)
z.B. Führe die Schleife so lange durch, bis „i“ den Wert 0 hat.
int i = 10;
while ( true )
if ( i-- == 0 )
break;
Abbruch der Schleife
z.B. Gib die geraden Zahlen von 0 bis 10 aus.
for ( int i = 0; i <= 10; i++ )
{
if ( i % 2 == 1 )
continue;
nächster Schleifendurchlauf
System.out.println( i + " ist eine gerade Zahl" );
}
Mark Egloff 2006
40
Java
Programmierung mit
Kontrollstrukturen
Sprunganweisungen „break“ und „continue“ (3/4)
>
Mit einer Sprungmarke kann man einen Label vor ein for-,
while- oder do-while-Statement setzen und dann mit
continue labelname; bzw. break labelname; eine
(äußere) Schleife, auch von innen aus, vorzeitig beenden.
>
Die Sprungmarke kann ein beliebiges Wort sein mit
anschliessenden „:“, muss unmittelbar vor der Schleife
angegeben werden
Syntax:
label:
Iterations-Anweisung
{
if ( Ausdruck ) break label;
if ( Ausdruck ) continue label;
}
Mark Egloff 2006
41
Java
Programmierung mit
Kontrollstrukturen
Sprunganweisungen „break“ und „continue“ (4/4)
z.B. Sprungmarke in verschachtelter for-Schleife
outer:
for (int i=0; i<10;i++)
{
Zuvor definiertes Label
for (int v=0; v<10;v++)
{
if (v==1) continue;
if (v==2) continue outer; continue auf äussere Schleife
if (v==3) break outer;
Abbruch äusserer Schleife
if (v==4) break;
}
// inner block end...
}
// outer block end...
Mark Egloff 2006
42
Java
Programmierung mit
Eine Einführung in Java
> Einführung in
statische Methoden
Mark Egloff 2006
43
Java
Programmierung mit
Lernziel Heute Abend
>
Sie verstehen den Aufbau von statischen Methoden
können auch eigene erstellen.
>
Sie wissen wie rekursive Methoden funktionieren und
können auch eigene schreiben.
Mark Egloff 2006
44
Java
Programmierung mit
Methoden
>
Eine Methode kann als benannte Folge von Anweisungen
angesehen werden
>
Methoden dienen dazu um mehrere Anweisungen als Blöcke
zusammenzufassen und zugleich parametrisierbar zu machen
>
Java kennt zwei Arten von Methoden
Statische „static“ Methoden (Klassenmethoden)
Objekt Methoden (Instanzmethoden)
Syntax: [zugriff] [static] Rückgabetyp name([parameter])
{
Anweisungen;
[return [Ausdruck];]
}
Mark Egloff 2006
45
Java
Programmierung mit
Statische Methoden
„static“ Methoden (Klassenmethoden)
>
Statische Methoden (oder auch Klassenmethode) können als
globale Methoden angesehen werden.
>
Sie sind nicht an ein Objekt gebunden und können daher wenn
es der Zugriffschutz erlaubt (= public) von überall her
aufgerufen werden
>
Statische Methoden müssen innerhalb einer Klasse mit „static“
definiert werden, sonst sind sie automatisch Instanzmethoden.
>
Die Klasse dient lediglich als Namensraum (Namespace). Falls
die Methode ausserhalb der Klasse aufgerufen werden muss,
muss der Klasssennamen zuvor mit „.“ angegeben werden.
>
„static void main()“ ist ebenfalls eine statische Methode
Mark Egloff 2006
46
Java
Programmierung mit
Statische Methoden
„static“ Methoden (Klassenmethoden) – Beispiel 1
z.B. Eigene „helloWorld()“ Methode und Aufruf in eigener Klasse
public class HelloWorld
{
public static void main(String[] args)
{
helloWorld();
}
public static void helloWorld()
{
System.out.println("hello world!");
}
}
Mark Egloff 2006
47
Java
Programmierung mit
Statische Methoden
„static“ Methoden (Klassenmethoden) – Beispiel 2
z.B. Eigene „helloWorld()“ Methode und Aufruf in fremder Klasse
public class Run {
public static void main(String[] args){
HelloWorld.helloWorld();
}
}
class HelloWorld {
public static void helloWorld(){
System.out.println("hello world!");
}
}
Mark Egloff 2006
48
Java
Programmierung mit
Statische Methoden
Aufbau von Methoden – der Zugriffschutz
>
Als erstes folgt der Zugriffschutz. Er gibt an von wo aus die
Methode überhaupt aufgerufen werden darf
>
Es gibt folgende 4 Zugriffschutzmechanismen:
„public“ :
„protected“ : darf nur in allen verwandten Klassen
aufgerufen werden (Vererbung)
„private“:
darf nur in der eigenen Klasse aufgerufen werden
Keine Angabe:
Standardmässig. Methode kann in
verwandten Klassen aber nur innerhalb
desselben Packages aufgerufen werden
darf von überall her aufgerufen werden
[zugriff] [static] Rückgabetyp name([parameter])
Mark Egloff 2006
49
Java
Programmierung mit
Statische Methoden
Aufbau von Methoden – der Zugriffschutz - Beispiel 3
z.B. Eigene „helloWorld()“ Methode und Aufruf in fremder Klasse
public class Run {
public static void main(String[] args){
HelloWorld.helloWorld();
}
compilerfehler da private
}
class HelloWorld {
private static void helloWorld(){
System.out.println("hello world!");
}
}
Mark Egloff 2006
50
Java
Programmierung mit
Statische Methoden
Aufbau von Methoden – die Rückgabe
>
Nach „static“ folgt die Angabe des Rückgabetyps. Dies muss
entweder ein primitiver Datentyp sein oder ein Klassennamen
>
Die Methode kann nur ein Wert bzw. Referenz (Ausdruck)
zurückgeben
>
Soll kein Wert zurückgegeben werden so muss „void“
angegeben werden
>
Innerhalb der Methode wird die Rückgabe mit „return“
eingeleitet. Nach dem „return“ können keine weiteren
Anweisungen folgen.
[zugriff] [static] Rückgabetyp name([parameter])
Mark Egloff 2006
51
Java
Programmierung mit
Statische Methoden
Aufbau von Methoden – die Rückgabe - Beispiel 4
z.B. Eigene „helloWorld()“ Methode mit „return“
public class Run
{
public static void main(String[] args)
{
System.out.println( helloWorld() );
}
public static String helloWorld()
{
return "hello world!";
}
}
Mark Egloff 2006
52
Java
Programmierung mit
Statische Methoden
Aufbau von Methoden – die Rückgabe - Beispiele 5
z.B. Vorzeitige Rückgabe aber ohne Wert
public static void myMethod() {
int x = ...;
Bei Angabe von „void“ kann mit „return;“
if (x == 22) return;
ein vorzeitiger Abbruch erreicht werden
...
}
z.B. Mehrere Rückgabe-Fälle mit Wert
public static int myMethod() {
int x = ..., a = ...;
Falls Rückgabetyp angegeben wurde
if (x == 22) return x;
so muss immer ein „return“ mit Wert
else return a;
erfolgen, ansonsten Compilerfehler
}
Mark Egloff 2006
53
Java
Programmierung mit
Statische Methoden
Aufbau von Methoden – der Methodennamen
>
Nach dem Rückgabetyp folgt immer der Methodenname gefolgt
von runden Klammern
>
Als mögliche Bezeichner gelten dieselben Regeln wie bei den
Variabelnamen
[zugriff] [static] Rückgabetyp name([parameter])
Mark Egloff 2006
54
Java
Programmierung mit
Statische Methoden
Aufbau von Methoden – die Parameter
>
Als letztes folgt in den Klammern die Angabe von Übergabeparametern. Es können mehrere übergeben werden, müssen
dabei mit ',' getrennt werden. Parameterdeklarationen sind
optional.
>
Parameterangaben bestehen immer aus Datentyp und
Bezeichner-Gruppen. Der Parameter ist nur für die Methode gültig.
>
Beim Aufruf müssen immer alle Parameter angegeben werden
>
Abstrakte Datentypen werden „by Reference“ (als Originale)
übergeben
[zugriff] [static] Rückgabetyp name([parameter])
Mark Egloff 2006
55
Java
Programmierung mit
Statische Methoden
Aufbau von Methoden – die Parameter – Beispiel 6
z.B. Eigene „helloWorld()“ Methode mit Parameter
public class Run
{
public static void main(String[] args)
{
helloWorld("Hello");
}
public static void helloWorld( String s )
{
System.out.println( s + " world!";
}
}
Mark Egloff 2006
56
Java
Programmierung mit
Statische Methoden
Aufbau von Methoden – die Parameter – Beispiel 7
z.B. Mehrere Übergabeparamater
public static void myMethod( String name, int x ) {
System.out.prinln("Heute wurde " + name + " " + x
" Jahre alt");
}
+
Aufruf:
myMethod( "Fritz",77 );
Heute wurde Fritz 77 Jahre alt
Mark Egloff 2006
57
Java
Programmierung mit
Statische Methoden
Aufbau von Methoden – Übergabe „by Value“
>
z.B.:
Aufruf:
Bei primitiven Datentypen erfolgt die Übergabe „by Value“. Eine
Kopie der Variable bzw. des Wertes wird erstellt. Das Original
bleibt unverändert.
public static void myMethod( int x ) {
x++;
}
int x = 77;
myMethod(x);
System.out.println(x);
Mark Egloff 2006
unverändert 77
58
Java
Programmierung mit
Statische Methoden
Aufbau von Methoden – Übergabe „by Reference“
>
Abstrakte Datentypen bzw. Objekte werden „by Reference“ (als
Originale) übergeben. Wird ein solcher Parameter in der
Methode verändert, so wird dies auf dem Original vorgenommen.
Änderung bleibt nach Ablauf der Methode bestehen !
>
Bei der Übergabe von Objekten gibt es keine Möglichkeit diese
vor allfälliger Modifikation zu schützen
z.B.:
public static void myMethod( StringBuffer sb ) {
sb.append(" world!");
}
Aufruf:
StringBuffer s = new StringBuffer("Hello");
myMethod(s);
System.out.println(s);
verändert “Hello world!”
Mark Egloff 2006
59
Java
Programmierung mit
Statische Methoden
Aufbau von Methoden – Übergabe „by Reference“
Beispiel Übergabe von Objekt des Typs „java.lang.String“
public static int myMethod( String str ) {
str.replace(' ','_'); Keine Veränderung, da “immutable” !
}
Aufruf:
String s = "Java ist einfach!";
myMethod(s);
System.out.println(s);
unverändert “Java ist einfach!”
Mark Egloff 2006
60
Java
Programmierung mit
Statische Methoden
Aufbau von Methoden – Übergabe „by Reference“
Beispiel Übergabe von Objekt und neu-Instanzierung
public static int myMethod( StringBuffer sb ) {
sb = new StringBuffer("Hello World!");
// neues Objekt ist nur gültig in dieser Methode
2.
3.
}
Aufruf:
StringBuffer s = new StringBuffer("Hello");
myMethod(s);
System.out.println(s); unverändert “Hello”
Speicher:
1.
s
2.
sb
3.
sb
1.
2.
Hello
Hello World!
Mark Egloff 2006
61
Java
Programmierung mit
Statische Methoden
Überladen von Methoden
>
Überladene Methoden sind Methoden die mehrmals in der
gleichen Klasse mit demselben Namen definiert wurden
>
Die Parameterübergabe muss sich jedoch unterscheiden, durch
die Anzahl Parameter sowie Reihenfolge der Datentypen
>
Vorteil liegt beim Methodenaufruf. Anwender muss nicht die
genaue Deklaration 100%ig kennen z.B. „System.out.println()“
>
Der Interpreter ruft anhand der Parameterübergabe die richtige
Methode auf. Zur Not werden die Parameter implizit gewandelt!
z.B.:
public static void println( int x ) { … }
public static void println( float f ) { … }
public static void println( String s ) { … }
Mark Egloff 2006
62
Java
Programmierung mit
Statische Methoden
Überladen von Methoden – Beispiel 8
Beispiel anhand „System.out.println()“
java.sun.com/j2se/1.5.0/docs/api/java/io/PrintStream.html
void println()
void println(boolean x)
void println(char x)
System.out.println();
void println(char[] x)
System.out.println(
new char[]{'A','B'});
System.out.println(1.23);
System.out.println(1.23f);
System.out.println(77);
System.out.println(123567899L);
System.out.println(new Short(4));
System.out.println();
void
void
void
void
void
void
println(double x)
println(float x)
println(int x)
println(long x)
println(Object x)
println(String x)
System.out.println(true);
System.out.println('A');
Mark Egloff 2006
63
Java
Programmierung mit
Statische Methoden
Überladen von Methoden – Beispiel 9
Beispiel Überladung mit unterschiedlicher Parameteranzahl
public static int max( int i, int j ) {
return Math.max( i, j ); Math.max() gibt die grössere zurück
}
public static int max( int i, int j, int k ) {
return max( i, max(j, k) ); // Methode von oben aufrufen
}
ruft Methode 1 auf 7
ruft Methode 2 auf 9
Aufruf.: max(3,7);
max(9,7,1);
Mark Egloff 2006
64
Java
Programmierung mit
Statische Methoden
Überladen von Methoden – Beispiel 10
Compilerfehler da gleiche Parameterdatentypen und Reihenfolge
public static void myMethod( int i, int j )
{...}
public static void myMethod( int x, int z )
{...}
Erlaubt gleiche Parameterdatentypen und unterschiedliche Reihenfolge
public static void myMethod( float f, int i )
{...}
public static void myMethod( int i, float f )
{...}
Mark Egloff 2006
65
Java
Programmierung mit
Statische Methoden
Überladen von Methoden – Beispiel 11
Ad Hoc Datentypwandelung und Aufruf der jeweiligen Methode
public static void myMethod( byte b, int j )
{...}
public static void myMethod( double x, int z )
{...}
ruft Methode 2 auf, “int” in “double”
myMethod((byte)3,7); ruft Methode 1 auf
Aufruf.: myMethod(3,7);
Mark Egloff 2006
66
Java
Programmierung mit
Statische Methoden
Rekursive Funktionen
>
Rekursive Funktionen sind Funktionen die sich intern selber
oder gegenseitig aufrufen, dadurch entsteht eine Schleife.
>
Rekursive Funktionen sind äusserst kompakt in Code und
daher sehr beliebt. Leider nicht immer sofort überschaubar.
>
Eignen sich besonders gut beim traversieren durch
Baumstrukturen z.B. XML
z.B.:
public static void runter( int n ) {
if ( n == 0 ) return;
System.out.print( n + ", " );
runter( n – 1 );
}
Mark Egloff 2006
67
Java
Programmierung mit
Statische Methoden
Rekursive Funktionen
z.B.:
public static void runter( int n ) {
if ( n == 0 ) return;
Abbruch
System.out.print( n + ", " );
runter( n – 1 );
}
runter(0)
runter(10)
10 8 6 4
3 5 7 9
Ausgabe: 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
Mark Egloff 2006
68
Java
Programmierung mit
Statische Methoden
Rekursive Funktionen – Beispiel 12
z.B. Grösster gemeinsamer Teiler
public int ggt(int zahl1, int zahl2)
{
Abbruchbedingung
if ( zahl2 == 0)
return zahl1;
else
Rekursion
return ggt(zahl2,zahl1 % zahl2);
}
Aufruf.: ggt(12,4);
ggt(104,12);
4
4
Mark Egloff 2006
69
Java
Programmierung mit
Statische Methoden
Rekursive Funktionen – Beispiel 12
z.B. Grösster gemeinsamer Teiler
ggt(104,12)
Ergebnis: 4
return ggt(12,8);
return ggt(8,4);
104 % 12 = 8 weiter
12 %
return ggt(4,0); 8 %
8 = 4 weiter
4 = 0 abbruch
Abbruch !
ggt(12,104)
return ggt(104,12);
return ggt(12,8);
...
Mark Egloff 2006
Ergebnis: 4
12 % 104 = 12
104 % 12 = 8
70