Скачиваний:
2
Добавлен:
13.06.2024
Размер:
81.44 Кб
Скачать

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ

УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»

(СПбГУТ)

_____________________________________________________________________

Факультет Информационных систем и технологий

Кафедра Безопасности информационных систем

Дисциплина «Кроссплатфрменное программирование»

ОТЧЕТ

за практическое занятие №4

Тема: Разработка и отладка программ обработки исключений

Выполнили

Студенты 2 курса, гр. ИСТ-222

__________ Шумов В.В.

__________ Черномашенцев Б.А.

Принял

Зав. кафедрой БИС

____________ Бородянский Ю.М.

Цель работы:

Получение практических навыков разработки и отладки Java-программ, обнаруживающих ошибки, которые возникают в процессе выполнения программы.

Теоретическая часть:

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

В Java все исключения представлены отдельными классами. Все классы исключений являются потомками класса Throwable. У класса Throwable имеются два непосредственных подкласса: Exception и Error. Важным подклассом, производным от Exception, является класс RuntimeException, который служит для представления различных видов ошибок, часто встречающихся при выполнении программ.

Операторы, в которых требуется отслеживать появление исключений, помещаются в блок try. Если в блоке try будет сгенерировано исключение, его можно перехватить и обработать нужным образом. Системные исключения генерируются автоматически. А для того чтобы сгенерировать исключение вручную, следует воспользоваться ключевым словом throw. Иногда возникает потребность обрабатывать исключения за пределами метода, в котором они возникают, и для этой цели служит ключевое слово throws. Если же некоторый фрагмент кода должен быть выполнен обязательно и независимо от того, возникнет исключение или нет, его следует поместить в блок finally.

Основными языковыми средствами обработки исключений являются ключевые слова try и catch. Они используются совместно. Это означает, что нельзя указать ключевое слово catch в коде, не указав ключевое слово try.

Пример.

public class ExceptionDemo {

public static void main(String[] args) {

int[] nums = new int[4];

// Создание блока try

try {

System.out.println("До возникновения исключения");

// Попытка обратиться за границы массива

nums[7] = 10;

System.out.println("Это не будет выполняться при прерывании");

}

// Перехват исключения выхода за границы массива

catch (ArrayIndexOutOfBoundsException exc) {

System.out.println("Индекс выходит за границы!");

}

System.out.println("Это отобразится после оператора catch.");

}

}

Результат выполнения данной программы выглядит следующим образом:

Несмотря на всю простоту данного примера программы, он наглядно демонстрирует несколько важных особенностей обработки исключений. Во-первых, код, подлежащий проверке на наличие ошибок, помещается в блок try . И, во-вторых, когда возникает исключение (в данном случае это происходит при попытке обратиться за границы массива), выполнение блока try прерывается и управление получает блок catch. Следовательно, явного обращения к блоку catch не происходит, но переход к нему осуществляется лишь при определенном условии, возникающем в ходе выполнения программы. Так, оператор вызова метода println ( ), следующий за выражением, в котором происходит обращение к несуществующему элементу массива, вообще не выполняется. По завершении блока catch выполнение программы продолжается с оператора, следующего за этим блоком. Таким образом, обработчик исключений предназначен для устранения программных ошибок, приводящих к исключительным ситуациям, а также для обеспечения нормального продолжения исполняемой программы.

В стандартном пакете java. lang определены некоторые классы, представляющие стандартные исключения Java. Наиболее часто встречаются исключения из подклассов стандартного класса RuntimeException. А поскольку пакет java. lang импортируется по умолчанию во все программы на Java, то исключения, производные от класса RuntimeException, становятся доступными автоматически. В терминологии языка Java такие исключения называют непроверяемыми, поскольку компилятор не проверяет, обрабатываются или генерируются подобные исключения в методе. Непроверяемые исключения, определенные в пакете java. lang, приведены в табл.1, а в табл. 2 — те исключения из пакета java. lang, которые следует непременно включать в список оператора throws при объявлении метода, если, конечно, в методе содержатся операторы, способные генерировать эти исключения, а их обработка не предусмотрена в теле метода. Такие исключения принято называть проверяемыми.

Задание:

Задание 1. Вычисляется значение функции y = 285 / x. Значение x вводится с клавиатуры. Обработать исключение «Деление на ноль».

Задание 2. В методе enterArray заполняется символьный массив, что может привести к исключению (выходу за границы массива), которое обрабатывается в методе main( ).

Задание 3. Задать в программе две буквы английского алфавита – строчную и заглавную. Сдвинуть двоичный код заглавной буквы на два разряда влево, а двоичный код строчной буквы – на один разряд вправо. Спроектировать собственное исключение, как только преобразованный код любого из символов в десятичном исчислении окажется меньше 32 и

Ход работы:

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

Изучены принципы работы исключений в языке java

Получены практические навыки работы с исключениями в языке java, путём написания программы.

Приложение

package laba1;

import java.util.Random;

import java.util.Scanner;

// Исключение для случаев, когда код символа выходит за допустимые пределы

class CodeOutOfRangeException extends Exception {

public CodeOutOfRangeException(String message) {

super(message);

}

}

public class Main {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

while (true) {

// Меню выбора

System.out.println("\nВыберите задание:");

System.out.println("1. Вычислить значение функции y = 285 / x");

System.out.println("2. Заполнить символьный массив");

System.out.println("3. Сдвинуть двоичный код символов алфавита");

System.out.println("0. Выйти");

int choice = scanner.nextInt();

switch (choice) {

case 1:

task1(scanner);

break;

case 2:

task2(scanner);

break;

case 3:

task3();

break;

case 0:

System.out.println("Выход из программы.");

scanner.close();

return; // Завершение программы

default:

System.out.println("Некорректный выбор.");

break;

}

}

}

// Задание 1

public static void task1(Scanner scanner) {

System.out.print("Введите значение x: ");

int x = scanner.nextInt();

try {

if (x == 0) {

throw new ArithmeticException("Деление на ноль");

}

double y = 285.0 / x;

System.out.println("Значение функции y = " + y);

} catch (ArithmeticException e) {

System.out.println("Ошибка: " + e.getMessage());

}

}

// Задание 2

public static void task2(Scanner scanner) {

System.out.print("Введите длину массива: ");

int size = scanner.nextInt();

char[] array = new char[size];

enterArray(array, scanner);

}

public static void enterArray(char[] array, Scanner scanner) {

System.out.println("\nСколько элементов необходимо ввести: ");

int range = scanner.nextInt();

System.out.println("Заполните массив символами:");

for (int i = 0; i < range; i++) {

try {

System.out.print("Элемент " + i + ": ");

array[i] = scanner.next().charAt(0);

} catch (ArrayIndexOutOfBoundsException e) {

System.out.println("Ошибка: выход за границы массива.");

return;

}

}

}

// Задание 3

public static void task3() {

char uppercase = 'Я';

char lowercase = 'я';

try {

uppercase = shiftCode(uppercase, -2);

lowercase = shiftCode(lowercase, 1);

System.out.println("Заглавная буква: " + uppercase);

System.out.println("Строчная буква: " + lowercase);

} catch (CodeOutOfRangeException e) {

System.out.println("Ошибка: " + e.getMessage());

}

}

public static char shiftCode(char ch, int shift) throws CodeOutOfRangeException {

int code = ch;

int shiftedCode = code + shift;

if (shiftedCode < 32 || shiftedCode > 175) {

throw new CodeOutOfRangeException("Преобразованный код выходит за пределы допустимых значений");

}

return (char) shiftedCode;

}

}

Санкт-Петербург 2024

Соседние файлы в папке ЛАБЫ