
- •Содержание
- •Введение
- •1. Основные понятия языка Java иUml
- •Простое приложение
- •Простой апплет
- •Классы и объекты
- •Базовые типы данных
- •Операторы
- •If (obj instanceof java.Awt.Font) {/*операторы*/}
- •Операторы управления
- •UmLкак язык описания объектно-ориентированных программ
- •2. Библиотека стандартаJava_se Наследование
- •Использование super и this
- •Абстрактные классы и интерфейсы
- •Переопределение методов
- •Перегрузка методов
- •Полимофизм и расширяемость
- •Статические методы и полиморфизм
- •Внутренние (inner) классы
- •Вложенные классы (nested)
- •Анонимные классы
- •Использование библиотек классов Файлы. Потоки ввода/вывода
- •Обработка исключительных ситуаций
- •Коллекции
- •Графические интерфейсы пользователя
- •События и их обработка
- •Элементы управления
- •2. Библиотека стандартаJava_ee
- •ТехнологииJsp
Обработка исключительных ситуаций
Каждой исключительной ситуации поставлен в соответствие некоторый класс. Если подходящего класса не существует, то он может быть создан разработчиком. Исключения являются наследниками суперкласса Throwable и его подклассовErrorиExceptionиз пакетаjava.lang.
Особенностью исключений в Javaявляется то, что при возникновении исключительной ситуации всегда генерируется объект соответствующего типа, который должен быть перехвачен и обработан определенным для этого блоком кода. Кроме того, при создании метода можно сделать указание программисту включить в код обработку исключений, которые может генерировать этот метод.
Рис.1. Иерархия классов исключительных ситуаций
Обычно используется один из трех способов обработки исключений:
– перехват и обработка исключения в блоках try-catch;
– объявление исключений в секции throwsметода и передача вызывающему методу;
перехват исключения, преобразование его к другому классу и повторный вызов.
Рассмотрим первый подход на следующем примере. При вводе/выводе используется класс IOException. Например:
public void doRead(){
try{
System.in.read(buffer);
}
catch (IOException e) {
String err = e.toString();
System.out.println(err);
}
}
Исключение IOExceptionгенерируется методомread():
public int read() throws IOException
Метод doRread()в блокеtry вызывает метод read(), который пытается ввести данные из потокаSystem.inв буфер. Если возникает ошибка ввода, управление передается блокуcatch, в котором обрабатывается исключение, иначе блокcatchпропускается. Если блокtry-catchопустить, то компилятор укажет на ошибку.
Второй подход можно продемонстрировать на этом же примере.
Если метод может генерировать исключения, которые сам не обрабатывает, а передает для обработки другим методам, он должен объявить о таком поведении с помощью ключевого слова throws, чтобы вызывающие методы могли защитить себя от этих исключений. В вызывающих методах должна быть предусмотрена обработка этих исключений. Форма объявления такого метода:
тип имя_метода(список аргументов) throws список_исключений { }
При этом сам объявляемый метод может содержать блоки try-catch, а может и не содержать их. Например, методdoRead()можно объявить:
public void doRead() throws IOException{
System.in.read(buffer);
}
Обрабатывать исключение при этом будет метод, вызывающий doRead():
public void myDoRead(){
try {
doRead();
}
catch (IOException e){
String err = e.toString();
System.out.println(err);
}
}
Третий подход будет рассмотрен ниже на примере создания пользовательских исключений.
Метод может обрабатывать несколько исключений.
/* пример # 1 : обработка 2-х типов исключений : TwoException.java */
class TwoException {
public static void main(String[] args) {
try {
int a = (int)(Math.random() * 2);
System.out.println("a = " + a);
int c[] = { 1/a };
c[1] = 1;
}
catch(ArithmeticException e){
System.out.println("деление на 0"+ e);
}
catch(ArrayIndexOutOfBoundsException e) {
System.out.println("превышение границ массива: " + e);
}
System.out.println("после блока try/catch");
}
}
Исключение "деление на 0"возникнет при инициализации элемента массиваа = 0. В противном случае (а = 1) генерируется исключение"превышение границ массива"при попытке присвоить значение второму элементу массивас[], который содержит только один элемент.