Rozdział 5. Flow control, Exceptions, Assertions

Pętla for składa się z trzech części. Pierwsza - deklaracja albo przypisanie (nie 2 w jednym momencie). Deklaracja lub przypisanie może odtyczyć kilku zmiennych oddzielonych przecinkiem. Przecinkiem oddzielone mogą być także składniki trzeciej części pętli. Każda część pętli for jest opcjonalna.

mainLoop: for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
if (array[i][j] == ‘\u0000’) {
continue mainLoop;
}
}
}

mainLoop: for (i = 0, j = 0; i < 3; ++i, ++j) {
System.out.println("main loop");
for (int x = 0; x < 1; ++x) {
if (x == 0) {
System.out.println("x = 0");
break mainLoop;
}
}
}

W przypadku switch zmienna warunkowa musi być "assignment compatible" z int (czyli. byte, short, char lub int). Wyrażenie po slowie kluczowym "case" musi być wartością lub stałą.

Wyjątki

Jeśli metoda ma w deklaracji "throws", jej wywołanie musi być otoczone odpowiednim blokiem try-catch. Inaczej nastąpi błąd kompilacji. Gdy nie ma bloku catch dla danego wyjątku, JVM wypisuje stack trace i kończy działanie. Nie trzeba łapać, ani obsługiwać (throws) wyjątków dziedziczących po RuntimeException! Przy przeciązaniu funkcji, zadeklarowane wyjątki muszą dziedziczyć po wyjątku zadeklarowanym w funkcji pierwotnej.

Funkcje rozróżniane są przez nazwę oraz parametry, nie przez wartość zwracaną.

Blok finally jest zawsze wykonywany, nawet jak zaden z catch nie obsłużył wyjątku. Finally może się nie wykonać w przypadku śmierci wątku, System.exit() lub wyłączeniu komuptera.

Asercje

assert Expression1
assert Expression1:Expression2

Expression1 musi być boolowskie. Asercje trzeba włączyć w JVM (java -ea MyApp), jeśli są wyłączone nic nie robią. Jeśli Expression1 == true, żadna dalsza akcja nie jest wykonywana, jeśli jest false - rzucany jest wyjątek AssertionExcpetion oraz opcjonalnie dodawane do niego Expression2 jako wiadomość (toString).

Brak komentarzy:

Prześlij komentarz