Sobes.tech
Middle

Реците о механизму изузетака у Јави.

sobes.tech АИ

Одговор од АИ

Механизам за изузетке у Јави се користи за обраду грешака и других изузетних ситуација које настају током извршавања програма.

Главни елементи механизма изузетака:

  • Изузетак (Exception): Објекат који представља догађај који нарушава нормалан ток извршавања програма.
  • Блокови try, catch, finally: Користе се за обраду изузетака.
    • try: Блок кода у којем може доћи до изузетка.
    • catch: Блок кода који се извршава ако у try блоку настане изузетак од одређеног типа.
    • finally: Блок кода који се увек извршава, без обзира да ли је дошло до изузетка или не. Користи се за ослобађање ресурса.
  • Кључна реч throw: Користи се за јасно креирање и бацање изузетка.
  • Кључна реч throws: Користи се у сигнатури методе за објављивање типова изузетака које метода може бацити.

Јерихија изузетака у Јави:

  • Throwable: Базна класа за све изузетке и грешке.
    • Error: Представља озбиљне проблеме од којих програм обично не може да се опорави (нпр. OutOfMemoryError).
    • Exception: Представља изузетке које програм може ухватити и обрадити.
      • RuntimeException (Unchecked Exceptions): Изузеци који не захтевају јасну обраду или објављивање у сигнатури методе (нпр. NullPointerException, ArrayIndexOutOfBoundsException).
      • Checked Exceptions: Изузеци који морају бити или обрађени помоћу try-catch блока или објављени помоћу throws у сигнатури методе (нпр. IOException, FileNotFoundException).

Пример обраде изузетка:

public class ExceptionExample {

    public static void main(String[] args) {
        try {
            int result = divide(10, 0);
            System.out.println("Резултат: " + result);
        } catch (ArithmeticException e) {
            // Обрада изузетка ArithmeticException
            System.err.println("Грешка: Дељење нула није дозвољено.");
            System.err.println("Детаљи изузетка: " + e.getMessage());
            e.printStackTrace(); // Испис стека позива
        } finally {
            // Овај блок се увек извршава
            System.out.println("Извршен је блок finally.");
        }
    }

    public static int divide(int a, int b) {
        // Може изазвати ArithmeticException ако је b = 0
        return a / b;
    }
}

Пример коришћења throws:

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

public class ThrowsExample {

    public static void readFile(String filename) throws IOException {
        // Може изазвати IOException
        FileReader reader = new FileReader(filename);
        // Даља работа са фајлом
    }

    public static void main(String[] args) {
        try {
            readFile("непостојећи_фајл.txt");
        } catch (IOException e) {
            System.err.println("Грешка при читању фајла: " + e.getMessage());
        }
    }
}