exceptions "a slipping gear could let your m203 grenade launcher fire when you least expect it....

41
Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your unit." - THE U.S. Army's PS magazine, August 1993, quoted in The Java Programming Language, 3rd edition

Upload: malcolm-morgan

Post on 11-Jan-2016

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Exceptions

"A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your unit."

- THE U.S. Army's PS magazine, August 1993, quoted in The Java Programming Language, 3rd edition

Page 2: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

When Good Programs Go Bad A variety of problems can occur when a

program is running. – User input error: bad url– Device errors: remote server unavailable– Physical limitations: disk full– Code errors: code that does not fulfill its contact

(i.e. pre- and post-conditions) When a problem occurs

– return to safe state, save work, exit gracefully Code that handles a problem may be far

removed from code that caused it

Computer Science II 2

Page 3: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

How to Handle Problems? It is possible to detect and handle problems

of various types. Issue: this complicates the code and makes

it harder to understand.– The problem detection and problem handling

code have little or nothing to do with the real code is trying to do.

A tradeoff between ensuring correct behavior under all possible circumstances and clarity of the code

Computer Science II 3

Page 4: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Handling Problems in Java Based on that of C++, but more in line with

OOP philosophy All errors/exceptions are objects of classes

that are descendants of the Throwable class

Computer Science II Computer Science II 4

Page 5: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Classes of Exceptions The Java library includes two subclasses of Throwable interface:– Error

• Thrown by the Java interpreter for events such as heap overflow

• Never handled by user programs

– Exception• User-defined exceptions are usually subclasses of this• Has two predefined subclasses:

–IOException –RuntimeException

Computer Science II Computer Science II 5

Page 6: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Error/Exception Classes

LinkageError

Error

AWTError

AWTException

Throwable

ClassNotFoundException

VirtualMachineError

IOException

Exception

RuntimeException

Object

ArithmeticException

NullPointerException

IndexOutOfBoundsException

Several more classes

Several more classes

Several more classes

IllegalArgumentException

Computer Science II 6

Page 7: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Throwable Interface Methods

Methods with Descriptionpublic String getMessage()Returns a detailed message about the exception that has occurred. This message is initialized in the Throwable constructor.

public Throwable getCause()Returns the cause of the exception as represented by a Throwable object.public String toString()Returns the name of the class concatenated with the result of getMessage()

public void printStackTrace()Prints the result of toString() along with the stack trace to System.err, the error output stream.

public StackTraceElement [] getStackTrace()Returns an array containing each element on the stack trace. The element at index 0 represents the top of the call stack, and the last element in the array represents the method at the bottom of the call stack.

public Throwable fillInStackTrace()Fills the stack trace of this Throwable object with the current stack trace, adding to any previous information in the stack trace.

Computer Science II 7

Page 8: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Exceptions Many languages, including Java, use a

mechanism know as exceptions to handle problems at runtime– In Java, Exception is a class with many

descendants. – For example:

•ArrayIndexOutOfBoundsException•NullPointerException•FileNotFoundException•ArithmeticException•IllegalArgumentException

Computer Science II 8

Page 9: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Handling Exceptions Exceptions in Java fall into two different

categories:– Checked (not Runtime) and Unchecked

(Runtime)

– Checked exception• Must be caught in catch block• Or declared in throws clause

– Unchecked exception• Need not be caught in catch block or declared in throws

• Exceptions that exist in code should be fixed

Computer Science II 9

Page 10: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Unchecked Exceptions Unchecked exceptions are completely

preventable and should never occur. – Caused by logic errors, created by us, the

programmers.– Descendents of the RuntimeException class

There does not need to be special error handling code– Just regular error prevention code

If error handling code was required, programs would be unwieldy

Computer Science II 10

Page 11: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Unchecked Runtime Exceptions

Exception Description

ArithmeticException Arithmetic error, such as divide-by-zero.

ArrayIndexOutOfBoundsException Array index is out-of-bounds.

ArrayStoreException Assignment to an array element of an incompatible type.

ClassCastException Invalid cast.

IllegalArgumentException Illegal argument used to invoke a method.

IllegalMonitorStateException Illegal monitor operation, such as waiting on an unlocked thread.

IllegalStateException Environment or application is in incorrect state.

IllegalThreadStateException Requested operation not compatible with current thread state.

IndexOutOfBoundsException Some type of index is out-of-bounds.

NegativeArraySizeException Array created with a negative size.

NullPointerException Invalid use of a null reference.

NumberFormatException Invalid conversion of a string to a numeric format.

SecurityException Attempt to violate security.

StringIndexOutOfBounds Attempt to index outside the bounds of a string.

UnsupportedOperationException An unsupported operation was encountered.

Computer Science II 11

Page 12: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Checked Exceptions "Checked exceptions represent conditions

that, although exceptional, can reasonably be expected to occur, and if they do occur must be dealt with in some way.[other than the program terminating.]"– Java Programming Language, Third Edition

Checked exceptions represent errors that are unpreventable by us

Computer Science II 12

Page 13: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Checked Runtime Exceptions

Exception Description

ClassNotFoundException Class not found.

CloneNotSupportedExceptionAttempt to clone an object that does not implement the Cloneable interface.

IllegalAccessException Access to a class is denied.

InstantiationExceptionAttempt to create an object of an abstract class or interface.

InterruptedExceptionOne thread has been interrupted by another thread.

NoSuchFieldException A requested field does not exist.

NoSuchMethodException A requested method does not exist.

Computer Science II 13

Page 14: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

When Exceptions Occur When an exception occurs, the normal flow of

control of a program halts The method where the exception occurred creates

an exception object of the appropriate type– The object contains information about the error– Then hands the exception to the Java Runtime System

The Java Runtime System (JRS) searches for a matching catch block for the exception

The first matching catch block is executed When the catch block code is completed, the

program goes the next regular statement after the catch block

Computer Science II 14

Page 15: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Call Stack After a method throws an exception, the JRS

looks for a method with a catch block to handle it. This block of code is called the exception handler. If the method that threw the exception can’t handle it, the JRS looks in the ordered list of methods that have been called to get to this method. This list of methods is known as the call stack.

Computer Science II 15

Page 16: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Exception Handler The search for an exception handler starts

with the method where the error occurred. The search then proceeds down the call stack. When an appropriate handler is found, the JRS passes the exception to the handler. An exception handler is considered appropriate if the type of the exception object thrown matches the type that can be handled by the handler.

Computer Science II 16

Page 17: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Catching Exceptions The exception handler chosen is said to

catch the exception. If the JRS the whole call stack without finding an appropriate exception handler, the JRS and the program terminate.

Computer Science II 17

Page 18: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Catching Exceptions Method uses a try block around code that may

cause an exception.

Catch statement declares type of exception trying to catch. If an exception occurs of that type, the exception is passed on to that block for processing.

Computer Science II

try {

//Protected code }catch(ExceptionName e1) {

//Catch block }

18

Page 19: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

An Example

Computer Science II

// File Name : ExcepTest.java import java.io.*; public class ExcepTest{

public static void main(String args[]){

try{

int a[] = new int[2]; System.out.println("Access element

three :" + a[3]); }catch(ArrayIndexOutOfBoundsException e){

System.out.println("Exception thrown :" + e); } System.out.println("Out of the block"); }

} 19

Page 20: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Example – cont’d The above code would produce the following

result:

Computer Science II

Exception thrown :java.lang.ArrayIndexOutOfBoundsException: 3 Out of the block

20

Page 21: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Multiple Catch Blocks A try block can be followed by multiple catch

blocks.

Computer Science II

try {

//Protected code }catch(ExceptionType1 e1) {

//Catch block }catch(ExceptionType2 e2) {

//Catch block }catch(ExceptionType3 e3) {

//Catch block } 21

Page 22: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Example-Multiple Catch Blocks

Computer Science II

try {

file = new FileInputStream(fileName);

x = (byte) file.read(); }catch(FileNotFoundException f){

f.printStackTrace(); return -1;

} catch(IOException i) {

i.printStackTrace(); return -1;

} 22

Page 23: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

throws / throw Keywords If a method does not handle a checked exception, the

method must declare it using the throws keyword.

Computer Science II

import java.io.*; public class className {

public void deposit(double amount) throws RemoteException

{ // Method implementation throw new RemoteException();

} //Remainder of class definition

}

23

Page 24: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Multiple Exceptions Thrown A method can throw more than one exception

– Exceptions are declared in a list separated by commas.

Computer Science II

import java.io.*; public class className { public void withdraw(double amount) throws RemoteException, InsufficientFundsException {

// Method implementation } //Remainder of class definition }

24

Page 25: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

finally Block The finally keyword used to create a block of

code that follows a try block. – always executes, whether or not an exception has

occurred.– run any cleanup-type statements that you want to execute– appears after the catch blocks

Computer Science II

try { //Protected code }catch(ExceptionType e) { //Catch block } finally { //The finally block always executes. }

25

Page 26: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Example – finally Block

Computer Science II

public class ExcepTest{ public static void main(String args[]) {

int a[] = new int[2]; try{ System.out.println("Access element three :" + a[3]);}catch(ArrayIndexOutOfBoundsException e){ System.out.println("Exception thrown :" + e); } finally{ a[0] = 6; System.out.println("First element value: " +a[0]); System.out.println("The finally statement is executed"); }

} }

26

Page 27: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

finally Block Example – cont’d Would produce this result:

Computer Science II

Exception thrown :java.lang.ArrayIndexOutOfBoundsException: 3 First element value: 6 The finally statement is executed

27

Page 28: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Things to Note Must follow a try block with either catch

and/or finally block. Catch blocks must follow a try statement. A finally block is not required if there are try-catch blocks.

try, catch, finally blocks must follow each other in that order– There cannot be any code cannot between them.

Computer Science II 28

Page 29: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Throwing Exceptions Yourself If you wish to throw an exception in your code, you

use the throw keyword Most common would be for an unmet precondition

public class Circle{ private int iMyRadius;

/** pre: radius > 0 */public Circle(int radius){ if (radius <= 0)

throw new IllegalArgumentException("radius must be > 0. "+ "Value of radius: " + radius);

iMyRadius = radius;}

}Computer Science II 29

Page 30: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Creating Exceptions All exceptions must inherit from the Throwable

class. If you want to write a checked exception, extend the Exception class.

If you want to write a runtime exception, extend the RuntimeException class.

Define at least two constructors1. Default, no parameters

2. Other with String parameter

– For both, call constructor of base class using super

Do not override inherited getMessage

Computer Science II 30

Page 31: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Example–Creating Exceptions

Computer Science II

// File Name InsufficientFundsException.java import java.io.*; public class InsufficientFundsException extends Exception {

private double amount; public InsufficientFundsException(double amount) {

this.amount = amount; } public double getAmount() {

return amount; }

}

31

Page 32: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Example – cont’d

Computer Science II

// File Name CheckingAccount.java import java.io.*; public class CheckingAccount { private double balance; private int accountNumber; public CheckingAccount(int accountNumber) { this.accountNumber = accountNumber; } public void deposit(double amount) { balance += amount;} public void withdraw(double amount) throws InsufficientFundsException {

if(amount <= balance) { balance -= amount; } else { double needs = amount - balance; throw new InsufficientFundsException(needs); }

} public double getBalance() { return balance; }}

32

Page 33: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Example - concluded

Computer Science II

// File Name BankDemo.java public class BankDemo { public static void main(String [] args) {

CheckingAccount c = new CheckingAccount(101); System.out.println("Depositing $500..."); c.deposit(500.00);

try { System.out.println("\nWithdrawing $100...");

c.withdraw(100.00); System.out.println("\nWithdrawing $600...");

c.withdraw(600.00); } catch(InsufficientFundsException e) {

System.out.println("Sorry, but you are short $" + e.getAmount());

e.printStackTrace(); } }

}

33

Page 34: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Errors An error is an object of class Error

– Similar to an unchecked exception– Need not catch or declare in throws clause

– Object of class Error generated when abnormal conditions occur

Errors are more or less beyond your control– Require change of program to resolve

Computer Science II 34

Page 35: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Question 1What is output by the method badUse if it is called with the following code?int[] nums = {3, 2, 6, 1};badUse( nums );

public static void badUse(int[] vals){ int total = 0; try{ for(int i = 0; i < vals.length; i++){ int index = vals[i]; total += vals[index]; }

} catch(Exception e){ total = -1; } System.out.println(total);}

A. 1 B. 0 C. 3 D. -1 E. 5

Computer Science II 35

Page 36: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Question 2Is the use of a try-catch block on the previous question a proper use of try-catch blocks?

A. Yes

B. No

Computer Science II 36

Page 37: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Computer Science II

Assertions Statements in the program declaring a Boolean

expression about the current state of variables If evaluate to true, nothing happens If evaluate to false, an AssertionError

exception is thrown Can be disabled during runtime without program

modification or recompilation Two forms

– assert condition;– assert condition: expression;

37

Page 38: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Error Handling, Error Handling Everywhere!

Seems like a lot of choices for error prevention and error handling– normal program logic (e.g. ifs, for-loop

counters)– assertions– try-catch block

When is it appropriate to use each kind?

Computer Science II 38

Page 39: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Error Prevention Use program logic (ifs , fors) to

prevent logic errors and unchecked exceptions– dereferencing a null pointer– going outside the bounds of an array– violating the preconditions of a method you

are calling

Computer Science II 39

Page 40: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Error Prevention – cont’d In general, don’t use asserts to check

preconditions– Standard Java style is to use exceptions

Use try-catch blocks on checked exceptions– Don’t use them to handle unchecked exceptions,

like null pointer or array index out of bounds One place it is reasonable to use try-catch is in testing suites. – put each test in a try-catch. If an exception

occurs that test fails, but other tests can still be run

Computer Science II 40

Page 41: Exceptions "A slipping gear could let your M203 grenade launcher fire when you least expect it. That would make you quite unpopular in what's left of your

Advantages of Exceptions

1. Separating Error-Handling Code from "Regular" Code– Means to separate the details of what to do when something

out of the ordinary happens from the main logic of a program.

2. Propagating Errors Up the Call Stack– Ability to propagate error reporting up the call stack of

methods.

3. Grouping and Differentiating Error Types– All exceptions thrown within a program are objects, the

grouping or categorizing of exceptions is a natural outcome of the class hierarchy.

Computer Science II 41