# Исключения

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

Все исключения в Java являются объектами. Поэтому они могут порождаться не только автоматически при возникновении исключительной ситуации, но и создаваться самим разработчиком. Исключения делятся на несколько классов, но все они имеют общего предка — класс Throwable. Его потомками являются подклассы Exception и Error.

Исключения (Exceptions) являются результатом проблем в программе, которые в принципе решаемы и предсказуемы. Например, произошло деление на ноль в целых числах.

Ошибки (Errors) представляют собой более серьёзные проблемы, которые, согласно спецификации Java, не следует пытаться обрабатывать в собственной программе, поскольку они связаны с проблемами уровня JVM.

Откомпилируем и запустим такую программу:

```
class Main {
    public static void main(String[] args) {
        int a = 4;
        System.out.println(a/0);
    }
}
```

В момент запуска на консоль будет выведено следующее сообщение:

```
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Main.main(Main.java:4)
```

Из сообщения виден класс случившегося исключения — ArithmeticException. Это исключение можно обработать:

```
class Main {
    public static void main(String[] args) {
        int a = 4;
        try {
            System.out.println(a/0);
        } catch (ArithmeticException e) {
            System.out.println("Произошла недопустимая арифметическая операция");
        }
     }
}
```

Теперь, вместо стандартного сообщения об ошибке будет выполняться блок catch

Вопрос 1

```
Зачем разработчикам самим создавать исключительные ситуации?
```

Вопрос 2

```
System.out.println("Произошла недопустимая арифметическая операция"); - в чём 
преимущество такого сообщения?
```
