Лабораторная работа "Организация обработки исключений"
Оценка 5

Лабораторная работа "Организация обработки исключений"

Оценка 5
docx
28.06.2020
Лабораторная работа "Организация обработки исключений"
Лабораторная работа №7.docx

Лабораторная работа №7 Организация обработки исключений

 

Теоретические сведения

Нередко в процессе выполнения программы могут возникать ошибки, при том необязательно по вине разработчика. Некоторые из них трудно предусмотреть или предвидеть, а иногда и вовсе невозможно. Так, например, может неожиданно оборваться сетевое подключение при передаче файла. Подобные ситуации называются исключениями.

В языке Java предусмотрены специальные средства для обработки подобных ситуаций. Одним из таких средств является конструкция try...catch...finally. При возникновении исключения в блоке try управление переходит в блок catch, который может обработать данное исключение. Если такого блока не найдено, то пользователю отображается сообщение о необработанном исключении, а дальнейшее выполнение программы останавливается. И чтобы подобной остановки не произошло, и надо использовать блок try..catch. Например:

1

2

3

int[] numbers = new int[3];

numbers[4]=45;

System.out.println(numbers[4]);

Так как у нас массив numbers может содержать только 3 элемента, то при выполнении инструкции numbers[4]=45 консоль отобразит исключение, и выполнение программы будет завершено. Теперь попробуем обработать это исключение:

1

2

3

4

5

6

7

8

9

10

try{

    int[] numbers = new int[3];

    numbers[4]=45;

    System.out.println(numbers[4]);

}

catch(Exception ex){

     

    ex.printStackTrace();

}

System.out.println("Программа завершена");

При использовании блока try...catch вначале выполняются все инструкции между операторами try и catch. Если в блоке try вдруг возникает исключение, то обычный порядок выполнения останавливается и переходит к инструкции сatch. Поэтому когда выполнение программы дойдет до строки numbers[4]=45;, программа остановится и перейдет к блоку catch

Выражение catch имеет следующий синтаксис: catch (тип_исключения имя_переменной). В данном случае объявляется переменная ex, которая имеет тип Exception. Но если возникшее исключение не является исключением типа, указанного в инструкции сatch, то оно не обрабатывается, а программа просто зависает или выбрасывает сообщение об ошибке.

Но так как тип Exception является базовым классом для всех исключений, то выражение catch (Exception ex) будет обрабатывать практически все исключения. Обработка же исключения в данном случае сводится к выводу на консоль стека трассировки ошибки с помощью метода printStackTrace(), определенного в классе Exception.

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

Конструкция try..catch также может иметь блок finally. Однако этот блок необязательный, и его можно при обработке исключений опускать. Блок finally выполняется в любом случае, возникло ли исключение в блоке try или нет:

1

2

3

4

5

6

7

8

9

10

11

12

13

try{

    int[] numbers = new int[3];

    numbers[4]=45;

    System.out.println(numbers[4]);

}

catch(Exception ex){

     

    ex.printStackTrace();

}

finally{

    System.out.println("Блок finally");

}

System.out.println("Программа завершена");

 

Обработка нескольких исключений

В Java имеется множество различных типов исключений, и мы можем разграничить их обработку, включив дополнительные блоки catch:

1

2

3

4

5

6

7

8

9

10

11

12

13

int[] numbers = new int[3];

try{

    numbers[6]=45;

    numbers[6]=Integer.parseInt("gfd");

}

catch(ArrayIndexOutOfBoundsException ex){

             

    System.out.println("Выход за пределы массива");

}

catch(NumberFormatException ex){

             

    System.out.println("Ошибка преобразования из строки в число");

}

Если у нас возникает исключение определенного типа, то оно переходит к соответствующему блоку catch.

 

Оператор throw

Чтобы сообщить о выполнении исключительных ситуаций в программе, можно использовать оператор throw. То есть с помощью этого оператора мы сами можем создать исключение и вызвать его в процессе выполнения. Например, в нашей программе происходит ввод числа, и мы хотим, чтобы, если число больше 30, то возникало исключение:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

package firstapp;

 

import java.util.Scanner;

public class FirstApp {

 

    public static void main(String[] args) {

        

        try{

            Scanner in = new Scanner(System.in);

            int x = in.nextInt();

            if(x>=30){

               throw new Exception("Число х должно быть меньше 30");

           }

        }

        catch(Exception ex){

             

            System.out.println(ex.getMessage());

        }

        System.out.println("Программа завершена");

    }  

}

Здесь для создания объекта исключения используется конструктор класса Exception, в который передается сообщение об исключении. И если число х окажется больше 29, то будет выброшено исключение и управление перейдет к блоку catch.

В блоке catch мы можем получить сообщение об исключении с помощью метода getMessage().

 

Более подробно по ссылкам

https://javarush.ru/groups/posts/isklyucheniya-java

https://metanit.com/java/tutorial/4.1.php

 

Постановка задачи:

1.    Помогите тестировщику определить возможные исключительные ситуации вашей ИС, определить экспериментально, ошибки каких классов могут быть сгенерированы в вашем приложении

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

             

 Содержание отчета:

1. Тема, цель

2. Описание исключительной ситуации и код обработчика

3. Ответы на контрольные вопросы

 

 

Контрольные вопросы

1.       Что представляет собой исключение?

2.       На какие части исключения позволяют разделить вычислительный процесс? Достоинства такого подхода?

3.       Какой оператор используется для генерации исключительной ситуации?

4.       Что представляет собой контролируемый блок? Для чего он нужен?

5.       Что представляет собой секция-ловушка? Для чего она нужна?

6.       Какие формы может иметь спецификация исключения в секции ловушке? В каких ситуациях используются эти формы?

7.       Какой стандартный класс можно использовать для создания собственной иерархии исключений?

8.       Каким образом можно создать собственную иерархию исключений?

9.       В какой части программы может генерироваться исключение?

10.   (по желанию) Написать функцию, которая вычисляет площадь треугольника по трем сторонам (формула Герона).

Функцию реализовать в 4 вариантах:

·         без спецификации исключений;

·         со спецификацией throw();

·         с конкретной спецификацией с подходящим стандартным исключением;

·         спецификация с собственным реализованным исключением.

 


 

Скачано с www.znanio.ru

Лабораторная работа №7 Организация обработки исключений

Лабораторная работа №7 Организация обработки исключений

System.out.println(numbers[4]); } catch(Exception ex){ ex

System.out.println(numbers[4]); } catch(Exception ex){ ex

В блоке catch мы можем получить сообщение об исключении с помощью метода getMessage()

В блоке catch мы можем получить сообщение об исключении с помощью метода getMessage()
Материалы на данной страницы взяты из открытых истончиков либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.
28.06.2020