Kako se greške obrađuju u Javi i kako sa njima raditi?
sobes.tech АИ
Одговор од АИ
У Јави грешке се обрађују коришћењем механизма изузетака. Изузеци представљају догађаје који ремете нормалан ток извршавања програма. Постоје две врсте изузетака: Checked Exceptions и Unchecked Exceptions.
Checked Exceptions:
- Наслеђују од
java.lang.Exception(осимRuntimeException). - Обавезно их треба обрадити (
try-catch) или их декларисати у сигнатури методе (throws). - Представљају грешке које могу настати у нормалним условима (нпр.
IOException,FileNotFoundException).
Unchecked Exceptions:
- Наслеђују од
java.lang.RuntimeExceptionилиjava.lang.Error. - Не захтевају обавезну обраду или декларацију.
- Представљају грешке које често указују на логичке грешке у коду или нестабилна стања окружења за извршавање (нпр.
NullPointerException,ArrayIndexOutOfBoundsException).
Обрада изузетака:
За обраду изузетака користе се блокови try-catch-finally:
try: Блок кода који може генерисати изузетак.catch: Блок кода који се извршава ако уtryдође до изузетка одређеног типа. Могу се имати вишеcatchблокова за различите типове изузетака.finally: Блок кода који се увек извршава, без обзира да ли је дошло до изузетка или не. Често се користи за ослобађање ресурса (нпр. затварање фајлова, веза).
try {
// Код који може изазвати изузетак
int result = 10 / 0; // Пример: ArithmeticException
} catch (ArithmeticException e) {
// Обрада ArithmeticException
System.err.println("Грешка при дели са нулом: " + e.getMessage());
// Може се логовати грешка, приказати поруку кориснику итд.
} catch (Exception e) {
// Обрада било којег другог изузетка, ако раније није обрађен
System.err.println("Настала је општа грешка: " + e.getMessage());
} finally {
// Код који се увек извршава
System.out.println("Блок finally извршен.");
}
Прослеђивање изузетака:
Метода може да декларише да може да генерише одређени изузетак коришћењем кључне речи throws:
public void readFile(String filePath) throws FileNotFoundException, IOException {
// Код за читање фајла
// Ако фајл није пронађен, може бити изазван `FileNotFoundException` (подкласа `IOException`)
FileReader fr = new FileReader(filePath);
// Ако дође до грешке у улазу-излазу, може бити изазван `IOException`
// ...
}
Позивајућа метода треба или да обради овај изузетак (try-catch) или да га такође декларише са throws, да га проследи.
Креирање сопствених изузетака:
Могу се креирати сопствене класе изузетака наследивањем од Exception (за Checked Exceptions) или RuntimeException (за Unchecked Exceptions).
public class MyCustomException extends Exception {
public MyCustomException(String message) {
super(message);
}
}
Користи се:
public void processData(int value) throws MyCustomException {
if (value < 0) {
throw new MyCustomException("Вредност не може бити негативна");
}
// Обрада података
}
Основне класе изузетака (иерархија):
java.lang.Throwable(базна класа за све грешке и изузетке)java.lang.Error(за озбиљне проблеме који обично неће бити обрађени од стране програма, нпр.OutOfMemoryError)java.lang.Exception(за изузетке које програм може обрадити)java.lang.RuntimeException(Unchecked Exceptions)NullPointerExceptionArrayIndexOutOfBoundsExceptionArithmeticException- итд.
- Друге подкласе
Exception(Checked Exceptions)IOExceptionFileNotFoundExceptionSQLException- итд.
Рад са грешкама укључује разумевање ове иерархије, избор одговарајућег типа изузетка (при креирању својих), ефикасну употребу try-catch-finally за обраду и прослеђивање, као и логовање грешака за дебаговање.