E N D
1. 1 Java-Einführungskurs YOU ARE HERE ? Organisation
Einführung
Objektorientierte Modellierung
Java-Sprachkonstrukte
Pakete und Zugriffskontrolle
Deklaration von Attributen, Methoden, Variablen
Ausdrücke und Anweisungen
Kontrollstrukturen
Ausnahmebehandlung
Java-Klassenbibliothek
Datenstrukturen
Netzwerk-Programmierung
Grafische Benutzungsoberflächen
2. 2 Java-Einführungskurs Ausdrücke und Anweisungen Ausdrücke sind mehrere durch Operatoren verknüpfte 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 zurückgegeben
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-Einführungskurs Anweisungen und Blöcke Anweisungen werden mit Semikolon (;) abgeschlossen
leere Anweisung: einzelnes Semikolon
Anweisung;
; // leere Anweisung
Anweisung;
Anweisungen werden der Reihe nach abgearbeitet
Blöcke (begrenzt durch geschweifte Klammern)fassen Sequenzen von Anweisungen zusammen
Anweisung;
{
Anweisung;
Anweisung;
Anweisung;
}
Anweisung;
4. 4 Java-Einführungskurs Operatoren Konkatenations-Operator +
arithmetische Operatoren +, -, *, /, %, ++, --
Type Casting-Operator (typ)
Bit-Operatoren ~, &, |, ^, <<, >>, >>>
Zuweisungsoperatoren =, +=, -=, *=, /=, %=, &=, |=, ^=
logische Operatoren !, &&, &, ||, |, ^
Vergleichsoperatoren ==, !=, >, <, >=, <=, instanceof
Bedingungsoperator ?:
5. 5 Java-Einführungskurs Operatorprioritäten 14 Stufen (hoch bis niedrig)
++, --, Vorzeichen, ~, !, (typ)
*, /, %
+, -
<<, >>, >>>
<, <=, >, >=, instanceof
==, !=
&
^
|
&&
||
?:
=
*=, /=, %=, -=, <<=, >>=, >>>=, &=, ^=, |=
Prioritäten können durch Klammerung geändert werden
6. 6 Java-Einführungskurs String-Konkatenation Operanden: Strings und ggf. primitive Datentypen
Ergebnis: String
Verknüpfung (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-Einführungskurs 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 für Ganzzahlen)
Präinkrement, Prädekrement: ++a --a
Postinkrement, Postdekrement: a++ a--
Präfix-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-Einführungskurs 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 Überläufen
short a = 2, b = 30000;
int c = a * b; // 60000 wäre zu groß für short
Vorsicht bei Division von Ganzzahlen
short a = 7, b = 2;
int c = a / b; // ergibt 3!
9. 9 Java-Einführungskurs explizite Typumwandlung Type Casting-Operator: (typ) variable
Vorsicht: Operator hat sehr hohe Priorität!
ggf. Klammerung von zu castenden Ausdrücken notwendig
short a = 2, b = 100, c; short a = 7, b = 2;
c = (short) (a * b); float c = (float) a / b;
Vorsicht: Datenverlust möglich!
große in kleine Ganzzahlen: Verlust der höherwertigen Bits
Fließkommazahlen in Ganzzahlen: Verlust der Nachkommastellen
double d = -67.89;
int i = (int) d; // -67
long-Zahlen in Fließkommazahlen: u.U. nicht exakt möglich
auch explizites Casting von Referenztypen möglich
String-Umwandlungen über besondere Methoden (später)
10. 10 Java-Einführungskurs Bit-Operatoren Operanden und Ergebnis: ganzzahlige primitive Datentypen
bitweise Invertierung: ~a
bitweise Verknüpfung
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-Einführungskurs Zuweisungsoperatoren für alle Datentypen als Ausdruck und Ergebnis:
Zuweisungsoperator a = b
Variable auf linker Seite erhält Wert des Ausdrucks auf rechter Seite
für Zahlentypen als Operanden und als Ergebnis:
Kombination von Rechen/Bitverknüpfungs-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-Einführungskurs Logische Operatoren Operanden: boolesche Ausdrücke
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-Einführungskurs Vergleichsoperatoren Ergebnis immer boolescher Wert
für alle Datentypen als Operanden:
Gleichheit a == b
Ungleichheit a != b
Vorsicht: Vergleich == nicht mit Zuweisung = verwechseln!
für primitive Datentypen als Operanden:
"größer als", "größer als oder gleich" a > b a >= b
"kleiner als", "kleiner als oder gleich" a < b a <= b
für Referenztypen und Klassen als Operanden:
Prüfung 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-Einführungskurs Referenzgleichheit vs. Wertgleichheit Vorsicht beim Vergleich von Referenztypen!
== prüft, ob Referenzen auf gleiche Instanz zeigen
!= prüft, 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 möglich
Vergleich von Zeichenketten nur mit entsprechenden Methoden der Klasse String möglich
15. 15 Java-Einführungskurs Bedingte Ausdrücke Beschreibung von Alternativen in Ausdrücken
"if-then-else in einem Ausdruck"
Syntax
a = Bedingung ? WennWahr : WennFalsch
Bedingung muss ein Ausdruck mit booleschem Wert sein
WennWahr und WennFalsch müssen Ausdrücke 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-Einführungskurs Zusammenfassung Ausdrücke
Anweisungen und Blöcke
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-Einführungskurs YOU ARE HERE ? Organisation
Einführung
Objektorientierte Modellierung
Java-Sprachkonstrukte
Pakete und Zugriffskontrolle
Deklaration von Attributen, Methoden, Variablen
Ausdrücke und Anweisungen
Kontrollstrukturen
Ausnahmebehandlung
Java-Klassenbibliothek
Datenstrukturen
Netzwerk-Programmierung
Grafische Benutzungsoberflächen
18. 18 Java-Einführungskurs Kontrollstrukturen Anweisungen werden normalerweise nacheinander abgearbeitet
Bearbeitungsreihenfolge von Anweisungen und Blöcken kann durch Kontrollstrukturen beeinflusst werden
bedingte Verzweigungen (if-else)
bewachte Anweisungen (switch)
Schleifen (for, while, do-while)
19. 19 Java-Einführungskurs Bedingte Verzweigung Auswahl aus zwei Alternativen und davon abhängige Programmfortsetzung
if (Bedingung)
Anweisung1;
else
Anweisung2;
Bedingung muss ein Ausdruck mit booleschem Wert sein
Anweisung1 wird ausgeführt, wenn Bedingung true ist
Anweisung2 wird ausgeführt, wenn Bedingung false ist
else-Teil ist optional
wenn Bedingung false ist, wird die if-Anweisung verlassen
20. 20 Java-Einführungskurs if-Anweisung: Beispiel mehrere Anweisungen lassen sich in Blöcken 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 möglich
if- und else-Zweig sind hier keine Ausdrücke gleichen Werts, sondern Anweisungen bzw. Blöcke mehrerer Anweisungen
21. 21 Java-Einführungskurs 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 nächstliegende vorhergehende if, zu dem noch kein else definiert wurde
22. 22 Java-Einführungskurs Verschachtelte if-Anweisungen Vorsicht: Weglassen von else-Zweigen kann bei Verschachtelung Missverständnisse auslösen!
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-Einführungskurs Verschachtelte if-Anweisungen Compiler richtet sich nicht nach der Einrückung,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),verhält sich aber nicht wie beabsichtigt (semantisch falsch)
semantische Fehler können vom Compiler nicht erkannt werden!
24. 24 Java-Einführungskurs Verschachtelte if-Anweisungen Vermeidung des Fehlers durch Einklammerung in Blöcke({ }) 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-Einführungskurs Bewachte Anweisungen: Motivation Beispiel: Währungsumrechnung 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
mögliche Realisierung (naiv):verschachtelte if-Anweisungen
26. 26 Java-Einführungskurs 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);
unübersichtlich und fehleranfällig!
27. 27 Java-Einführungskurs switch-Anweisung übersichtlichere und mächtigere Lösung
Ausdruck wird ausgewertetund Wert mit Konstanten verglichen
Anweisungen ab case-Marke mit"passender" Konstante werdenausgeführt
wenn keine Konstante "passt",werden Anweisungen abdefault-Marke ausgeführt
bei break fährt Programmnach der switch-Anweisung fort
28. 28 Java-Einführungskurs 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-Einführungskurs switch-Anweisung: Regeln Ausdruck muss vom Typ short, byte, int oder char sein
Konstanten müssen vom gleichen Typ wie Ausdruck sein
default-Zweig ist optional
default- und case-Zweigedürfen leer sein
Vorsicht: Wenn ein case-Zweignicht mit break endet, wird mitder Ausführung des nächstenZweigs fortgefahren!
30. 30 Java-Einführungskurs switch-Anweisung: Beispiel 2 Beispiel: Für 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-Einführungskurs Schleifen mehrfaches Durchlaufen der gleichen Anweisungoder des gleichen Anweisungsblocks
Zahl der Durchläufe wird von Laufbedingung bestimmt
Bedingungsschleife
while-Schleife
do-while-Schleife
Zählschleife
for-Schleife
32. 32 Java-Einführungskurs while-Schleife Format
while (Bedingung) {
Anweisungen;
}
Bedingung muss ein boolescher Ausdruck sein
solange Bedingung true ist, werden Anweisung(en) ausgeführt
Beachte: erster Test der Bedingung vor Ausführung der Anweisung
wenn Bedingung unmittelbar erfüllt,werden Anweisungen überhaupt nicht ausgeführt!
33. 33 Java-Einführungskurs while-Schleife: Beispiele Beispiel: Thermostat
while (hoersaal.getTemperatur < 20) {
hoersaal.heizen;
}
wenn Temperatur schon >= 20°, wird gar nicht erst geheizt
Beispiel: Zählen
int n = 0;
while (n < 10) {
System.out.println (n);
n++;
}
34. 34 Java-Einführungskurs do-while-Schleife Format
do {
Anweisungen;
} while (Bedingung);
Bedingung muss ein boolescher Ausdruck sein
solange Bedingung true ist, werden Anweisung(en) ausgeführt
Beachte: erster Test der Bedingung nach einmaliger Ausführung der Anweisung
Schleife wird grundsätzlich mindestens einmal durchlaufen!
35. 35 Java-Einführungskurs 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: Zählen
int n = 0;
do {
System.out.println (n);
n++;
} while (n < 10);
36. 36 Java-Einführungskurs for-Schleife Format
for (Initialisierung; Bedingung; Schleifenfortschaltung) {
Anweisungen;
}
Initialisierung
komma-getrennte Liste von Ausdrücken
einmalig vor Beginn der Schleifenbearbeitung ausgewertet
typischerweise Initialisierung von Zählvariablen
Bedingung
boolescher Ausdruck
wenn Bedingung true ist, werden Anweisungen ausgeführt
ansonsten wird die Schleife abgebrochen
37. 37 Java-Einführungskurs for-Schleife Format
for (Initialisierung; Bedingung; Schleifenfortschaltung) {
Anweisungen;
}
Schleifenfortschaltung
komma-getrennte Liste von Ausdrücken
immer nach den Anweisungen im Schleifenrumpf ausgeführt
typischerweise Weiterschaltung von Zählvariablen
Anweisungen
Schleifenrumpf, der wiederholt werden soll
alle Teile sind optional
38. 38 Java-Einführungskurs for-Schleife: Bearbeitungsreihenfolge Format
for (Initialisierung; Bedingung; Schleifenfortschaltung) {
Anweisungen;
}
1. Ausführen der Initialisierung
2. Prüfen der Bedingung
3. wenn true, Ausführen der Anweisungen, sonst Abbruch
4. Ausführen der Schleifenfortschaltung
5. weiter mit 2.
39. 39 Java-Einführungskurs for-Schleife: Beispiele Beispiel: Zählen
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 täglich grüßt das Murmeltier");
}
40. 40 Java-Einführungskurs Zusammenfassung bedingte Verzweigungen (if-else)
zwei Alternativen der Programmfortsetzungin Abhängigkeit von einer booleschen Bedingung
bewachte Anweisungen (switch-case-default)
mehrere Alternativen der Programmfortsetzungin Abhängigkeit vom Wert einer Ganzzahl- oder Zeichenvariable
while-Schleife
abhängig von boolescher Bedingung (vor Ausführung getestet)
do-while-Schleife
abhängig von boolescher Bedingung (nach Ausführung getestet)
for-Schleife
abhängig von Zählvariablen, die im Schleifenkopf initialisiert, getestet und fortgeschaltet werden