Java- Syntax

Preview:

DESCRIPTION

Java- Syntax. Bestandteile der Sprache Java:. Ausdrücke. Anweisungen. Ausdruck. 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 !!. Es gibt folgende Ausdrücke:. - PowerPoint PPT Presentation

Citation preview

Java- Syntax

Bestandteile der Sprache Java:

•Ausdrücke

•Anweisungen

Ausdruck

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 !!

Es gibt folgende Ausdrücke:

- arithmetische Ausdrücke

- relationale und logische Ausdrücke

- Zuweisungsausdrücke

ArithmetischeAusdrücke

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

3Literal (Konstante),

Wert des Ausdrucks: 3

3+5-2 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)

3+x-2x kein Ausdruck, da * in 2x fehlt(syntaktisch falsch)

x+3

x-y/b+3-(3+y)*4Wert des Ausdrucks: unbekannt

27%4ganzzahliger 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

26%4

a++ erhöht a um 1, Wert des Ausdrucks: unbekanntb--

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

Relationale und logische Ausdrücke

Relationale und logische Ausdrücke sind

wahr (true)oder

falsch (false)und haben den Datentyp

boolean

Kleiner Ausflug in die formale Logik

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

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

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

Diese Zusammenhänge lassen sich auch mit einer

sogenannten Wahrheitstafeln darstellen:

A B A und B A oder BW W W WW F F WF W F WF F F F

A nicht AW FF W

Java kennt aber kein "wahr" oder "falsch",

sondern:

Ausdruck Wertfalsch false

wahr true

Beispiele:

0 < 5

8 > 9x+3 >= 51 == 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: trueFür x kleiner 2: false

mathematisches =

mathematisches

4 < x < 7

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

LogischeAusdrücke

Beispiele:

a && b

x || y(x>0) && (x<10)!(x<y)

logisches UND

logisches ODER

logisches NICHT

OperatorenArithmetische Operatoren:

+ - * / % ++ --

Vergleichsoperatoren:

< <= > >= == !=

Logische Operatoren: ! && ||

Bitweise Operatoren: ~ & |

Zuweisungsausdrücke

Ein Zuweisungsausdruck enthält einen

Zuweisungsoperator wie z.B. =

+=++--

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

Da ein Zuweisungsausdruck ein Ausdruck ist, hat ein

Zuweisungsausdruck also einen Wert !!!

Beispiele:

a = 17

x = 3+2*4

Wert des Ausdrucks : 17Nebenwirkung: Wert der Variablen a ist 17

Wert des Ausdrucks : 11Nebenwirkung: Wert der Variablen x ist 11

Punkt vor Strich.Dies bedeutet, dass dass z.B. die Multiplikation Priorität (=Vorrang) vor der Addition hat

y = x = 2

Wie wird der Wert diesen Ausdrucks berechnet ?

y = x = 2

Wert des Ausdrucks : 2Nebenwirkung: Wert der Variablen y ist 2

Abarbeitung:von rechts nach links

Wert des Ausdrucks : 2Nebenwirkung: 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)

a=(x=5)*3

Wert des Ausdrucks : 15Nebenwirkung: Wert der Variablen a ist 15

Wert des Ausdrucks : 5Nebenwirkung: Wert der Variablen x ist 5

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.

++aErhöht den Wert der Variablen a um eins vor der

Verwendung in einem Ausdruck.

--aVerringert den Wert der Variablen a um eins vor

der Verwendung in einem Ausdruck.

Beispiele dazu:Welche Bildschirmausgaben

erzeugt folgendes Programm?

(Zwecks Platzersparnis wird hier wieder System.out.println durch

println abgekürzt.)

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

10111110

also Bildschirmausgabe:

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?

Durch welche 2 Anweisungen kann man diese Anweisung also simulieren?

Durch welche 2 Anweisungen kann man diese Anweisung also simulieren?

x+=y

Dies ist eine abkürzende Schreibweise für ...

x=x+yDas gleiche gilt für:

*= -= usw.

Priorität und Assoziativität bei Operatoren.

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

Wenn zwei Operatoren die gleiche Priorität haben,

bestimmt die Assoziativität, welche Operation zuerst

ausgeführt wird.

Beispiel:

* und / haben die gleiche Priorität und die

Assoziativität von Links nach Rechts (kurz: L).

3 * 6 / 9

Wie wird der Wert dieses Ausdrucks berechnet ?

3 * 6 / 9

18

2

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

3 * 6 / 9

0

0

Welches Ergebnis hat der Ausdruck, wenn * und / rechtsassoziativ wären?

da 6 und 9 integer sind

60 / 10 / 2

Wie wird der Wert dieses Ausdrucks berechnet ?

60 / 10 / 2

6

3

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

60 / 10 / 2

5

12

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

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

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

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)

Priorität Operatoren Bedeutung Assoz.1 [ ] Array-Index L  ( ) Methodenaufruf L  . Komponentenzugriff L  ++ Postinkrement L  -- Postdekrement L2 ++ Präinkrement R  -- Prädekrement R  + - Vorzeichen (unär) R  ~ bitweises Komplement R  ! logischer Negationsoperator R3 (type) Typ-Umwandlung R  new Erzeugung R4 * / % Multiplikation, Division, Rest L5 + - Addition, Subtraktion L  + Stringverkettung L6 << Linksshift L  >> Vorzeichenbehafteter Rechtsshift L  >>> Vorzeichenloser Rechtsshift L7 < <= kleiner, kleiner gleich L  > >= größer, größer gleich L  instanceof Typüberprüfung eines Objekts L8 == Gleichheit L  != Ungleichheit L9 & bitweises UND L

10 ^ bitweises Exclusiv-ODER L11 | bitweises ODER L12 && & logisches UND L13 | | | logisches ODER L14 ? : Bedingungsoperator R15 = Wertzuweisung R  *= /= %= kombinierter Zuweisungsoperator R  += -= <<=      >>= >>>=      &= ^= |=    

Pri

orit

ät n

imm

t von

obe

n na

ch u

nten

ab

Welche Operatoren sind rechtsassoziativ, welche linksassoziativ?

Rechtsassoziativ sind:Zuweisungsoperatoren, der Bedingungsoperator, und unäre Operatoren.

Linksassoziativ sind:alle anderen

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!=aHier ein paar Vorschläge:

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

Recommended