Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Java- Syntax. Bestandteile der Sprache Java: Ausdrücke Anweisungen.

Ähnliche Präsentationen


Präsentation zum Thema: "Java- Syntax. Bestandteile der Sprache Java: Ausdrücke Anweisungen."—  Präsentation transkript:

1 Java- Syntax

2 Bestandteile der Sprache Java: Ausdrücke Anweisungen

3 Ausdruck

4 Ein Ausdruck ist eine Folge von Operatoren und Operanden. Ein Ausdruck ist - grob gesagt - ein Term oder eine mathematische Formel. Jeder Ausdruck hat einen Wert !!

5 Es gibt folgende Ausdrücke: - arithmetische Ausdrücke - relationale und logische Ausdrücke - Zuweisungsausdrücke

6 Arithmetische Ausdrücke

7 Beispiele: In allen folgenden Beispielen wird stillschweigend vorausgesetzt, dass die benutzten Variablen alle vorher deklariert wurden!!!

8 3 Literal (Konstante), Wert des Ausdrucks: Wert des Ausdrucks: 6 3+ kein Ausdruck (syntaktisch falsch) xy Variable, Wert des Ausdrucks: unbekannt, da der Wert von xy in diesem Zusammenhang dem Programmierer nicht bekannt ist. 2x keine Variable: Variablenname darf nicht mit einer Ziffer beginnen ! (syntaktisch falsch)

9 3+x-2x kein Ausdruck, da * in 2x fehlt (syntaktisch falsch) x+3 x-y/b+3-(3+y)*4 Wert des Ausdrucks: unbekannt 27%4 ganzzahliger Rest bei der Division: 27 : 4 = 6 Rest 3, also Wert des Ausdrucks: 3 / bedeutet Division, zuerst werden Klammern ausgewertet, dann Punkt vor Strich Ausdruck, Wert des Ausdrucks: unbekannt

10 26%4 a++ erhöht a um 1, Wert des Ausdrucks: unbekannt b-- verringert b um 1, Wert des Ausdrucks: unbekannt ganzzahliger Rest bei der Division: 26 : 4 = 6 Rest 2, also Wert des Ausdrucks: 2 25%4 ganzzahliger Rest bei der Division: 25 : 4 = 6 Rest 1, also Wert des Ausdrucks: 1 24%4 ganzzahliger Rest bei der Division: 24 : 4 = 6 Rest 0, also Wert des Ausdrucks: 0

11 Relationale und logische Ausdrücke

12 Relationale und logische Ausdrücke sind wahr (true) oder falsch (false) und haben den Datentyp boolean

13 Kleiner Ausflug in die formale Logik

14 Die zusammengesetzte Aussage A UND B ist nur wahr, wenn A und B wahr sind, ansonsten ist sie falsch

15 Die zusammengesetzte Aussage A ODER B ist nur falsch, wenn A und B falsch sind, ansonsten ist sie wahr.

16 Die negierte Aussage NICHT A ist falsch, wenn A wahr ist und wahr, wenn A falsch ist.

17 Diese Zusammenhänge lassen sich auch mit einer sogenannten Wahrheitstafeln darstellen:

18 ABA und BA oder B WWWW WFFW FWFW FFFF

19 Anicht A WF FW

20 Java kennt aber kein "wahr" oder "falsch", sondern: AusdruckWert falschfalse wahrtrue

21 Beispiele:

22 0 < 5 8 > 9 x+3 >= 5 1 == 2 Wert: false 1 != 3 Wert: true Wert: false Wert: true Wert hängt von x ab: Für x grösser oder gleich 2: true Für x kleiner 2: false mathematisches = mathematisches

23 4 < x < 7 Relationale Operatoren sind zweistellig und dürfen nur mit zwei Operanden arbeiten. Deswegen ist folgende Zeichenkette kein Ausdruck:

24 Logische Ausdrücke

25 Beispiele:

26 a && b x || y (x>0) && (x<10) !(x

27 Operatoren Arithmetische Operatoren: + - * / %++-- Vergleichsoperatoren: >= == != Logische Operatoren: ! && || Bitweise Operatoren: ~& |

28 Zuweisungsausdrücke

29 Ein Zuweisungsausdruck enthält einen Zuweisungsoperator wie z.B. = += ++ --

30 Ein Zuweisungsausdruck ist ein Ausdruck, keine Anweisung, der eine Wirkung (Nebenwirkung) hat, nämlich die Zuweisung. Diese Zuweisung verändert den Wert der Variablen.

31 Da ein Zuweisungsausdruck ein Ausdruck ist, hat ein Zuweisungsausdruck also einen Wert !!!

32 Beispiele:

33 a = 17 x = 3+2*4 Wert des Ausdrucks : 17 Nebenwirkung: Wert der Variablen a ist 17 Wert des Ausdrucks : 11 Nebenwirkung: Wert der Variablen x ist 11 Punkt vor Strich. Dies bedeutet, dass dass z.B. die Multiplikation Priorität (=Vorrang) vor der Addition hat

34 y = x = 2 Wie wird der Wert diesen Ausdrucks berechnet ?

35 y = x = 2 Wert des Ausdrucks : 2 Nebenwirkung: Wert der Variablen y ist 2 Abarbeitung: von rechts nach links Wert des Ausdrucks : 2 Nebenwirkung: Wert der Variablen x ist 2 Warum Abarbeitung von rechts nach links? Weil dies in der Norm so festgelegt ist! Nähers dazu später! (Assoziativität = Auswertung eines Ausdrucks von rechts oder links)

36 a=(x=5)*3 Wert des Ausdrucks : 15 Nebenwirkung: Wert der Variablen a ist 15 Wert des Ausdrucks : 5 Nebenwirkung: Wert der Variablen x ist 5

37 a++ a-- Erhöht den Wert der Variablen a um eins nach der Verwendung in einem Ausdruck. Verringert den Wert der Variablen a um eins nach der Verwendung in einem Ausdruck. ++a Erhöht den Wert der Variablen a um eins vor der Verwendung in einem Ausdruck. --a Verringert den Wert der Variablen a um eins vor der Verwendung in einem Ausdruck.

38 Beispiele dazu: Welche Bildschirmausgaben erzeugt folgendes Programm? (Zwecks Platzersparnis wird hier wieder System.out.println durch println abgekürzt.)

39 int main(){ int i; i=10; println("Wert nach i++ ist: "+ i++); println("Wert nach i–- ist: "+ i--); println("Wert nach ++i ist: "+ ++i); println("Wert nach --i ist: "+ --i); } Wert von i wird erst nach dieser Anweisung erhöht Wert von i wird erst nach dieser Anweisung verringert Wert von i wird schon vor dieser Anweisung erhöht Wert von i wird schon vor dieser Anweisung verringert also Bildschirmausgabe:

40 println("Wert nach i++ ist: "+ i++); Durch welche 2 Anweisungen kann man diese Anweisung also simulieren? println("Wert nach i++ ist: "+ i); i=i+1; println("Wert nach i-- ist: "+ i--); println("Wert nach i-- ist: "+ i); i=i-1; println("Wert nach ++i ist: "+ ++i); i=i+1; println("Wert nach ++i ist: "+ i); println("Wert nach --i ist: "+ --i); i=i-1; println("Wert nach --i ist: "+ i); Durch welche 2 Anweisungen kann man diese Anweisung also simulieren?

41 x+=y Dies ist eine abkürzende Schreibweise für... x=x+y Das gleiche gilt für: *=-=usw.

42 Priorität und Assoziativität bei Operatoren.

43 Ein Operator hat höhere Priorität bedeutet, daß die zugehörige Operation zuerst ausgeführt wird, wie z.B: 3+5*6 (Punkt vor Strich) = 3 + (5 * 6) = 33 also hat * eine höhere Priorität als + und nicht: (3 + 5) * 6 = 48

44 Wenn zwei Operatoren die gleiche Priorität haben, bestimmt die Assoziativität, welche Operation zuerst ausgeführt wird.

45 Beispiel:

46 * und / haben die gleiche Priorität und die Assoziativität von Links nach Rechts (kurz: L).

47 3 * 6 / 9 Wie wird der Wert dieses Ausdrucks berechnet ?

48 3 * 6 / Deswegen wird zuerst 3*6 (= 18) berechnet und dann 18/9 (=2)

49 3 * 6 / Welches Ergebnis hat der Ausdruck, wenn * und / rechtsassoziativ wären? da 6 und 9 integer sind

50 60 / 10 / 2 Wie wird der Wert dieses Ausdrucks berechnet ?

51 60 / 10 / Deswegen wird zuerst 60/10 (= 6) berechnet und dann 6/2 (=3)

52 60 / 10 / Welches Ergebnis hat der Ausdruck, wenn / rechtsassoziativ wäre?

53 Bemerkungen: Ein einstelliger (unärer) Operator arbeitet mit einem Operand, wie zum Beispiel: -x Ein zweistelliger (binärer) Operator arbeitet mit 2 Operanden, wie zum Beispiel: x-y, x+y, x*y, x/y, x%y,

54 Ein dreistelliger (ternärer) Operator arbeitet mit 3 Operanden. In Java gibt es nur einen ternären Operator (den wir hier nicht besprechen).

55 Hier werden folgende Abkürzungen benutzt: A : Assoziativität L : Linksassoziativität R : Rechtsassoziativität S : Stelligkeit U : unär (einstellig) B : binär (zweistellig) T : ternär (dreistellig)

56 PrioritätOperatorenBedeutungAssoz. 1[ ] Array-IndexL ( ) MethodenaufrufL. KomponentenzugriffL ++ PostinkrementL -- PostdekrementL 2++ PräinkrementR -- PrädekrementR + - Vorzeichen (unär)R ~ bitweises KomplementR ! logischer NegationsoperatorR 3(type) Typ-UmwandlungR new ErzeugungR 4* / % Multiplikation, Division, RestL Addition, SubtraktionL + StringverkettungL 6 << LinksshiftL >> Vorzeichenbehafteter RechtsshiftL >>> Vorzeichenloser RechtsshiftL 7 < <= kleiner, kleiner gleichL > >= größer, größer gleichL instanceof Typüberprüfung eines ObjektsL 8 == GleichheitL != UngleichheitL 9 & bitweises UNDL 10 ^ bitweises Exclusiv-ODERL 11 | bitweises ODERL 12 && & logisches UNDL 13 | | | logisches ODERL 14 ? : BedingungsoperatorR 15 = WertzuweisungR *= /= %= kombinierter ZuweisungsoperatorR += -= <<= >>= >>>= &= ^= |= Priorität nimmt von oben nach unten ab

57 Welche Operatoren sind rechtsassoziativ, welche linksassoziativ?

58 Rechtsassoziativ sind: Zuweisungsoperatoren, der Bedingungsoperator, und unäre Operatoren. Linksassoziativ sind: alle anderen

59 Wie wird der Wert dieses Ausdrucks, der aus boolean-Variablen besteht, berechnet (beachten Sie Priorität und Assoziativität) ? a==(b && (b!=a)) (a==(b && b))!=a (a==b) && (b!=a) a==b && b!=a Hier ein paar Vorschläge:

60 Diese Operatoren haben die gleiche Priorität. Sie ist grösser als die Priorität von && Welch(e)r Operator(en) hat (haben) die höchste Priorität ? && ist linksassoziativ, deswegen wird dieser Ausdruck zuerst ausgewertet und dann... Da aus logischen Gründen einer dieser 2 Ausdrücke falsch ist, hat dieser Ausdruck den Wert false dieser Ausdruck a==b && b!=a


Herunterladen ppt "Java- Syntax. Bestandteile der Sprache Java: Ausdrücke Anweisungen."

Ähnliche Präsentationen


Google-Anzeigen