Исключения в Java

  • pptx
  • 04.05.2020
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала 1. Исключения в Java.pptx

Исключения в Java

Исключения – это механизм взаимодействия между кодом, приведшим к ошибке, и кодом, обрабатывающим ошибку

Исключение выбрасывается (throw), когда возникает некоторая ситуация.
Оно перехватывается в программе (catch). В противном случае оно обрабатывается по умолчанию

Error – фатальные ошибки
RuntimeExcaption – компилятор не требует их обязательной обработки
Exception – компилятор проверяет предусмотрена ли обработка ошибок

Причины возникновения исключений

Попытка выполнить некорректное выражение. Например, деление на ноль, или обращение к объекту по ссылке, равной null, попытка использовать класс, описание которого (class-файл) отсутствует, и т.д. В таких случаях всегда можно точно указать, в каком месте произошла ошибка, - именно в некорректном выражении.
Выполнение оператора throw Этот оператор применяется для явного порождения ошибки. Здесь тоже можно указать место возникновения исключительной ситуации.
Асинхронные ошибки во время исполнения программы.

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

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

Конструкция try-catch
try {
охраняемый блок
} catch(SomeExceptionClass e) { ...}
. . .
catch(AnotherExceptionClass e) { ...}
Конструкция try-catch-finally
try {
byte [] buffer = new byte[128];
FileInputStream fis = new FileInputStream("file.txt");
while(fis.read(buffer) > 0) { ... обработка данных ... }
} catch(IOException es) { ... обработка исключения ...
} finally {
fis.flush(); fis.close();
}

Оператор throw

Программист сам может явно породить исключительную ситуацию
...
public int calculate(int theValue) throws Exception { I
f( theValue < 0) {
throw new Exception("Параметр для вычисления не должен быть отрицательным");
}}...
Можно передать информацию об исключительной ситуации в вызывающий код
...
try { ...
} catch(IOException ex) {
... // Обработка исключительной ситуации
... // Повторное возбуждение исключительной ситуации
throw ex;
}

Преимущества исключений

Разделение кода и обработки ошибок
Группирование ошибок по типам
Раскрутка стека

readFile {
    try {
        open the file;
        determine its size;
        allocate that much memory;
        read the file into memory;
        close the file;
    } catch (fileOpenFailed) {
        doSomething;
    } catch (sizeDeterminationFailed) {
        doSomething;
    } catch (memoryAllocationFailed) {
        doSomething;
    } catch (readFailed) {
        doSomething;
    } catch (fileCloseFailed) {
        doSomething;
    }
}

method1 {
try {
call method2;
} catch (exception) {
doErrorProcessing;
}
}
method2 throws exception {
call method3;
}
method3 throws exception {
call readFile;
}

Создание классов исключений

public class UserException extends Exception {
public UserException() {
super();
}
public UserException(String descry) {
super(descry);
}
}

Выбрасывание исключения:
throw new UserException( "Дополнительное описание");

Выбрасывание исключений

class ExceptThrow
{
public static void main(String[] args)throws MyException
{int id = -1;
if (id<1)throw new MyException();
System.out.println("Никогда не выполнится");
}
}
class MyException extends Exception
{
MyException(){System.out.println("Id must be natural!");}
}

Перехват исключений

class ExceptThrow
{
public static void main(String[] args)
{
int id = -1;
try {
if (id<1)throw new MyException();
} catch(MyException e){
System.out.println("Mistake");
} finally {
System.out.println("Id="+id);
}
System.out.println("Finished");
}
}
class MyException extends Exception
{
MyException(){System.out.println("Id must be natural!");}
}

Переопределение методов и исключений

При переопределении метода список
исключений можно только сужать
public class BaseClass{
public void method () throws IOException
{ ... }
}
public class LegalOne extends BaseClass {
public void method () throws IOException
{ ... }
}
public class LegalTwo extends BaseClass {
public void method ()
{ ... }
}
public class LegalTree extends BaseClass {
public void method () throws IOException, MalformedURLException
{ ... }
}

Ошибка!!!
public class IllegalOne extends BaseClass {
public void method () throws IOException,IllegalAccessException
{ ... }
}
public class IllegalTwo extends BaseClass {
public void method ()
{ ... throw new Exception(); }
}

Метод создает исключения, которые являются подклассами исключения, возбуждаемого в старом методе

Исключение не указано

Посмотрите также