Exceptions CSC 171 FALL 2004 LECTURE 24. READING Read Horstmann Chapter 14 This course covered...

48
Exceptions Exceptions CSC 171 FALL 2004 LECTURE 24

Transcript of Exceptions CSC 171 FALL 2004 LECTURE 24. READING Read Horstmann Chapter 14 This course covered...

ExceptionsExceptions

CSC 171 FALL 2004

LECTURE 24

READINGREADING

Read Horstmann Chapter 14This course covered Horstmann Chapters 1

- 15

EXAMEXAM

Thursday 12/9 in class– Chapters 11, 13-15

Make up examMake up exam

Friday 12/3 12:15PM-1:25PMCSB 703

GRADINGGRADING

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%

Errors in ProgrammingErrors in Programming

Errors in ProgrammingErrors in Programming

Sometimes cause by our codeSometimes caused by external codeReasonable to take precautions

Two aspects of errorsTwo 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 SchoolOld School

have the method return an indication of success/failure (an “error code”)

x.doSomething();

// becomes

if (x.doSomething() == -1) return false;

New SchoolNew 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 ObjectsException Objects

THROWING EXCEPTIONSTHROWING EXCEPTIONSIf 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)

ExampleExample

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/UNCHECKEDCHECKED/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 ExceptionsUnchecked 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/CATCHTRY/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 _________.

finallyfinally

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.

ExampleExample

BufferedReader in = null; try { in = new BufferedReader( new FileReader(filename)); purse.read(in); } finally { if (in !=null) in.close(); }