Exceptions CSC 171 FALL 2004 LECTURE 24
READING Read Horstmann Chapter 14 This course covered Horstmann Chapters
EXAM Thursday 12/9 in class – Chapters 11, 13-15
Make up exam Friday 12/3 12:15PM-1:25PM CSB 703
GRADING OLD Midterm 10% Projects (4) 40% Final 15% Quizes (10) 10% Labs (15) 15% Workshops10% NEW Exam 1 13% Projects (4) 40% Exam 2 12% Quizes (6) 5% Labs (21) 20% Workshops10%
Errors in Programming
Sometimes cause by our code Sometimes caused by external code Reasonable to take precautions
Two aspects of errors Recognizing when an error occurs Dealing with the errors
There are two aspects of handling failure: ________________ and ________________.
There are two aspects of handling failure: ___detection____ and ____recovery____________.
Old School have the method return an indication of success/failure (an “error code”) x.doSomething(); // becomes if (x.doSomething() == -1) return false;
New School Java has an exception handling mechanism which can require potential errors to be recognized. This mechanism is flexible and efficient.
In Java, ___________________________ provides a flexible mechanism for passing control from the point of error detection to a recovery handler.
In Java, __exception handling_______ provides a flexible mechanism for passing control from the point of error detection to a recovery handler.
Exception Objects
THROWING EXCEPTIONS If I am a method AND If a problem occurs then I can deal with it by : 1. Constructing a new exception object describing the problem 2. “Throw” the object to the method that invoked me (I have to terminate to do this)
Example public class BankAccount { public void withdraw(double amount) { if (amount > balance) throw new IllegalArgumentException( "Amount exceeds balance"); balance = balance - amount; }... }
To signal an exceptional condition, use the _____________ statement to throw an _____________________ object.
To signal an exceptional condition, use the ____throw____ statement to throw an __________exception____ object.
When you throw an exception, the current method _____________________.
When you throw an exception, the current method __terminates______.
CHECKED/UNCHECKED It’s hard to anticipate all possible exceptions at compile time. The compiler checks to see if we deal with exceptions (checked exeptions) Unchecked exceptions are not enforced by the compiler.
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException ; public class Console { public static void main(String [] args) { InputStreamReader isreader = new InputStreamReader(System.in); BufferedReader console = new BufferedReader(isreader); String input1 = console.readLine(); System.out.println(input1); }
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException ; public class Console { public static void main(String [] args) throws IOException{ InputStreamReader isreader = new InputStreamReader(System.in); BufferedReader console = new BufferedReader(isreader); String input1 = console.readLine(); System.out.println(input1); }
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException ; public class Console { public static void main(String [] args) { InputStreamReader isreader = new InputStreamReader(System.in); BufferedReader console = new BufferedReader(isreader); try { String input1 = console.readLine(); System.out.println(input1); } catch (IOException e) { System.out.println(“Problem”); }
Unchecked Exceptions int k = Integer.parseInt(“Hello World”); int [] a = {2,3,4,5,6,7,8,9} ; a[20] = 5;
There are two kind of exceptions: ______________________ and _____________________ exceptions.
There are two kind of exceptions: ___checked_______ and ___unchecked________ exceptions.
Unchecked exceptions extend the class _________________________ or _________________.
Unchecked exceptions extend the class _RuntimeException______ or _____Error______.
Checked exceptions are due to __________________________________. The compiler checks that your program handles these exceptions.
Checked exceptions are due to _external circumstances___. The compiler checks that your program handles these exceptions.
Add a _____________________ specifier to a method that can throw a checked exception.
Add a __throws_______ specifier to a method that can throw a checked exception.
You can design your own exception types – subclasses of _______________________ or ______________________.
You can design your own exception types – subclasses of __Exception____ or ___RuntimeException_.
public class InsufficientFundsException extends RuntimeException { public InsufficientFundsException() { } public InsufficientFundsException(String reason) { super(reason); } }
TRY/CATCH Statements in try block are executed If no exceptions occur, catch clauses are skipped If exception of matching type occurs, execution jumps to catch clause If exception of another type occurs, it is thrown to the calling method If main doesn't catch an exception, the program terminates with a stack trace
try { BufferedReader in = new BufferedReader( new InputStreamReader(System.in)); System.out.println("How old are you?"); String inputLine = in.readLine(); int age = Integer.parseInt(inputLine); age++; System.out.println("Next year,you'll be " + age); } catch (IOException exception) { System.out.println("Input/output error " +exception); } catch (NumberFormatException exception) { System.out.println("Input was not a number"); }
In a method that is ready to handle a particular exception type, place the statements that can cause the exception inside a ____________________, place the handler inside a ______________________________.
In a method that is ready to handle a particular exception type, place the statements that can cause the exception inside a ________try block________, place the handler inside a __catch clause_________.
It is better to _________________________________ than to _______________________.
It is better to ________give_______________ than to ________ receive _________.
finally Exception terminates current method Danger: Can skip over essential code Example: BufferedReader in; in = new BufferedReader( new FileReader(filename)); purse.read(in); in.close(); Must execute in.close() even if exception happens Use finally clause for code that must be executed "no matter what"
Once a try block is entered, the statements in a ___________________ clause are guaranteed to be executed, whether or not an exception is thrown.
Once a try block is entered, the statements in a ______ finally _____ clause are guaranteed to be executed, whether or not an exception is thrown.
Example BufferedReader in = null; try { in = new BufferedReader( new FileReader(filename)); purse.read(in); } finally { if (in !=null) in.close(); }