580 likes | 1.05k Views
2. Der Java-Praxiskurs I. YOU ARE HERE ?. Einf?hrungObjektorientierte ModellierungJava-SprachkonstruktePakete und ZugriffskontrolleDeklaration von Methoden, Attributen, VariablenAusdr?cke und AnweisungenKontrollstrukturenAusnahmebehandlungInterfacesDatenstrukturenJava-KlassenbibliothekDat
E N D
1. 24. August 2012 Lehrstuhl für Angewandte Telematik / e-Business Java-Praxiskurs I Malte Hülder
Vincent Wolff-Marting
2. 2 Der Java-Praxiskurs I YOU ARE HERE ? Einführung
Objektorientierte Modellierung
Java-Sprachkonstrukte
Pakete und Zugriffskontrolle
Deklaration von Methoden, Attributen, Variablen
Ausdrücke und Anweisungen
Kontrollstrukturen
Ausnahmebehandlung
Interfaces
Datenstrukturen
Java-Klassenbibliothek
Dateien und Streams
Grafische Benutzungsoberflächen
Programmierstil
3. 3 Der Java-Praxiskurs I Klassendeklaration public class Buch {
...
}
4. 4 Der Java-Praxiskurs I Attributdeklaration public class Buch {
private String autoren;
private String titel;
private String verlag;
private int jahr;
...
}
5. 5 Der Java-Praxiskurs I Primitive Typen: Zahlen Wahrheitswert (Boolesche Logik)
boolean : true oder false
Ganzzahl (Zweierkomplement)
byte –27...(27–1); dezimal: 42, hexadezimal: 0x2A, oktal: 052
short –215...(215–1); dezimal, hexadezimal, oktal (s.o.)
int –231...(231–1); dezimal, hexadezimal, oktal (s.o.)
long –263...(263–1); dezimal: 100000000000L
Fließkommazahl (IEEE 754)
float 32 Bit; Dezimalbruch: 3.1415F, Exponent: -2.567E25F
double 64 Bit; Dezimalbruch, 3.1415D, Exponent: 1.79E-308D
6. 6 Der Java-Praxiskurs I Primitive Typen: Zeichen Zeichen (Unicode)
char
direkt: 'A'
Escape-Sequenz: '\"'
Unicode (hex): '\u0022'
oktaler ASCII-Code: '\42'
Escape-Sequenzen
'\"' doppeltes Anführungszeichen
'\'' einfaches Anführungszeichen
'\\' Backslash
'\b' Backspace (ASCII: 8)
'\t' Tabulator (ASCII: 9)
'\n' Zeilenwechsel (ASCII: 10)
'\f' Seitenwechsel (ASCII: 12)
'\r' Wagenrücklauf (ASCII: 13)
7. 7 Der Java-Praxiskurs I Referenztypen primitive Typen: Attribute enthalten Werte
komplexere Datenstrukturen werden als Objekte dargestellt
String-Objekte, Array-Objekte, Objekte beliebiger Klassen
Referenztypen: Attribute enthalten „Verweise“ auf Objekte
8. 8 Der Java-Praxiskurs I Referenzen auf Objekte mehrere Referenzen können auf das gleiche Objekt zeigen
Garbage Collection zerstört nicht mehr referenzierte Objekte
explizites „free“ oder „delete“ als Gegenstück zu new unnötig
9. 9 Der Java-Praxiskurs I Klasse Object alle Klassen haben Oberklasse Object
wichtige von Object geerbte Methoden
public String toString ()
gibt textuelle Repräsentation des Objekts aus
im Original Ausgabe von Klassenname und Objekt-Hashcode
sollte überschrieben werden, um Inhalt der Objektattribute auszugeben
wird implizit aufgerufen, wenn man ein Objekt an System.out.println() übergibt – hilfreich zum Testen
public boolean equals (Object obj)
vergleicht das Objekt mit dem in obj übergebenen Objekt
im Original nur Vergleich der Referenzen this und obj
sollte überschrieben werden, um Objektattribute inhaltlich zu vergleichen
weitere, systemnähere Methoden (hier nicht weiter betrachtet)
10. 10 Der Java-Praxiskurs I Strings (Zeichenketten) Zeichenketten werden durch Objekte der besonderen Klasse String dargestellt
keine explizite Instanziierung notwendig
direkte Zuweisung von Literalen möglich
String autor1 = "Doberkat";
String autor2 = "Dißmann";
Zeichencodierung in Strings analog zu char-Literalen
"Preis: \u20AC 123,45" ? Preis: € 123,45
Achtung: char-Literale stehen in einfachen,String-Literale in doppelten Anführungszeichen!
mehr über die Fähigkeiten der String-Klasse später
11. 11 Der Java-Praxiskurs I Arrays (Felder) Sammlung von Werten des gleichen Typs, wobei auf jeden Wert über einen Index zugegriffen werden kann
Deklaration
Typ[] feldname;
Typ kann primitiver Datentyp, String oder Klasse sein
Instanziierung
feldname = new Typ[Größe];
Instanziierung mit Initialisierung
feldname = new Typ[] {Wert0, Wert1, ..., Wertn};
Zugriff auf bestimmtes Feldelement
feldname[Index]
Bestimmung der Feldlänge
feldname.length
12. 12 Der Java-Praxiskurs I Arrays: Beispiel getrennte Deklaration, Instanziierung und Initialisierung:
String[] autoren; // Deklaration
autoren = new String[3]; // Instanziierung
autoren[0] = "Gosling"; // Initialisierung durch
autoren[1] = "Joy"; // individuellen Zugriff auf
autoren[2] = "Steele"; // einzelne Elemente
Deklaration, Instanziierung und Initialisierung in einem:
String[] autoren = new String[] {"Gosling", "Joy", "Steele"};
13. 13 Der Java-Praxiskurs I Zugriff auf Array-Elemente Die Nummerierung der Elemente beginnt immer bei 0 und ist immer positiv!
Bei einem Feld mit der Länge X ist der größte zulässige Index X-1!
String[] fahrstuhl = new String[4];
fahrstuhl[0] = “Erdgeschoss“;
fahrstuhl[1] = “Paulaner“;
fahrstuhl[2] = “Telematik / e-Business“;
fahrstuhl[3] = “Fachsprachenzentrum“;
14. 14 Der Java-Praxiskurs I Mehrdimensionale Arrays: Erzeugung Deklaration
Typ[][] feldname;
Zahl der Klammerpaare bestimmt Zahl der Dimensionen
Instanziierung
feldname = new Typ[Größe0][Größe1];
Instanziierung nicht rechteckiger Arrays
Größe einer Dimension abhängig vom Index der „Oberdimension“
feldname = new Typ[Größe0][];feldname[Index0] = new Typ[GrößeIndex0];
Instanziierung mit Initialisierung
feldname = new Typ[][] { {Wert00, Wert01, ..., Wert0n}, {Wert10, Wert11, ..., Wert1m}};
15. 15 Der Java-Praxiskurs I Mehrdimensionale Arrays: Zugriff Referenz auf bestimmtes Feldelement
feldname[Index0][Index1]
Referenz auf (n-1)-dimensionales Teilfeld
feldname[Index0]
Referenz auf n-dimensionales Gesamtfeld
feldname
Feldlänge der äußeren Dimension
feldname.length
Feldlänge der nächst-tieferen Dimension
feldname[Index0].length
16. 16 Der Java-Praxiskurs I Methodendeklaration import java.util.Date;
public class Buch {
public Buch (...) {...}
public int ausleihen (...) {...}
public void zurueckgeben (...) {...}
public void vormerken (...) {...}
public Date verlaengern (...) {...}
...
}
17. 17 Der Java-Praxiskurs I Methodendeklaration: Parameter Inhalt der Parameterliste
Typen der Parameter, die der Methode übergeben werden müssen
Namen, unter denen sie in der Methode angesprochen werden
public Buch (String initAutor, String initTitel,
String initVerlag, int initJahr) {...}
public void zurueckgeben () {...}
public Date verlaengern (int tage) {...}
Methodenaufruf mit Parametern als Literale oder Variable
Buch javaLehrbuch = new Buch ("Doberkat, Dißmann",
"Einführung in die OOP mit Java", "Oldenbourg", 1999);
...
int zeitraum = 14;
Date rueckgabeTermin = javaLehrbuch.verlaengern (zeitraum);
18. 18 Der Java-Praxiskurs I Parameterübergabe per Wert bei primitiven Typen
beim Aufrufen einer Methode werden die Parameterwertevom aufrufenden Programmteil in die Methode kopiert
Wertänderungen der Parameter in der Methodewirken sich nicht auf Werte außerhalb der Methode aus
19. 19 Der Java-Praxiskurs I Parameterübergabe per Referenz bei Referenztypen
beim Aufrufen einer Methode werden die Verweise auf die Objektevom aufrufenden Teil in die Methode kopiert, nicht die Objekte selbst
Veränderungen der Objekte in der Methodewirken sich auf Objekte außerhalb der Methode aus!
20. 20 Der Java-Praxiskurs I Methodensignatur Methoden werden über ihre Signatur identifiziert
bestehend aus Methodenname, Anzahl und Typen der Parameter
aber nicht Parameternamen und Rückgabetyp
Beispiele
verschiedene Methodennamen ? verschiedene Signaturen
public void ausleihen () {...}
public void zurueckgeben () {...}
gleiche Methodennamen, Parametertypen ? gleiche Signaturen? Compiler-Fehlermeldung
public void vormerken (String benutzerName) {...}
public boolean vormerken (String vormerkName) {...}
verschiedene Parametertypen ? verschiedene Signaturen
public Date verlaengern (int tage) {...}
public Date verlaengern () {...}
21. 21 Der Java-Praxiskurs I Überladen von Methoden Möglichkeit, unterschiedliches Methodenverhalten in Abhängigkeit von den gegebenen Parametern zu definieren
gleicher Methodenname, verschiedene Parameterlisten
public Date verlaengern (int tage) {
...
// Benutzerdefinierte Verlaengerung
leihFrist = leihFrist + tage;
...
}
public Date verlaengern () {
...
// Default-Verlaengerungsfrist (2 Wochen)
leihFrist = leihFrist + 14;
...
}
22. 22 Der Java-Praxiskurs I Überladen von Konstruktoren genau wie bei Methoden möglich
beliebte Technik für Initialisierungsvarianten von Objekten
wird kein Konstruktor deklariert,so wird implizit ein leerer Standardkonstruktor verwendet
public class Leer { public class Leer {
? public Leer () {}
} }
wird ein Konstruktor mit Parametern deklariert,so muss der leere Konstruktor explizit zusätzlich deklariert werden, um ebenfalls verwendet werden zu können!
23. 23 Der Java-Praxiskurs I Beenden von Methoden return-Anweisung beendet Methodenausführung und gibt Wert zurück
public Date verlaengern () {
...
Date rueckgabeTermin = new Date();
...
return rueckgabeTermin;
}
Bei Methoden ohne Rückgabewert (void) kann die Anweisung weggelassen oder ohne Variable (return;) angegeben werden
Verwendung mehrerer return-Anweisungen in einer Methode möglich
24. 24 Der Java-Praxiskurs I Variablen speichern (wie Attribute) veränderliche Werte versch. Typen
werden jedoch innerhalb einer Methode deklariert und existieren daher nur während der Ausführung der Methode!
Deklaration
vor Verwendung muss der Typ der Variablen festgelegt werden,d.h. welche Werte sie annehmen kann
alle primitiven Typen und Referenztypen möglich
kein Sichtbarkeitsmodifikator, da immer auf Methode begrenzt
mehrere Variablen gleichen Typs komma-getrennt aufführbar
public void methode () {
int dez, hex;
String[] autoren;
Date rueckgabeTermin;
...
}
25. 25 Der Java-Praxiskurs I Variablen: Initialisierung Zuweisung von Werten an Variablen mit Operator =
public void methode () {
...
dez = -42;
hex = 0xFFD6;
autoren = new String[2];
autoren[0] = "Doberkat";
autoren[1] = "Dißmann";
rueckgabeTermin = new Date();
...
}
Kombination von Deklaration und Initialisierung
public void methode () {
int dez = -42, hex = 0xFFD6;
String[] autoren = new String[] {"Doberkat", "Dißmann"};
Date rueckgabeTermin = new Date();
...
}
26. 26 Der Java-Praxiskurs I Konstanten: Primitive Typen Modifikator final bewirkt, dass der Wert von Variablen, Parametern, Attributen nach der Initialisierung fixiert ist
public class Klasse {
private final int ANTWORT_AUF_ALLES = 42;
public void methode (final double param) {
final int zahl; // Initialisierung nicht sofort nötig
...
zahl = 21; // einmalige Zuweisung möglich
...
zahl = 12; // Fehler: nur Initialisierung erlaubt
param = 2.345; // Fehler: Wert nach Übergabe fixiert
}
}
27. 27 Der Java-Praxiskurs I Konstanten: Referenztypen Modifikator final bewirkt nur, dass in Variablen, Parametern, Attributen gespeicherte Referenzen fixiert sind
Attribute der referenzierten Objekte können weiterhin geändert werden!
public void methode () {
final Klasse objekt = new Klasse(); // Referenz fixiert
...
objekt.x = 5; // Werte des ref. Objekts noch änderbar
...
objekt = null; // Fehler: Referenz nicht mehr änderbar
...
}
}
28. 28 Der Java-Praxiskurs I Blöcke und Sichtbarkeit (Scope) Java-Code ist in verschachtelten Blöcken strukturiert,die durch { } begrenzt werden
Variablen gelten nur in dem Block, in dem sie deklariert sind
Variablen können nicht in „Unterblöcken“ deklariert werden, wenn sie bereits in „Oberblöcken“ deklariert wurden
public void methode (int param) {
int param = 1; // Fehler: param schon deklariert
int zahl = 2; // zahl ab hier sichtbar
if (...) {
int zahl = 3; // Fehler: zahl bereits deklariert
zeichen = 'A'; // Fehler: zeichen nicht deklariert
char zeichen = 'B'; // zeichen erst ab hier sichtbar
}
zeichen = 'C'; // Fehler: zeichen nicht mehr dekl.
if (...) {
char zeichen = 'D'; // zeichen wieder deklarierbar
}
}
29. 29 Der Java-Praxiskurs I Überdecken von Attributen Deklaration von Variablen mit bereits verwendeten Attributnamen führt zur Überdeckung der Attribute
sowohl Variablen als auch Attribute bleiben zugänglich
Variablen über ihren Bezeichner, Attribute über this.Bezeichner
this ist Referenz auf Objekt, zu dem die Methode gehört
public class Buch() {
private int jahr;
...
public void setJahr(int jahr) {
this.jahr = jahr; // Attribut = Parameter
}
public int getJahr() {
return jahr; // Attribut zurückgeben
}
}
30. 30 Der Java-Praxiskurs I Überdecken, Überladen, Überschreiben Überdecken eines Attributs
Deklaration einer Methodenvariable mit gleichem Namenwie Attribut des Objekts
Zugriff auf Methodenvariable über den Namen
Zugriff auf überdecktes Attribut über this-Referenz und Name
Überladen einer Methode
Deklaration von Methoden mit gleichen Namen,aber unterschiedlichen Signaturen
Zugriff auf verschiedene Methoden anhand übergebener Parameter
Überschreiben einer Methode
Deklaration einer Methode mit gleichem Namen und gleicher Signatur wie Methode der Oberklasse
Zugriff auf Methode der Unterklasse über den Namen
Zugriff auf Methode der Oberklasse über super-Referenz und Name
31. 31 Der Java-Praxiskurs I Variablenarten lokale Variablen
in einer Methode (oder in einem Block einer Methode) deklariert
gültig von Deklaration bis Ende des Blocks/der Methode
Parameter
im Kopf einer Methode oder eines Konstrukturs deklariert
gültig in gesamter Methode/gesamtem Konstruktor
Attribute (Instanzvariablen)
in einer Klasse deklariert
in individuellen Objekten gültig von Instanziierung bis Zerstörung
Klassenvariablen
in einer Klasse mit Modifikator static deklariert
nicht an Instanzen der Klasse gebunden, sondern im gesamten Programm gültig
32. 32 Der Java-Praxiskurs I Klassenvariablen nicht an Instanzen der Klasse gebunden, sondern im gesamten Programm gültig
in UML: Kennzeichnung durch Unterstreichung oder alternativ durch „{isStatic}“
in Java: mit Schlüsselwort static deklarierte Attribute
public class Klasse {
public static int variable;
public static final String KONSTANTE = "Konstante";
...
}
Zugriff über den Klassennamen ohne vorherige Instanziierung eines Objekts
Klasse.variable = 42;
System.out.println (Klasse.KONSTANTE);
33. 33 Der Java-Praxiskurs I Klassenmethoden mit Schlüsselwort static deklarierte Methoden
dürfen ausschließlich auf Klassenvariablen und andere Klassenmethoden zugreifen, nicht auf „normale“ Attribute und Methoden!
public class Statistik {
public static float durchschnitt (...);
}
Zugriff über den Klassennamen ohne vorherige Instanziierung eines Objekts
float avg = Statistik.durchschnitt (...);
public static void main() ist Klassenmethode
zu Programmbeginn können noch keine Objekte instanziiert sein
34. 34 Der Java-Praxiskurs I main-Klassenmethode in BlueJ nicht über ein Objekt aufrufbar, sondern nur über die Klasse
35. 35 Der Java-Praxiskurs I Zusammenfassung Sichtbarkeitsmodifikatoren
public, protected, (paketsichtbar), private
Primitive Datentypen und ihre Literale
boolean; short, byte, int, long; float, double; char
Referenzdatentypen
Referenzen auf Objekte, Garbage Collection
Object, String, Arrays
Methodendeklaration und Methodensignatur
Parameterübergabe per Wert und per Referenz
Überladen von Methoden und Konstruktoren
Deklaration von Variablen und Konstanten
Überdecken von Attributen
Blöcke und Sichtbarkeit
Klassenvariablen und –methoden (static)
36. 36 Der Java-Praxiskurs I YOU ARE HERE ? Einführung
Objektorientierte Modellierung
Java-Sprachkonstrukte
Pakete und Zugriffskontrolle
Deklaration von Methoden, Attributen, Variablen
Ausdrücke und Anweisungen
Kontrollstrukturen
Ausnahmebehandlung
Interfaces
Datenstrukturen
Java-Klassenbibliothek
Dateien und Streams
Grafische Benutzungsoberflächen
Programmierstil
37. 37 Der Java-Praxiskurs I 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
38. 38 Der Java-Praxiskurs I 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;
39. 39 Der Java-Praxiskurs I Operatoren Konkatenations-Operator +
arithmetische Operatoren +, -, *, /, %, ++, --
Type Casting-Operator (typ)
Bit-Operatoren ~, &, |, ^, <<, >>, >>>
Zuweisungsoperatoren =, +=, -=, *=, /=, %=, &=, |=, ^=
logische Operatoren !, &&, &, ||, |, ^
Vergleichsoperatoren ==, !=, >, <, >=, <=, instanceof
Bedingungsoperator ?:
40. 40 Der Java-Praxiskurs I Operatorprioritäten 14 Stufen (hoch bis niedrig)
++, --, Vorzeichen, ~, !, (typ)
*, /, %
+, -
<<, >>, >>>
<, <=, >, >=, instanceof
==, !=
&
^
|
&&
||
?:
=
*=, /=, %=, -=, <<=, >>=, >>>=, &=, ^=, |=
Prioritäten können durch Klammerung geändert werden
41. 41 Der Java-Praxiskurs I 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"
42. 42 Der Java-Praxiskurs I 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;
43. 43 Der Java-Praxiskurs I 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!
44. 44 Der Java-Praxiskurs I 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! Bei Konvertierung von...
großen 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)
45. 45 Der Java-Praxiskurs I 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
46. 46 Der Java-Praxiskurs I 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
47. 47 Der Java-Praxiskurs I 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
48. 48 Der Java-Praxiskurs I 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
49. 49 Der Java-Praxiskurs I 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
50. 50 Der Java-Praxiskurs I 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;
51. 51 Der Java-Praxiskurs I 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
52. 52 Der Java-Praxiskurs I Your Mission
53. 53 Der Java-Praxiskurs I 1. Spiel, Satz und Sieg gegeben: Codefragment - Klasse TennisSpieler
UML-Diagramm
Neue Objekte erzeugen
this-Referenz
Zugriff auf die Attribute und Methoden
Konstruktoren
Instanz- und Klassenvariablen
Verschiedene Erweiterungen der Klasse TennisSpieler
54. 54 Der Java-Praxiskurs I 2. Mensch, ärgere Dich nicht! Die Klasse Mensch
Klassenvariablen
Konstruktoren
Get- und Set-Methoden
Die toString-Methode
Die Klasse TestMensch
Ungleiche Vergleiche
55. 55 Der Java-Praxiskurs I 3. Inkrement und kein Ende gegeben: Java-Programm mit Inkrement-Operatoren
Programmablauf nachvollziehen
Vorhersage überprüfen
56. 56 Der Java-Praxiskurs I 4. Dosenravioli gegeben: Programmfragment
mathematische Formeln für geometrische Berechnungen in Java implementieren
57. 57 Der Java-Praxiskurs I
58. 58 Der Java-Praxiskurs I