
ЛАБЫ / КПП отчёт пр4
.docxФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)
_____________________________________________________________________
Факультет Информационных систем и технологий
Кафедра Безопасности информационных систем
Дисциплина «Кроссплатфрменное программирование»
ОТЧЕТ
за практическое занятие №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