Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
кпп.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
238.24 Кб
Скачать

Самостоятельное выбрасывание исключений.

В java существует возможность выброса исключений по усмотрению разработчика. При этом, так же как и в процессе перехвата исключений у разработчика есть выбор – обработать исключение самому, или передать его для обработки JVM.

Компилятор java не считает себя умнее разработчика, поэтому прежде чем выбрасывать исключение, необходимо уведомить кампилятор о том, что данный метод может выбросить исключение такого-то типа. Это указывается в сигнатуре функции после её заголовка, но перед открывающей скобкой тела функции. Если может быть выбрашено несколько исключений различного типа, названия их классов можно указать через запятую. После этого можно внутри блока try/catch  выбрасывать исключение с помощью инструкции throw. Для примера, выбрасим самостоятельно исключение IOException из метода main(), но тоже самое можно сделать в любом пользовательском методе.

Обратите внимание, что обманывать компилятор с помощью добавления кода с возможностью появления соответствующей ошибки в данном случае необходимости нет.

Обратите так же внимание, что никакой реальной ошибки перед выбросом исключения на самом деле не было. Компилятор в данном случае "верит программисту на слово".

 import java.io.IOException;

import java.io.File;

public class Welkom {

public static void main(String[] args) throws IOException {  // добавлен класс исключения

            try {

            throw new IOException("моё исключение!");

            } catch(IOException e) {

                   System.out.println("исключение обработано!");

                        System.out.println(e);

}

}  }

 В консоли будет выведено:

 исключение обработано!

java.io.IOException: моё исключение!

 Дело в том, что стандартные классы исключений обычно имеют по два конструктора, один из которых может принимать на вход строку с описанием исключения, чем мы и воспользовались. Если мы не хотим сами обрабатывать это исключение, то можно ограничиться блоком

 try  {

 throw new IOException("моё исключение!");

} finally { }

 

 без блока  catch () {  … }.

Однако выбрасывать исключение инструкцией throw …  вне блока try/catch  компилятор все же не позволяет.

Разработка собственных классов исключений.

Теперь мы можем перехватывать исключения, а также выбрасывать стандартные исключения самостоятельно. А как насчет создания нестандартных исключений? Оказывается java позволяет легко делать и это. Достаточно создать класс, производный от какого – либо наиболее подходящего стандартного класса и предупредить компилятор о возможности его появления путем добавления имени этого класса в сигнатуру функции.

Для примера, создадим собственный класс исключений BigBadaBoom и выбросим исключение этого типа:

 import java.io.IOException;

import java.io.File;

 public class Welkom {

 static class BigBadaBoom extends IOException {

                        public BigBadaBoom() {  }

                        public BigBadaBoom(String  str) { super(str); }

             }

             public static void main(String[] args) throws BigBadaBoom {

            try {

                        throw new BigBadaBoom("моё исключение!");

            }

            catch(BigBadaBoom e) {

                        System.out.println("исключение обработано!");

                        System.out.println(e);

            } }

В консоли будет выведено: 

исключение обработано!

welkom.Welkom$BigBadaBoom: моё исключение! 

Класс BigBadaBoom объявлен статическим потому, что метод main() статический.

Поскольку мы намереваемся передавать классу – родителю текст описания ошибки, мы в классе BigBadaBoom объявили два конструктора, один из которых принимает на вход строку и передает её конструктору класса – родителя.