Exception, Wyjątek – Od Buga do Rozwiązania🪲⚙️

Exception, wyjątek

Witajcie w podróży, gdzie każdy bug🪲 staje się szansą na naukę, a wyjątki w Java przestają być zagadką. Czy zastanawialiście się kiedyś, co dokładnie dzieje się, gdy wasz kod nagle przestaje działać?🔧 Albo co oznacza tajemniczy komunikat o błędzie, który wydaje się mówić w obcym języku? Zapraszam do odkrycia, jak wyjątki mogą stać się waszym najlepszym narzędziem w walce z bugami.

Exception, wyjątki – wprowadzenie

Z tego materiału dowiesz się:

  • Czym są wyjątki  (ang. exceptions)?
  • Jakie mamy rodzaje wyjątków?
  • Jak rzucić wyjątek?
  • Jak złapać wyjątek?
  • Kiedy poleci stacktrace?
  • Jakie są najczęstsze błędy?

Exception, wyjątki – cóż to takiego?

Wyjątki (ang. exceptions) – są mechanizmem w programowaniu, używanym do sygnalizowania wystąpienia błędu lub nietypowej sytuacji, która może zakłócić normalne działanie programu. W wielu językach programowania, w tym w Javie, wyjątki oferują strukturalny sposób na obsługę takich sytuacji, umożliwiając programom radzenie sobie z błędami w kontrolowany i przewidywalny sposób. Możemy wyróżnić następujące rodzaje wyjątków:

  • Checked Exceptions – Są to wyjątki, które muszą być obsłużone (złapane) lub zadeklarowane przez metodę. Java wymaga od programisty, aby jawnie zajął się tymi wyjątkami, co ma na celu zwiększenie niezawodności programu poprzez zmuszenie do przemyślenia sposobów radzenia sobie z potencjalnymi problemami.

Przykłady IOException, SQLException.

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class IOExceptionHandlingExample {
    public static void main(String[] args) {
        String filePath = "example.txt";

        try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            System.err.println("Wystąpił problem podczas odczytu pliku: " + e.getMessage());
        }
    }
}

 

  • Unchecked Exceptions – Są to wyjątki, które nie muszą być jawnie obsłużone lub zadeklarowane przez metodę. Te wyjątki zazwyczaj wskazują na błędy w logice programu, które mogą być trudne do przewidzenia i obsłużenia. Programista ma wolność w decydowaniu, czy i jak je obsłużyć.

Przykłady NullPointerException, ArrayIndexOutOfBoundsException.

public class ArrayIndexOutOfBoundsExceptionHandlingExample {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};
        
        int index = 5; // Przykładowy indeks, który przekracza rozmiar tablicy

        try {
            System.out.println("Wartość na indeksie " + index + ": " + numbers[index]);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.err.println("Błąd: Próba dostępu do indeksu poza zakresem tablicy.");
        }
    }
}
  • Runtime Exceptions – Jest to podkategoria unchecked exceptions. Są to wyjątki, które mogą pojawić się podczas wykonania programu i zazwyczaj są wynikiem błędów w logice programu, takich jak nieprawidłowe odwołanie do obiektu lub próba dostępu do elementu poza zakresem tablicy.

Przykłady IndexOutOfBoundsException, ClassCastException.

public class ClassCastExceptionHandling {
    public static void main(String[] args) {
        Object stringObject = "To jest łańcuch znaków";

        try {
            // Próba rzutowania obiektu na typ, z którym nie jest kompatybilny
            Integer integerObject = (Integer) stringObject;
        } catch (ClassCastException e) {
            System.err.println("Błąd rzutowania: " + e.getMessage());
        }

        System.out.println("Program kontynuuje działanie po obsłudze wyjątku.");
    }
}
  • Errors – Chociaż nie są one technicznie wyjątkami, są traktowane podobnie i mają własną kategorię w hierarchii dziedziczenia Java. Errors wskazują na poważne problemy, których aplikacja nie powinna próbować obsługiwać, ponieważ zazwyczaj są one poza kontrolą programisty.

Przykłady OutOfMemoryError, StackOverflowError.

exceptions

Jak rzucić wyjątek (ang. exception)?

Rzucenie wyjątku to sposób na sygnalizowanie, że coś poszło nie tak. Możemy to zrobić za pomocą słowa kluczowego throw, a następnie utworzyć instancję wyjątku.

if (userInput < 0) {
    throw new IllegalArgumentException("Liczba musi być dodatnia!");
}

Jak złapać wyjątek (ang. exception)?

Aby złapać wyjątek, używamy bloku try-catch, co pozwala nam na eleganckie obsłużenie problemu bez przerywania pracy programu.

try {
    // Tutaj umieszczamy kod, który może spowodować wyjątek.
    int wynik = 10 / 0; // To wyrażenie spowoduje ArithmeticException (dzielenie przez zero).
} catch (ArithmeticException e) {
    // Tutaj obsługujemy wyjątek, który może zostać rzucony w bloku try.
    System.out.println("Wystąpił błąd: Nie można dzielić przez zero." + e.getMessage());
}

W niektórych sytuacjach, lepszym sposobem obsługi wyjątków jest konstrukcja try-with-resources.

➡ ZOBACZ 👉: Try with resources, Java try-with-resources ❤‍🔥

Kiedy poleci stacktrace?

Stacktrace, czyli ślad stosu, to nasz drogowskaz w świecie debugowania. Pojawia się, gdy program napotka wyjątek, który nie został obsłużony. Dostarcza on szczegółowych informacji o błędzie, wskazując, gdzie dokładnie w kodzie wystąpił problem.

➡ ZOBACZ 👉: Stacktrace – jak rozszyfrować Stacktrace w Twoim kodzie?

Excetpion, wyjątki – najczęstsze błędy i jak ich unikać?

Praca z wyjątkami może być niekiedy myląca. Oto kilka wskazówek, jak unikać typowych błędów:

  • Nie ignoruj wyjątków. Zawsze obsługuj je w sposób, który ma sens dla twojego programu.
  • Unikaj ogólnych wyjątków, takich jak Exception w blokach catch. Staraj się łapać tylko te wyjątki, które faktycznie mogą wystąpić.
  • Pamiętaj, aby nie nadużywać wyjątków. Nie wszystkie błędy w programie wymagają wyjątków do ich obsługi.

Exception, wyjątki – podsumowanie

Wyjątki w Java to potężne narzędzie, które jeśli jest używane mądrze, może znacząco poprawić jakość Twojego kodu, uczynić go bardziej odpornym na błędy i łatwiejszym do debugowania. Pamiętaj, że kluczem jest zrozumienie różnicy między checked i unchecked exceptions, a także kiedy i jak je efektywnie stosować. Przyjmij wyjątki jako nieodłączną część procesu programowania, która nie tylko pomaga w radzeniu sobie z błędami, ale również uczy, jak tworzyć lepsze oprogramowanie.

➡ ZOBACZ 👉: Debugowanie, jakiego jeszcze nie znałeś


20+ BONUSOWYCH materiałów z programowania

e-book – „8 rzeczy, które musisz wiedzieć, żeby dostać pracę jako programista”,
e-book – „Java Cheat Sheet”,
checklista – „Pytania rekrutacyjne”
i wiele, wiele wiecej!

Jak zostać programistą

No comments
Share:

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *