E N D
1. 1 Java-Einfhrungskurs YOU ARE HERE ? Organisation
Einfhrung
Objektorientierte Modellierung
Java-Sprachkonstrukte
Pakete und Zugriffskontrolle
Deklaration von Attributen, Methoden, Variablen
Ausdrcke und Anweisungen
Kontrollstrukturen
Ausnahmebehandlung
Java-Klassenbibliothek
Datenstrukturen
Netzwerk-Programmierung
Grafische Benutzungsoberflchen
2. 2 Java-Einfhrungskurs Ausdrcke und Anweisungen Ausdrcke sind mehrere durch Operatoren verknpfte Variablen, Methoden oder Literale
jeder Ausdruck hat ein Ergebnis (Wert) bestimmten Typs
5 * a + Math.max (b, c) (primitiver Typ)
new java.util.Date () (Referenztyp)
in Anweisungen wird der Ausdruckswert einer Variablen zugewiesen, einer Methode bergeben oder als Methodenwert zurckgegeben
d = 5 * a + Math.max (b, c);
System.out.println (5 * a + Math.max (b, c));
return new java.util.Date ();
auch Deklarationen und Initialisierungen sind Anweisungen
3. 3 Java-Einfhrungskurs Anweisungen und Blcke Anweisungen werden mit Semikolon (;) abgeschlossen
leere Anweisung: einzelnes Semikolon
Anweisung;
; // leere Anweisung
Anweisung;
Anweisungen werden der Reihe nach abgearbeitet
Blcke (begrenzt durch geschweifte Klammern)fassen Sequenzen von Anweisungen zusammen
Anweisung;
{
Anweisung;
Anweisung;
Anweisung;
}
Anweisung;
4. 4 Java-Einfhrungskurs Operatoren Konkatenations-Operator +
arithmetische Operatoren +, -, *, /, %, ++, --
Type Casting-Operator (typ)
Bit-Operatoren ~, &, |, ^, <<, >>, >>>
Zuweisungsoperatoren =, +=, -=, *=, /=, %=, &=, |=, ^=
logische Operatoren !, &&, &, ||, |, ^
Vergleichsoperatoren ==, !=, >, <, >=, <=, instanceof
Bedingungsoperator ?:
5. 5 Java-Einfhrungskurs Operatorprioritten 14 Stufen (hoch bis niedrig)
++, --, Vorzeichen, ~, !, (typ)
*, /, %
+, -
<<, >>, >>>
<, <=, >, >=, instanceof
==, !=
&
^
|
&&
||
?:
=
*=, /=, %=, -=, <<=, >>=, >>>=, &=, ^=, |=
Prioritten knnen durch Klammerung gendert werden
6. 6 Java-Einfhrungskurs String-Konkatenation Operanden: Strings und ggf. primitive Datentypen
Ergebnis: String
Verknpfung (Konkatenation) mit Operator +
String a = "Hello", b = "World", c;
c = a + " " + b;
ist einer der Operanden ein primitiver Datentyp,so wird er in einen String umgewandelt
String a = "Antwort: ", c;
int b = 42;
c = a + b; // "Antwort: 42"
7. 7 Java-Einfhrungskurs Arithmetische Operatoren Operanden und Ergebnis: Zahlen
Vorzeichen: +a bzw. a -a
Rechenoperationen
Addition, Subtraktion: a + b a - b
Multiplikation, Division: a * b a / b
Modulo-Division (Restbildung): a % b
Inkrementierung, Dekrementierung (nur fr Ganzzahlen)
Prinkrement, Prdekrement: ++a --a
Postinkrement, Postdekrement: a++ a--
Prfix-Operatoren: erst Rechenoperation, dann Auswertung
b = ++a; ? a = a + 1;
b = a;
Postfix-Operatoren: erst Auswertung, dann Rechenoperation
b = a--; ? b = a;
a = a - 1;
8. 8 Java-Einfhrungskurs implizite Typumwandlung automatische Typanpassung (Type Casting)bei Rechenoperationen mit...
...byte-, short-, int-Zahlen: Ergebnis: int-Zahl
...long- und anderen Ganzzahlen: Ergebnis: long-Zahl
...float- und anderen Zahlen: Ergebnis: float-Zahl
...double- und anderen Zahlen: Ergebnis: double-Zahl
Ziel: Vermeidung von berlufen
short a = 2, b = 30000;
int c = a * b; // 60000 wre zu gro fr short
Vorsicht bei Division von Ganzzahlen
short a = 7, b = 2;
int c = a / b; // ergibt 3!
9. 9 Java-Einfhrungskurs explizite Typumwandlung Type Casting-Operator: (typ) variable
Vorsicht: Operator hat sehr hohe Prioritt!
ggf. Klammerung von zu castenden Ausdrcken notwendig
short a = 2, b = 100, c; short a = 7, b = 2;
c = (short) (a * b); float c = (float) a / b;
Vorsicht: Datenverlust mglich!
groe in kleine Ganzzahlen: Verlust der hherwertigen Bits
Fliekommazahlen in Ganzzahlen: Verlust der Nachkommastellen
double d = -67.89;
int i = (int) d; // -67
long-Zahlen in Fliekommazahlen: u.U. nicht exakt mglich
auch explizites Casting von Referenztypen mglich
String-Umwandlungen ber besondere Methoden (spter)
10. 10 Java-Einfhrungskurs Bit-Operatoren Operanden und Ergebnis: ganzzahlige primitive Datentypen
bitweise Invertierung: ~a
bitweise Verknpfung
bitweises Und: a & b
bitweises Oder: a | b
bitweises Exclusiv-Oder: a ^ b
bitweise Verschiebung (um n Stellen)
nach links (mit Nachschieben von Nullen): a << n
nach rechts (mit Nachschieben von Nullen): a >> n
nach rechts (mit Nachschieben des Vorzeichenbits): a >>> n
Trick zur Geschwindigkeitsoptimierung
a << n entspricht a * 2n
a >>> n entspricht a / 2n
11. 11 Java-Einfhrungskurs Zuweisungsoperatoren fr alle Datentypen als Ausdruck und Ergebnis:
Zuweisungsoperator a = b
Variable auf linker Seite erhlt Wert des Ausdrucks auf rechter Seite
fr Zahlentypen als Operanden und als Ergebnis:
Kombination von Rechen/Bitverknpfungs-Operation mit Zuweisung
Semantik (mit Operator-Platzhalter #)
a #= b ? a = a # (b)
Addition, Subtraktion: a += b a -= b
Multiplikation, Division: a *= b a /= b
Modulo-Division (Restbildung): a %= b
Und: a &= b
Oder: a |= b
Exclusiv-Oder: a ^= b
12. 12 Java-Einfhrungskurs Logische Operatoren Operanden: boolesche Ausdrcke
Ergebnis: boolescher Wert
logische Negation: !a
mit Kurzschluss-Auswertung
Auswertung der Operanden bricht ab, wenn Ergebnis feststeht
logisches Und: a && b
logisches Oder: a || b
ohne Kurzschluss-Auswertung
Auswertung aller Operanden, auch wenn ohne Einfluss auf Ergebnis
logisches Und: a & b
logisches Oder: a | b
logisches Exclusiv-Oder: a ^ b
13. 13 Java-Einfhrungskurs Vergleichsoperatoren Ergebnis immer boolescher Wert
fr alle Datentypen als Operanden:
Gleichheit a == b
Ungleichheit a != b
Vorsicht: Vergleich == nicht mit Zuweisung = verwechseln!
fr primitive Datentypen als Operanden:
"grer als", "grer als oder gleich" a > b a >= b
"kleiner als", "kleiner als oder gleich" a < b a <= b
fr Referenztypen und Klassen als Operanden:
Prfung des Datentyps a instanceof Typ
ergibt true, wenn das Objekt a eine Instanz der Klasse Typ ist
ergibt auch true, wenn Typ eine Oberklasse der Klasse von a ist
14. 14 Java-Einfhrungskurs Referenzgleichheit vs. Wertgleichheit Vorsicht beim Vergleich von Referenztypen!
== prft, ob Referenzen auf gleiche Instanz zeigen
!= prft, ob Referenzen auf verschiedene Instanzen zeigen
es findet kein Vergleich der Objektinhalte statt!
Konsequenzen
Vergleich von Objektinhalten nur mit geeignet berschriebener equals-Methode der Objekte mglich
Vergleich von Zeichenketten nur mit entsprechenden Methoden der Klasse String mglich
15. 15 Java-Einfhrungskurs Bedingte Ausdrcke Beschreibung von Alternativen in Ausdrcken
"if-then-else in einem Ausdruck"
Syntax
a = Bedingung ? WennWahr : WennFalsch
Bedingung muss ein Ausdruck mit booleschem Wert sein
WennWahr und WennFalsch mssen Ausdrcke mit gleichem Ergebnistyp wie a sein (alle Datentypen erlaubt)
Semantik
Wenn Bedingung wahr ist, bekommt a den Wert von WennWahr, sonst den von WennFalsch zugewiesen
Beispiel
Erwachsene zahlen einen Mitgliedsbeitrag von 10, Jugendliche 5
mitgliedsBeitrag = alter >= 18 ? 10 : 5;
16. 16 Java-Einfhrungskurs Zusammenfassung Ausdrcke
Anweisungen und Blcke
Operatoren
Konkatenations-Operator +
arithmetische Operatoren +, -, *, /, %, ++, --
Type Casting-Operator (typ)
Bit-Operatoren ~, &, |, ^, <<, >>, >>>
Zuweisungsoperatoren =, +=, -=, *=, /=, %=, &=, |=, ^=
logische Operatoren !, &&, &, ||, |, ^
Vergleichsoperatoren ==, !=, >, <, >=, <=, instanceof
Bedingungsoperator ?:
implizite und explizite Typumwandlung
Referenzgleichheit vs. Wertgleichheit
17. 17 Java-Einfhrungskurs YOU ARE HERE ? Organisation
Einfhrung
Objektorientierte Modellierung
Java-Sprachkonstrukte
Pakete und Zugriffskontrolle
Deklaration von Attributen, Methoden, Variablen
Ausdrcke und Anweisungen
Kontrollstrukturen
Ausnahmebehandlung
Java-Klassenbibliothek
Datenstrukturen
Netzwerk-Programmierung
Grafische Benutzungsoberflchen
18. 18 Java-Einfhrungskurs Kontrollstrukturen Anweisungen werden normalerweise nacheinander abgearbeitet
Bearbeitungsreihenfolge von Anweisungen und Blcken kann durch Kontrollstrukturen beeinflusst werden
bedingte Verzweigungen (if-else)
bewachte Anweisungen (switch)
Schleifen (for, while, do-while)
19. 19 Java-Einfhrungskurs Bedingte Verzweigung Auswahl aus zwei Alternativen und davon abhngige Programmfortsetzung
if (Bedingung)
Anweisung1;
else
Anweisung2;
Bedingung muss ein Ausdruck mit booleschem Wert sein
Anweisung1 wird ausgefhrt, wenn Bedingung true ist
Anweisung2 wird ausgefhrt, wenn Bedingung false ist
else-Teil ist optional
wenn Bedingung false ist, wird die if-Anweisung verlassen
20. 20 Java-Einfhrungskurs if-Anweisung: Beispiel mehrere Anweisungen lassen sich in Blcken gruppieren
if (laenderCode == 'D') { // Versand innerhalb Deutschlands
summe += VERSANDKOSTEN_INLAND;
System.out.println ("Bestellsumme: EUR " + summe);
}
else { // Versand ins Ausland
summe += VERSANDKOSTEN_AUSLAND;
System.out.println ("Order Total: EUR " + summe);
}
Unterschied zu ?:-Operator
mehrere Anweisungen im if- und else-Zweig mglich
if- und else-Zweig sind hier keine Ausdrcke gleichen Werts, sondern Anweisungen bzw. Blcke mehrerer Anweisungen
21. 21 Java-Einfhrungskurs Verschachtelte if-Anweisungen Bedingte Verzweigungen sind selbst auch Anweisungen
lassen sich als Anweisungen in if- oder else-Zweig einschachteln
if (laenderCode == 'D')
if (expressVersand == true)
summe += VERSANDKOSTEN_INLAND_EXPRESS;
else
summe += VERSANDKOSTEN_INLAND;
else
if (expressVersand == true)
summe += VERSANDKOSTEN_AUSLAND_EXPRESS;
else
summe += VERSANDKOSTEN_AUSLAND;
else bezieht sich immer auf das nchstliegende vorhergehende if, zu dem noch kein else definiert wurde
22. 22 Java-Einfhrungskurs Verschachtelte if-Anweisungen Vorsicht: Weglassen von else-Zweigen kann bei Verschachtelung Missverstndnisse auslsen!
if (laenderCode == 'D')
if (expressVersand == true)
summe += VERSANDKOSTEN_INLAND_EXPRESS;
else
if (expressVersand == true)
summe += VERSANDKOSTEN_AUSLAND_EXPRESS;
else
summe += VERSANDKOSTEN_AUSLAND;
Wo liegt der semantische Fehler im Beispiel?
23. 23 Java-Einfhrungskurs Verschachtelte if-Anweisungen Compiler richtet sich nicht nach der Einrckung,sondern nach der Reihenfolge der if/else-Zweige:
if (laenderCode == 'D')
if (expressVersand == true)
summe += VERSANDKOSTEN_INLAND_EXPRESS;
else
if (expressVersand == true)
summe += VERSANDKOSTEN_AUSLAND_EXPRESS;
else
summe += VERSANDKOSTEN_AUSLAND;
Vorsicht: Code an sich fehlerfrei (syntaktisch korrekt),verhlt sich aber nicht wie beabsichtigt (semantisch falsch)
semantische Fehler knnen vom Compiler nicht erkannt werden!
24. 24 Java-Einfhrungskurs Verschachtelte if-Anweisungen Vermeidung des Fehlers durch Einklammerung in Blcke({ }) oder Verwendung von leeren Anweisungen (;):
if (laenderCode == 'D') {
if (expressVersand == true)
summe += VERSANDKOSTEN_INLAND_EXPRESS;
else;
}
else
if (expressVersand == true)
summe += VERSANDKOSTEN_AUSLAND_EXPRESS;
else
summe += VERSANDKOSTEN_AUSLAND;
25. 25 Java-Einfhrungskurs Bewachte Anweisungen: Motivation Beispiel: Whrungsumrechnung im Online-Shop
wenn Warenversand nach Island: Summe in ISK ausgeben
wenn Warenversand nach Hong Kong: Summe in HK$ ausgeben
wenn Warenversand nach Japan: Summe in Yen ausgeben
ansonsten: Summe in Euro ausgeben
mgliche Realisierung (naiv):verschachtelte if-Anweisungen
26. 26 Java-Einfhrungskurs Bewachte Anweisungen: Motivation if (laenderCode == 'I') {
summe *= 838.536390;
waehrung = "ISK";
}
else
if (laenderCode == 'H') {
summe *= 8.300476;
waehrung = "HK$";
}
else
if (laenderCode == 'J') {
summe *= 128.501118;
waehrung = "YEN";
}
else
waehrung = "EUR";
System.out.println ("Summe: " + waehrung + summe);
unbersichtlich und fehleranfllig!
27. 27 Java-Einfhrungskurs switch-Anweisung bersichtlichere und mchtigere Lsung
Ausdruck wird ausgewertetund Wert mit Konstanten verglichen
Anweisungen ab case-Marke mit"passender" Konstante werdenausgefhrt
wenn keine Konstante "passt",werden Anweisungen abdefault-Marke ausgefhrt
bei break fhrt Programmnach der switch-Anweisung fort
28. 28 Java-Einfhrungskurs switch-Anweisung: Beispiel switch (laenderCode) {
case 'I': // Island
summe *= 838.536390;
waehrung = "ISK";
break;
case 'H': // Hong Kong
summe *= 8.300476;
waehrung = "HK$";
break;
case 'J': // Japan
summe *= 128.501118;
waehrung = "YEN";
break;
default: // andere Laender
waehrung = "EUR";
}
System.out.println ("Summe: " + waehrung + summe);
29. 29 Java-Einfhrungskurs switch-Anweisung: Regeln Ausdruck muss vom Typ short, byte, int oder char sein
Konstanten mssen vom gleichen Typ wie Ausdruck sein
default-Zweig ist optional
default- und case-Zweigedrfen leer sein
Vorsicht: Wenn ein case-Zweignicht mit break endet, wird mitder Ausfhrung des nchstenZweigs fortgefahren!
30. 30 Java-Einfhrungskurs switch-Anweisung: Beispiel 2 Beispiel: Fr Lieferungen nach Schottland und England soll in britische umgerechnet werden
switch (laenderCode) {
case 'I': // Island
summe *= 838.536390;
waehrung = "ISK";
break;
...
case 'S': // Schottland
case 'E': // England
summe *= 0.675636;
waehrung = "GBP";
break;
default:
waehrung = "EUR";
}
System.out.println ("Summe: " + waehrung + summe);
31. 31 Java-Einfhrungskurs Schleifen mehrfaches Durchlaufen der gleichen Anweisungoder des gleichen Anweisungsblocks
Zahl der Durchlufe wird von Laufbedingung bestimmt
Bedingungsschleife
while-Schleife
do-while-Schleife
Zhlschleife
for-Schleife
32. 32 Java-Einfhrungskurs while-Schleife Format
while (Bedingung) {
Anweisungen;
}
Bedingung muss ein boolescher Ausdruck sein
solange Bedingung true ist, werden Anweisung(en) ausgefhrt
Beachte: erster Test der Bedingung vor Ausfhrung der Anweisung
wenn Bedingung unmittelbar erfllt,werden Anweisungen berhaupt nicht ausgefhrt!
33. 33 Java-Einfhrungskurs while-Schleife: Beispiele Beispiel: Thermostat
while (hoersaal.getTemperatur < 20) {
hoersaal.heizen;
}
wenn Temperatur schon >= 20, wird gar nicht erst geheizt
Beispiel: Zhlen
int n = 0;
while (n < 10) {
System.out.println (n);
n++;
}
34. 34 Java-Einfhrungskurs do-while-Schleife Format
do {
Anweisungen;
} while (Bedingung);
Bedingung muss ein boolescher Ausdruck sein
solange Bedingung true ist, werden Anweisung(en) ausgefhrt
Beachte: erster Test der Bedingung nach einmaliger Ausfhrung der Anweisung
Schleife wird grundstzlich mindestens einmal durchlaufen!
35. 35 Java-Einfhrungskurs do-while-Schleife: Beispiele Beispiel: Eingabe einer positiven Zahl
do {
System.out.println ("n? ");
n = IOTools.readInteger();
} while (n < 0);
Eingabe wird abgefragt, bis eine Zahl >= 0 eingegeben wurde
Beispiel: Zhlen
int n = 0;
do {
System.out.println (n);
n++;
} while (n < 10);
36. 36 Java-Einfhrungskurs for-Schleife Format
for (Initialisierung; Bedingung; Schleifenfortschaltung) {
Anweisungen;
}
Initialisierung
komma-getrennte Liste von Ausdrcken
einmalig vor Beginn der Schleifenbearbeitung ausgewertet
typischerweise Initialisierung von Zhlvariablen
Bedingung
boolescher Ausdruck
wenn Bedingung true ist, werden Anweisungen ausgefhrt
ansonsten wird die Schleife abgebrochen
37. 37 Java-Einfhrungskurs for-Schleife Format
for (Initialisierung; Bedingung; Schleifenfortschaltung) {
Anweisungen;
}
Schleifenfortschaltung
komma-getrennte Liste von Ausdrcken
immer nach den Anweisungen im Schleifenrumpf ausgefhrt
typischerweise Weiterschaltung von Zhlvariablen
Anweisungen
Schleifenrumpf, der wiederholt werden soll
alle Teile sind optional
38. 38 Java-Einfhrungskurs for-Schleife: Bearbeitungsreihenfolge Format
for (Initialisierung; Bedingung; Schleifenfortschaltung) {
Anweisungen;
}
1. Ausfhren der Initialisierung
2. Prfen der Bedingung
3. wenn true, Ausfhren der Anweisungen, sonst Abbruch
4. Ausfhren der Schleifenfortschaltung
5. weiter mit 2.
39. 39 Java-Einfhrungskurs for-Schleife: Beispiele Beispiel: Zhlen
for (int n = 0; n < 10; n++) {
System.out.println (n);
}
Beispiel: mehrere Initialisierungen, Fortschaltungen
for (int n = 0, m = 10; n < 10; n++, m--) {
System.out.println ("n=" + n);
System.out.println ("m=" + m);
}
Beispiel: Endlosschleife
for ( ; ; ) {
System.out.println ("Und tglich grt das Murmeltier");
}
40. 40 Java-Einfhrungskurs Zusammenfassung bedingte Verzweigungen (if-else)
zwei Alternativen der Programmfortsetzungin Abhngigkeit von einer booleschen Bedingung
bewachte Anweisungen (switch-case-default)
mehrere Alternativen der Programmfortsetzungin Abhngigkeit vom Wert einer Ganzzahl- oder Zeichenvariable
while-Schleife
abhngig von boolescher Bedingung (vor Ausfhrung getestet)
do-while-Schleife
abhngig von boolescher Bedingung (nach Ausfhrung getestet)
for-Schleife
abhngig von Zhlvariablen, die im Schleifenkopf initialisiert, getestet und fortgeschaltet werden