Исключительные ситуации. Обработка исключительных ситуаций

Исключительные ситуации (exceptions) могут возникнуть во время выполнения (runtime) программы, прервав ее обычный ход. К ним относится деление на нуль, отсутствие загружаемого файла, отрицательный или вышедший за верхний предел индекс массива, переполнение выделенной памяти и масса других неприятностей, которые могут случиться в самый неподходящий момент.

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

Блоки перехвата исключения. Мы можем перехватить и обработать исключение в программе. Говорят, что исполняющая система или программа "выбрасывает" (throws) объект-исключение. Этот объект "пролетает" через всю программу, появившись сначала в том методе, где произошло исключение, а программа в одном или нескольких местах пытается (try) его "перехватить" (catch) и обработать. Обработку можно сделать полностью в одном месте, а можно обработать исключение в одном месте, выбросить снова, перехватить в другом месте и обрабатывать дальше. Для того чтобы попытаться (try) перехватить (catch) объект-исключение, надо весь код программы, в котором может возникнуть исключительная ситуация, охватить оператором try{} catch о {}. Каждый блок catchou перехватывает исключение только одного типа, того, который указан в его аргументе. Но можно написать несколько блоков catch(){} для перехвата нескольких типов исключений.

Например возникают исключения двух типов. Напишем блоки их обработки:

class SimpleExtlf

public static void main(String[] args){

try{

int n = Integer.parselnt(args[0]);

System.out.println("After parselnt());

System.out.println(" 10 / n = " + (10 / n) ) ;

Systfem. out. println ("After results output");

}catch(ArithmeticException ae){

System.out.println("From Arithm.Exc. catch: "+ae);

}catch(ArraylndexOutOfBoundsException arre){

System.out.println("From Array.Exc.catch: "+arre);

}finally{

System.out.println("From finally");

}

System.out.println("After all actions");

} }

В программу листинга вставлен блок try{} и два блока перехвата catchou для каждого типа исключений. Обработка исключения здесь заключается просто в выводе сообщения и содержимого объекта-исключения, как оно представлено методом tostring() соответствующего класса-исключения. После блоков перехвата вставлен еще один, необязательный блок finaliy(). Он предназначен для выполнения действий, которые надо выполнить обязательно, чтобы ни случилось. Все, что написано в этом блоке, будет выполнено и при возникновении исключения, и при обычном ходе программы, и даже если выход из блока try{} осуществляется оператором return. Если в операторе обработки исключений есть блок finally{}, то блок catch () {} может отсутствовать, т. е. можно не перехватывать исключение, но при его возникновении все-таки проделать какие-то обязательные действия. Кроме блоков перехвата в листинге после каждого действия делается трассировочная печать, чтобы можно было проследить за порядком выполнения программы.

 

30. Программирование отношений типа «Является», «Имеет», «Использует», «Создает».

В Java поддерживается 4 типа отношений между классами:

1) Отношение типа «является» подразумевает, что один из классов представляет собой спец вариант другого класса(«парта является мебелью»);

2)Отношение типа «имеет» подразумевает процедуру включения одного объекта в другой;

3) Отношение типа «использует» (студент использует ручку)

4) Отношения типа «создаёт» - когда один объект внутри себя создаёт второй (Студент создаёт лекции)

Примеры отношений: 1. public class Parrot extends Bird

2. Wind left wind;

Wind right wind;

3. public Egg born (Parrot p, Nest n)

{…

Egg a=new Egg(p,n);

return a; }

4. Parrot Kesha=new Porrot(«Кеша»true); Bird

Parrot Glasha=new Porrot(«Глаша»false);

Nest n=new Nest (30);

Egg child=Glasha.born(Kesha,n); ß Отношение типа «использует» и «создаёт»