GrabDuck

Обработка исключений | Java

:

Последнее обновление: 30.10.2015

В теме Введение в обработку исключений были рассмотрены некоторые основные моменты обработки исключений. Сейчас более подробно поговорим о других моментах, связанных с обработкой исключений.

Иногда метод, в котором может генерироваться исключение, сам не обрабатывает это исключение. В этом случае в объявлении метода используется оператор throws, который надо обработать при вызове этого метода. Например, у нас имеется метод вычисления факториала, и нам надо обработать ситуацию, если в метод передается число меньше 1:

public static int getFactorial(int num) throws Exception{
    
    if(num<1) throw new Exception("Число не может быть меньше 1");
    int result=1;
    for(int i=1; i<=num;i++){
            
        result*=i;
    }
    return result;
}

С помощью оператора throw по условию выбрасывается исключение. В то же время метод сам это исключение не обрабатывает с помощью try..catch, поэтому в определении метода используется выражение throws Exception.

Теперь при вызове этого метода нам обязательно надо обработать выбрасываемое исключение:

public static void main(String[] args){
        
    try{
        int result = getFactorial(-6);
        
        System.out.println(result);
    }
    catch(Exception ex){
        
        System.out.println(ex.getMessage());
    }
} 

Без обработки исключение у нас возникнет ошибка компиляции, и мы не сможем скомпилировать программу.

В качестве альтернативы мы могли бы и не использовать оператор throws, а обработать исключение прямо в методе:

public static int getFactorial(int num){
    
    int result=1;
    try{
        if(num<1) throw new Exception("Число не может быть меньше 1");
        
        for(int i=1; i<=num;i++){
            
            result*=i;
        }
    }
    catch(Exception ex){
        
        System.out.println(ex.getMessage());
        result=num;
    }
    return result;
}