480 likes | 500 Views
Learn about recognizing and dealing with errors in Java through the exception handling mechanism. Understand the use of try/catch blocks and throwing exceptions.
E N D
Exceptions CSC 171 FALL 2004 LECTURE 24
READING • Read Horstmann Chapter 14 • This course covered Horstmann Chapters 1 - 15
EXAM • Thursday 12/9 in class • Chapters 11, 13-15
Make up exam • Friday 12/3 12:15PM-1:25PM • CSB 703
OLD Midterm 10% Projects (4) 40% Final 15% Quizes (10) 10% Labs (15) 15% Workshops 10% NEW Exam 1 13% Projects (4) 40% Exam 2 12% Quizes (6) 5% Labs (21) 20% Workshops 10% GRADING
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.
THROWING EXCEPTIONS If I am a method AND If a problem occurs then I can deal with it by : • Constructing a new exception object describing the problem • “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(); }