# Исключения

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

Все исключения в 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("Произошла недопустимая арифметическая операция"); - в чём 
преимущество такого сообщения?
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://comaqa.gitbook.io/java-automation/oop-v-java/isklyucheniya.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
