Blok finally
Część sekcji Logika i przepływ sterowania ścieżki Java w Coddy. Lekcja 41 z 59.
Blok finally zawiera kod, który zostanie wykonany po blokach try-catch, niezależnie od tego, czy wystąpi wyjątek. Jest powszechnie używany do operacji porządkowych, takich jak zamykanie plików lub połączeń z bazą danych.
Oto podstawowa struktura bloku try-catch-finally:
try {
// Kod, który może zgłosić wyjątek
} catch (ExceptionType e) {
// Kod obsługujący wyjątek
} finally {
// Kod, który zawsze się wykonuje
}Zobaczmy przykład z licznikiem:
int counter = 0;
try {
int result = 10 / 0;
// To spowoduje zgłoszenie wyjątku
counter = 1;
} catch (ArithmeticException e) {
counter = 2;
} finally {
counter = 3;
// To wykona się zawsze
}Po wykonaniu powyższego kodu zmienna counter zawiera:
3
Typ w nawiasach catch decyduje o tym, które błędy obsługuje ten blok. Dwa częste typy to ArithmeticException, zgłaszany przy dzieleniu liczby całkowitej przez zero, oraz NumberFormatException, zgłaszany przez Integer.parseInt(), gdy tekst nie jest liczbą. Pojedynczy blok catch może jednocześnie obsługiwać kilka typów:
try {
int value = Integer.parseInt(text);
int result = 10 / value;
} catch (ArithmeticException | NumberFormatException e) {
// obsługuje oba wyjątki
} finally {
// wykonuje się zawsze
}Przechwytywanie zamiast tego Exception jest szersze: obsługuje oba te wyjątki i każdy inny wyjątek.
Wyzwanie
ŁatwyUtwórz metodę o nazwie processNumber, która przyjmuje dwa argumenty:
- String (
number) do przekonwertowania na liczbę całkowitą - boolean (
shouldThrow), który określa, czy należy zgłosić wyjątek
Metoda powinna:
- Zainicjalizować zmienną result wartością 0
- W bloku try:
- Jeśli shouldThrow ma wartość true, podzielić 10 przez 0
- W przeciwnym razie przekonwertować ciąg number na liczbę całkowitą i zapisać ją w result
- W bloku catch: ustawić result na -1
- W bloku finally: dodać 100 do result
- Zwrócić result jako ciąg znaków
Spróbuj swoich sił
import java.util.Scanner;
public class Main {
public static String processNumber(String number, boolean shouldThrow) {
// Wpisz tutaj swój kod
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String number = scanner.nextLine();
boolean shouldThrow = Boolean.parseBoolean(scanner.nextLine());
System.out.println(processNumber(number, shouldThrow));
}
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ sterowania
1Tablice wielowymiarowe
Podstawy tablic 2DDostęp do elementów tablic 2DPętle zagnieżdżone z tablicami 2DPodsumowanie — tablice 2DDodawanie i odejmowanie macierzyTablice postrzępioneTablice 3D i większeTypowe wzorce dla tablic 2DPodsumowanie — wszystko o tablicach2HashMap część 1
Czym jest HashMap?Deklarowanie HashMapDostęp do wartościSprawdzanie, czy klucz istniejeModyfikowanie słownikówPodsumowanie — HashMap3HashMap — część 2
Metody HashMapIterowanie za pomocą keySet()Iterowanie za pomocą entrySet()Zagnieżdżona HashMapPowtórka — zarządzanie magazynemPowtórka — operacje na HashMap6Zaawansowany przepływ sterowania
Instrukcje etykietująceWyrażenie switchDopasowywanie wzorcówKlauzule ochronnePowtórzenie — przepływ sterowania9Projekt — licznik unikalnych słów
Wprowadzanie i przechowywanie tekstuPrzetwarzanie słówPoćwicz samodzielnie: Kompilator Java online