Ausdrücke der Programmiersprache Java Hamburg 1
Ablauf des Vortrags 01. Eigenschaften von Ausdrücken 02. Arithmetische Operatoren 03. Relationale Operatoren 04. Logische Operatoren 05. Bitweise Operatoren 06. Zuweisungsoperator 07. Sonstige Operatoren 08. Operatoren für f r Objekte 09. Welche Operatoren es nicht gibt 10. Operator Vorrangregeln 11. Zusammenfassung 12. Quelle Hamburg 2
Eigenschaften von Ausdrücken kleinste ausführbare Einheit eines Programms mindestens ein Operator und ein oder mehrere Operanden Typ des Rückgabewerts R bestimmt sich aus den Typen der Operanden und der Art der Operation Anhand der Typen der Operanden entscheidet man zwischen numerische, relationale, logische, bitweise, Zuweisungs- und sonstige Operatoren Hamburg 3
Eigenschaften von Ausdrücken Stelligkeit eines Operators aus der Anzahl der Argumente Zweistellige Operatoren (+-*/ %.) Einstellige Operatoren (Vorzeichen, nicht) Dreistelliger Operator (?) Hamburg 4
Eigenschaften von Ausdrücken Bindungsregeln (Punkt vor Strich ) Auswertungsfolge bei gleicher Bindungskraft anhand der Assoziativität Bsp. a-b+c =(a-b)+c Bsp. i=2, (i=3)*i=9 Eigentliche Funktion: Rückgabewert R produzieren Hamburg 5
Eigenschaften von Ausdrücken Konzept Definite Assignment jede Variable muss vor ihrer ersten Anwendung initialisiert sein Sichergestellt durch den Compiler Hamburg 6
Eigenschaften von Ausdrücken 001 public static void Test(int i) 002 { 003 int k; 004 if (i >= 2) { 005 k = 5; 006 } 007 System.out.println(k); 008 } Hamburg 7
Eigenschaften von Ausdrücken 001 public static void Test(int i) 002 { 003 int k; 004 if (i <2) { 005 k = 5; 006 } 007 if (i >=2) { 008 K=6 009 } 010 System.out.println(k); 011 } Hamburg 8
Arithmetische Operatoren Addition, Subtraktion, Multiplikation, Division, Restwertoperator Prä- Postinkrementoperator (a++,++a( a++,++a) Prä- Postdekrementoperator (a--( --,--a) Ergebnistyp entspricht dem größ ößeren Datentyp Hamburg 9
Operator Bezeichnung +- Vorz,Sum,Diff */ Prod,Quotient % Restwert ++ Präinkrement Bedeutung a++ ergibt a+1, erhöht ht a um 1 ++ Postinkrement ++a ergibt a, erhöht ht a um 1 -- Prädekrement --a a ergibt a-1, a verringert um 1 -- Postdekrement a-- ergibt a, verringert um 1 Hamburg 10
Relationale Operatoren Vergleich mit logischem RückgabewertR Vergleich auch zwischen gemischten numerischen Datentypen ==,!=, <, >, <=, >= Prüfung bei Objekttypen auf Gleichheit und Ungleichheit Hamburg 11
Logische Operatoren Verknüpfung und Weiterverarbeitung boolscher Werte und, oder, Exklusiv oder, nicht und/oder auch als Short-Circuit Circuit-Evaluation (weiter rechts stehender Teilausdruck wird nur ausgewertet, wenn der vorhergende nicht bereits ein Ergebnis erzwingt) Hamburg 12
Logische Operatoren Operator Bezeichnung Bedeutung! NICHT & UND entspricht Ansi C && ODER entspricht Ansi C ^ Exklusiv Oder Hamburg 13
Logische Operatoren Operator && Bezeichnung UND mit Short- Circuit- Evaluation Bedeutung a && b ergibt true,, wenn sowohl a als auch b wahr sind. Ist a bereits falsch, so wird false zurückgegeben und b nicht mehr ausgewertet. Hamburg 14
Logische Operatoren Operator Bezeichnung Bedeutung ODER mit Short- Circuit- Evaluation a b ergibt true,, wenn mindestens einer der beiden Ausdrücke a oder b wahr ist. Ist bereits a wahr, so wird true zurückgegeben und b nicht mehr ausgewertet. Hamburg 15
Bitweise Operatoren Zugriff auf die Bits numerischer Operanden Operatoren wie Ansi C (~,,&,^,>>,<<) zusätzlich einen Rechtsschiebeoperator >>>, der das höchstwertige Bit auf Null setzt Hamburg 16
Bitweise Operatoren >> Rechtsschieben mit Vorzeichen a >> b ergibt den Wert, der entsteht, wenn alle Bits von a um b Positionen nach rechts geschoben werden. Falls das höchstwertige Bit gesetzt ist (a also negativ ist), wird auch das höchstwertige Bit des Resultats gesetzt. Hamburg 17
Bitweise Operatoren >>> Rechtsschieben ohne Vorzeichen a >>> b ergibt den Wert, der entsteht, wenn alle Bits von a um b Positionen nach rechts geschoben werden. Dabei wird das höchstwertige Bit des Resultats immer auf 0 gesetzt. Hamburg 18
Zuweisungsoperatoren Zuweisungsungsoperatoren wie Ansi C =,+=,-=,*=,/=,%=,&=, =,^=,<<=, =,*=,/=,%=,&=, =,^=,<<=, >>= Ausnahme: Rechtsschiebezuweisung mit Nullexpansion >>>= a>>>=b weist a den Wert von a>>>=b zu, Rückgabewert R a>>>=b Hamburg 19
Zuweisungsoperatoren Verwechslung von = und == in Java nahezu ausgeschlossen, da Kontrollausdruck vom Typ BOOLEAN sein muss. Hamburg 20
Fragezeichenoperator? Einziger dreiwertige Operator Erwartet einen logischen Ausdruck und zwei weitere Ausdrücke a? b : c Ergebnis ist b falls a wahr ist und c falls a falsch ist Hamburg 21
Type-Cast Cast-Operator (type)a a wird in einem Ausdruck vom Type type gewandelt Achtung: a kann nach der Typumwandlung nur noch auf der rechten Seite eines Zuweisungsoperators stehen. Hamburg 22
Type-Cast Cast-Operator Anwendung: Zuweisung von größ ößeren an kleinere Datentypen oder der Umwandlung von Objekttypen. Hamburg 23
Operatoren für f r Objekte Es gibt in Java Ausdrücke und Operatoren, die mit Objekten arbeiten oder Objekte produzieren. Hamburg 24
String Verkettungsoperator Operator +-+ zur Verkettung von Strings Mindestens ein Operand muss ein String sein, der zweite wird dann konvertiert. Ergebnis ist ein String Hamburg 25
String Verkettungsoperator public class Listing{ public static void main(string[] args) { int a = 5; double x = 3.14; System.out.println("a = " + a); System.out.println("x = " + x); } } Hamburg 26
String Verkettungsoperator Die Ausgabe des Programms lautet: a = 5 x = 3.14 Hamburg 27
String Verkettungsoperator Achtung bei Stringverkettung und Addition in einem Ausdruck Hamburg 28
String Verkettungsoperator public class Listing{ public static void main(string[] args) { } // Die +-Operatoren + werden von innen nach //außen und von links nach rechts ausgewertet System.out.println("3 + 4 = " + 3 + 4); } Hamburg 29
String Verkettungsoperator Ausgabe des Programms: 3+4=34 und nicht 3+4=7 Lösung: Teilausdruck klammern System.out.println("3 + 4 = " + (3 + 4)); Hamburg 30
Referenzgleichheit und Ungleichheit == und! = angewandt auf Objekte um zu überprüfen, ob die Referenzen auf die selben Objekte zeigen und nicht, ob Objekte inhaltlich übereinstimmen. Hamburg 31
Referenzgleichheit und Ungleichheit public class { public static void main(string[] args) { } } String a = new String("hallo"); "); String b = new String("hallo"); "); System.out.println("a == b liefert " + (a ==b)); System.out.println("a!= b liefert " + (a!= b)); Hamburg 32
Referenzgleichheit und Ungleichheit Ausgabe des Programms: a==b liefert false a!=b liefert true Hamburg 33
Referenzgleichheit und Ungleichheit Vergleicht man Strings, die zur Compile- Zeit angelegt sind, werden diese nur bei inhaltlicher Gleichheit als Instanzen der selben Klasse angesehen Auf inhaltliche Gleichheit wird mit der Methode equals überprüft Hamburg 34
Referenzgleichheit und Ungleichheit public class Listing{ public static void main(string[] args) { String a = new String("hallo"); "); String b = new String("hallo"); "); System.out.println("a.equals(b) ) liefert "a.equals(b)); } } Hamburg 35
Der instanceof- Operator Der Ausdruck a instanceof b liefert genau dann true,, wenn a und b Referenztypen sind und a eine Instanz der Klasse b oder einer ihrer Unterklassen ist. Hamburg 36
Der new-operator zum Erzeugen von Objekten und Arrays Rückgabewerte sind die Objekte und Arrays selbst Hamburg 37
Member-Zugriff Punkt-Operator ermöglicht den Zugriff auf Klassen- oder Instanzvariablen Beispiel a.b a ist der Name einer Klasse bzw. die Instanz einer Klasse, b der Name einer Klasse oder einer Instanzvariablen Rückgabewert ist der Inhalt der Variablen Typ des Ausdrucks entspricht dem der Variablen Hamburg 38
Methodenaufruf Es gibt in Java keine Funktionen, nur Methoden Der Typ des Ausdrucks entspricht dem vereinbarten Rückgabewert R der Methode Rückgabewert ist der Wert der return Anweisung Hamburg 39
Zugriff auf Array-Elemente Wie in Ansi C über eckige Klammern a[b] a ist der Name eines Arrays oder ein Ausdruck, der zu einem Array ausgewertet wird, und b ein Ausdruck, der zu einem int evaluiert werden kann Typ des Ausdrucks entspricht dem Basistypen des Arrays Rückgabewert ist der Inhalt des Arrayelements Hamburg 40
Welche Operatoren es nicht gibt Pointer Operatoren *,& sizeof Kommaoperator nur als syntaktischer Bestandteil in for-schleifen Schleifen Hamburg 41
Operator-Vorrangregeln Tabelle Vorrangregeln Java Buch java-krueger krueger\html\k100038.html Achtung: bitweise Operatoren binden schwächer cher als relationale und sind auf der gleichen Stufe mit den logischen Operatoren Hamburg 42
Operator-Vorrangregeln public class Listing{ public static void main(string[] args) ) { int i = 55; int j = 97; if (i & 15 < j & 15) { System.out.println("LowByte(55) < LowByte(97)"); } else{ System.out.println("LowByte(55) >= LowByte(97)"); } } } Fehler»Incompatible type for &. Can't convert int to boolean«: Hamburg 43
Operator-Vorrangregeln Lösung: Klammern setzen! public class Listing{ public static void main(string[] args) ) { int i = 55; int j = 97; if ((i & 15) < (j & 15)) { System.out.println("LowByte(55) < LowByte(97)"); } else{ System.out.println("LowByte(55) >= LowByte(97)"); } } } Hamburg 44
Operator-Vorrangregeln Die Ausgabe des Programms: LowByte(55) >= LowByte(97) Hamburg 45
Zusammenfassung Linksassoziativität Datenflussanalyse des Compilers implizite Konvertierung &/ Java entspricht &&/ in Ansi C Short-Circuit Circuit-Evaluation (&&/ ) >>> Rechtsschieben ohne VZ = und == nicht verwechselbar nach Type-Cast Cast-Operation => rechte Seite Verkettung von Strings mit +-+ Zugehörigkeit eines Objektes instanceof-operator Erzeugen von Arrays oder Objekten new-operator keine Funktionen, keine Pointer, kein sizeof,, kein Komma-Operator Hamburg 46
Die Quellen Handbuch der Java Programmierung 5.Auflage von Guido Krueger Hamburg 47
Vielen Dank für f r Eure Aufmerksamkeit Hamburg 48