Исключения в Java Макаревич Л. Г.
Исключения – это механизм взаимодействия между кодом, приведшим к ошибке, и кодом, обрабатывающим ошибку Исключение выбрасывается (throw), когда возникает некоторая ситуация. Оно перехватывается в программе (catch). В противном случае оно обрабатывается по умолчанию Throwable Error Exception RuntimeExceptionВсе прочие непроверяемые
Преимущества исключений Разделение кода и обработки ошибок Группирование ошибок по типам Раскрутка стека 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; }
Создание исключений class MyException extends Exception { MyException(){System.out.println(Id must be natural!);} }
Выбрасывание исключений class ExceptThrow { public static void main(String[] args)throws MyException {int id = -1; if (id
Перехват исключений class ExceptThrow { public static void main(String[] args) {int id = -1; try { if (id
try-блок try { Java statements } PrintWriter out = null; try { System.out.println("Entering try statement"); out = new PrintWriter( new FileWriter("OutFile.txt")); for (int i = 0; i < size; i++) out.println("Value at: " + i + " = " + vector.elementAt(i)); }
catch try {... } catch (... ) {... } catch (... ) {... } finally{...} try {... } catch (ArrayIndexOutOfBoundsException e) { System.err.println("Caught ArrayIndexOutOfBoundsException: " + e.getMessage()); } catch (IOException e) { System.err.println("Caught IOException: " + e.getMessage()); }
try {... } catch (Exception e) { System.err.println("Exception caught: " + e.getMessage()); }
public class ListOfNumbers { private Vector vector; private static final int size = 10; public ListOfNumbers () { victor = new Vector(size); for (int i = 0; i < size; i++) victor.addElement(new Integer(i)); } public void writeList() { PrintWriter out = null; try { System.out.println("Entering try statement"); out = new PrintWriter( new FileWriter("OutFile.txt")); for (int i = 0; i < size; i++) out.println("Value at: " + i + " = " + vector.elementAt(i)); } catch (ArrayIndexOutOfBoundsException e) { System.err.println("Caught ArrayIndexOutOfBoundsException: " + e.getMessage()); } catch (IOException e) { System.err.println("Caught IOException: " + e.getMessage()); } finally { if (out != null) { System.out.println("Closing PrintWriter"); out.close(); } else { System.out.println("PrintWriter not open"); }
Указание о выбрасывании исключения public void writeList() throws IOException, ArrayIndexOutOfBoundsException {
Выбрасывание исключений throw someThrowableObject; import java.io.*; import java.util.Vector; public Object pop() throws EmptyStackException { Object obj; if (size == 0) throw new EmptyStackException(); obj = objectAt(size - 1); setObjectAt(size - 1, null); size--; return obj; }