Inhaltsverzeichnis Die leere Anweisung Anweisungsblöcke Variablendeklarationen und die Bedeutung lokaler Variablen Ausdrucksanweisungen Die if-Anweisung Die switch-Anweisung Die while-, do- und for-Schleifen Die erweiterte for-Schleife Die Anweisungen break und continue gelabelte Schleifen Die assert-Anweisung 2 Die leere Anweisung Syntax: ; Leere Anweisungen haben keine Auswirkungen Wird dort verwendet, wo eine Anweisung nur durch die Syntax erforderlich ist 3 Anweisungsblöcke Syntax: { <Anweisung 1>; <Anweisung 2>; } Ein Block umfasst mehrere einzelne Anweisungen Ein Block zählt als nur eine Anweisung Im Block deklarierte Variablen gelten nur für diesen Block 4 Variablendeklarationen im Block Syntax: <Typname> <VariablenName>; //oder <Typname> <VariablenName> = <Initialwert>; Deklarierte Variablen dürfen nicht in einem verschachteltem Block erneut deklariert werden Verdecken von Klassen- oder Instanzvariablen ist zulässig 5 Verdecken von Variablen Bsp: Initialisierung von Instanzvariablen class Punkt { int x; int y; Punkt(int x, int y) { this.x = x; this.y = y; } } 6 Ausdrucksanweisungen Syntax: <Ausdruck>; Ausdrucksanweisungen sind: Zuweisungen Inkrement und Dekrement Instanzerzeugung Methodenaufruf x=3; x++; my_picture=new graph(); my_picture.draw(); Andere Ausdrücke sind nicht erlaubt 7 Die if-Anweisung Syntax: if (<Ausdruck>) <Anweisung 1>; else <Anweisung 2>; Ausdruck muss vom Typ boolean sein, z.B. if (true) oder if (1==1) else bezieht sich immer auf das letzte if 8 Die switch-Anweisung Syntax: switch (<Ausdruck>) { case <Konstante> : <Anweisung>; ... default: } <Ausdruck> muss vom Typ char, byte, short oder int sein <Ausdruck> muss kompatibel zu <Konstante> sein Nach dem Sprung werden alle folgenden Anweisungen ausgeführt break verwenden; 9 Die while-Schleife Syntax: while (<Ausdruck>) <Anweisung>; <Ausdruck> muss vom Typ boolean sein 10 Die do-Schleife Syntax: do <Anweisung>; while (<Ausdruck>); Schleife wird mindestens einmal ausgeführt <Ausdruck> muss vom Typ boolean sein 11 Die for-Schleife Syntax: for (<init>; <test>; <update>) <Anweisung>; <init>, <test> und <update> sind optional <init> darf aus Deklaration und Initialisierung bestehen Variablen müssen bei der Deklaration initialisiert werden Wenn <test> fehlt, wird es durch „true“ ersetzt <init> und <update> dürfen aus mehreren Ausdrücken bestehen 12 Die erweiterte for-Schleife Syntax: for (<Parameter> : <Ausdruck>) <Anweisung> <Parameter> ist eine Deklaration von Datentyp und Variablenname <Ausdruck> ist eine Instanz, ein Array oder ein Ausdruck vom Typ java.lang.iterable Durchlauf von allen Elementen von vorne nach hinten 13 Bsp. Erweiterte for-Schleife // Ausgabe aller Elemente des Arrays my_array for (int i = 0; i < my_array.length; ++i) { System.out.println(my_array[i]); } for (int a : my_array) { System.out.println(a); } 14 break und continue Syntax: break; continue; break verlässt die aktuelle Schleife continue springt zum nächsten Schleifendurchlauf Verwendbar in do-, while-, und for-Schleifen 15 Gelabelte Schleifen Syntax: <Label>: for ( int i=1; i<10; i++ ) { { break <Label>; // oder continue <Label>; } } break und continue verlassen die Schleife mit dem <Label> 16 Beispiel for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { data[i][j] = i * j; } } for (int i = 0, j = 0; i < 10; i++,j++) { data[i][j] = i * j; } //Produkt größer 43 suchen loop1: for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { if (data[i][j] > 43) { System.out.println("Ergebnis: "+i + "*" + j + "=" + data[i][j]); if (arg2==1) break loop1; else break; } } } 17 Die assert Anweisung Syntax: assert <Ausdruck1> ; // oder assert <Ausdruck 1> : <Ausdruck2> ; Eine Assertion ist eine logische Anweisung im Programm Ist die Bedingung erfüllt, läuft das Programm weiter Ist die Bedingung nicht erfüllt, bricht das Programm mit einem AssertionError ab. 18 Die assert Anweisung Syntax: assert <Ausdruck1> ; // oder assert <Ausdruck 1> : <Ausdruck2> ; <Ausdruck 1> muss vom Typ boolean sein <Ausdruck 2> ist optional <Ausdruck 2> dient als Ausgabe im Fehlerfall 19 Die assert Anweisung Vorteile: Kurzer Quellcode Der Grund ist sofort erkennbar Assertions lassen sich an- und ausschalten Nachteile: Kompatibilitätsprobleme Können auch ungewollt ausgeschaltet werden 20 Die assert Anweisung Anwendungen: Debuggen und testen Precondition und Postcondition einer Methode Überprüfung von Schleifendurchläufen Markierung von Zweigen, die normalerweise nicht erreicht werden sollen 21 Die assert Anweisung An- und Ausschalten, Kompatibilität: Assertions benötigen mindestens Java 1.4 java [ -enableassertions | -ea ] [:PaketName... | :KlassenName ] java [ -disableassertions | -da ] [:PaketName... | :KlassenName ] 22 Beispiel public class assertion_test { public static void main(String[] args) { assert args.length >= 2; int i1 = Integer.parseInt(args[0]); int i2 = Integer.parseInt(args[1]); assert i2 != 0 : "Teilen durch 0 nicht moeglich"; System.out.println(i1 + "/" + i2 + "=" + (i1/i2)); } } 23