
- •Основы программирования на языке java в среде eclipse
- •Ответственный за выпуск: в.И. Павловський, зав. Кафедрою информационных и компьютерных систем, канд. Техн. Наук, доцент.
- •2.1 Задание на лабораторную работу 19
- •7.3 Порядок выполнения работы 103
- •7.4 Содержимое отчета 103
- •7.5 Контрольные вопросы 104
- •Введение
- •1Лабораторная работа №1 Изучение среды разработки Eclipse
- •1.1 Задание на лабораторную работу
- •1.2 Краткие теоретические сведения
- •1.2.1Создание проекта
- •1.2.2Создание нового класса Java
- •1.3 Порядок выполнения работы
- •1.4 Содержимое отчета
- •Краткие теоретические сведения.
- •1.5 Контрольные вопросы
- •2Лабораторная работа №2 Основы языка Java
- •2.1 Задание на лабораторную работу
- •2.2 Краткие теоретические сведения
- •2.2.1Создание объектов
- •2.2.2Примитивные типы
- •2.2.3Числа высокой точности
- •2.2.4Уничтожение объектов
- •2.2.5Видимость имен
- •2.2.6Использование других компонентов
- •2.2.7Ключевое слово static
- •2.2.8Массивы
- •2.2.9Обработка ошибок с помощью исключений
- •2.3 Порядок выполнения работы
- •2.4 Содержимое отчета
- •2.5 Контрольные вопросы и задания
- •3Лабораторная работа №3 Объектная модель языка Java
- •3.1 Задание на лабораторную работу
- •3.2 Краткие теоретические сведения
- •3.3 Порядок выполнения работы
- •Краткие теоретические сведения.
- •4.2 Краткие теоретические сведения
- •4.2.1Классы дерева и узла
- •4.2.2Вопросы сокрытия реализации
- •4.2.3Пользовательский интерфейс
- •4.3 Порядок выполнения работы
- •4.4 Содержимое отчета
- •Краткие теоретические сведения.
- •4.5 Контрольные вопросы
- •5Лабораторная работа №5 Изучение основ объектно-ориентированного программирования на языке Java. Часть 2
- •5.1 Задание на лабораторную работу
- •5.2 Краткие теоретические сведения
- •5.2.1Классы деревьев и интерфейсы
- •5.2.2Рекурсивный проход по деревьям разных классов
- •5.2.3Расширение ранее созданных классов специфическими операциями пользователей
- •5.2.4Вопросы оптимизации кода
- •5.3 Порядок выполнения работы
- •5.4 Содержимое отчета
- •Краткие теоретические сведения.
- •5.5 Контрольные вопросы
- •6Лабораторная работа №6 Изучение коллекций Java и системы ввода-вывода
- •6.1 Задание на лабораторную работу
- •6.2 Краткие теоретические сведения
- •6.2.1Представление и реализация дерева на основе коллекций
- •В описании узла дерева необходимо создать и инициализировать объект класса список или набор сыновей, например
- •Количество сыновей узла дерева определяется следующим образом:
- •Элементу набора с индексом I выполняется путем получения массива из набора
- •6.2.2Представление и реализация дерева на основе ассоциативных массивов (карт отображений)
- •В описании узла дерева необходимо создать и инициализировать объект ассоциативный массив сыновей, например
- •Количество сыновей узла дерева определяется следующим образом:
- •6.2.3Доступ к коллекции или ассоциативному массиву через итератор
- •6.2.4Использование обобщений Java 5
- •В описании узла дерева необходимо создать и инициализировать коллекцию настраиваемый список, например
- •6.2.5Сериализация и десериализация дерева в файл
- •6.2.6Ввод и вывод в потоки со сжатием данных
- •6.3 Порядок выполнения работы
- •Краткие теоретические сведения.
- •7.2 Краткие теоретические сведения
- •7.2.1Многопоточность
- •7.2.2Процессы, потоки и приоритеты
- •7.2.3Приоритеты потоков в приложениях Java
- •7.2.4Реализация многопоточности в Java
- •7.2.5Функциональность класса Thread
- •7.2.6Реализация интерфейса Runnable
- •7.2.7Синхронизация потоков
- •7.2.8Синхронизация методов
- •7.2.9Блокировка потока
- •7.2.10Синхронизация доступа к совместно используемым данным.
- •7.2.11Избыточная синхронизация
- •7.2.12Вызов метода wait
- •7.2.13Документирование уровней безопасности
- •7.2.14Работа с графикой Графика 2d
- •Пространства координат
- •Режим рисования
- •Создание цвета
- •Основные методы рисования
- •Рисование фигур средствами Java2d
- •Класс BasicStroke
- •Класс GeneralPath
- •Классы GradientPaint и TexturePaint
- •7.3 Порядок выполнения работы
- •7.4 Содержимое отчета
- •Краткие теоретические сведения;
- •7.5 Контрольные вопросы
- •Многопоточность;
- •Рекомендованная литература
2.2.9Обработка ошибок с помощью исключений
Исключительное состояние – это проблема, которая мешает последовательному исполнению метода или ограниченного участка. Важно различать исключительные состояния и обычные проблемы, в которых имеется достаточно информации в текущем контексте, чтобы как-то справиться с трудностью. В исключительном состоянии невозможно продолжать обработку, потому что нет необходимой информации, чтобы разобраться с проблемой в текущем контексте. Все, что можно сделать – это выйти из текущего контекста и отослать эту проблему к высшему контексту. Это то, что случается, когда выбрасывается исключение.
Когда выбрасывается исключение, случается несколько вещей. Во-первых, создается объект исключения тем же способом, что и любой Java объект: в куче, с помощью new. Затем текущий путь выполнения останавливается, и ссылка на объект исключения выталкивается из текущего контекста. В этот момент вступает механизм обработки исключений и начинает искать подходящее место для продолжения выполнения программы. Это подходящее место – обработчик исключения, чья работа - извлечь проблему, чтобы программа могла попробовать другой способ, либо просто продолжиться.
if(t == null) throw new NullPointerException(); |
Есть два конструктора для всех стандартных исключений: первый - конструктор по умолчанию, и второй принимает строковый аргумент, куда можно поместить подходящую информацию в исключение:
if(t == null) throw new NullPointerException("t = null"); |
Если, находясь внутри метода, возникло исключение, такой метод перейдет в процесс бросания. Если необходимо остаться в методе, необходимо установить специальный блок внутри такого метода для поимки исключения. Блок проверки – это обычный блок, которому предшествует ключевое слово try:
try { // Код, который может сгенерировать исключение } |
Выбрасывание исключения должно где-то заканчиваться. Это “место” – обработчик исключения, и есть один обработчик для каждого типа исключения, которые необходимо поймать. Обработчики исключений следуют сразу за блоком проверки и объявляются ключевым словом catch:
try { // Код, который может сгенерировать исключение } catch(Type1 id1) { // Обработка исключения Type1 } catch(Type2 id2) { // Обработка исключения Type2 } catch(Type3 id3) { // Обработка исключения Type3 } |
Для создания собственного класса исключения необходимо унаследовать его от исключения существующего типа, предпочтительно от того, которое наиболее близко подходит для вашего нового исключения.
Можно создать обработчик, ловящий любой тип исключения. Это можно сделать, перехватив исключение базового типа Exception (есть другие типы базовых исключений, но Exception – это базовый тип, которому принадлежит фактически вся программная активность):
catch(Exception e) { System.err.println("Caught an exception"); } |
Часто есть такие места кода, которые необходимо выполнить независимо от того, было ли выброшено исключение в блоке try, или нет. Это обычно относится к некоторым операциям, отличным от утилизации памяти (так как об этом заботится сборщик мусора). Для достижения этого эффекта необходимо использовать предложение finally в конце списка всех обработчиков исключений. finally необходимо, когда нужно что-то установить, отличное от блока памяти, в его оригинальное состояние. Это может быть очистка определенного вида, такое как открытие файла или сетевого соединения.
Также для вывода отладочной информации можно использовать стандартный поток вывода System.out, который позволяет выводить на консоль данные различного типа.
try { // Критическая область: Опасная активность, // при которой могут быть выброшены A, B или C System.out.println(“Критическая область выполнилась успешно”); } catch(A a1) { // Обработчик ситуации A } catch(B b1) { // Обработчик ситуации B } catch(C c1) { // Обработчик ситуации C } finally { // Действия, совершаемые всякий раз } |