0% found this document useful (0 votes)
10 views

Lecture 23,24 Exception Handling

The document discusses exception handling in Java. It covers defining exception classes, throwing exceptions using the throw keyword, and catching exceptions using try-catch blocks. Finally blocks are used to execute code regardless of whether an exception occurs. Checked exceptions must be caught or declared to be thrown, while unchecked exceptions like RuntimeExceptions do not require handling. Custom exceptions can be defined when predefined classes are insufficient.

Uploaded by

Johny Singh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
10 views

Lecture 23,24 Exception Handling

The document discusses exception handling in Java. It covers defining exception classes, throwing exceptions using the throw keyword, and catching exceptions using try-catch blocks. Finally blocks are used to execute code regardless of whether an exception occurs. Checked exceptions must be caught or declared to be thrown, while unchecked exceptions like RuntimeExceptions do not require handling. Custom exceptions can be defined when predefined classes are insufficient.

Uploaded by

Johny Singh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 47

Lecture 23,24

Exception Handling
Objectives
• Chapter 13
• Exceptions
• Exception handling
• Declaring exception
• Throwing exception
• Catching exception
• Different types of exceptions
• Error vs. Exception
• Checked vs. unchecked
• Keywords
• try, catch, finally
• throw, throws
Motivation
• When a program runs into a runtime error, the
program terminates abnormally.
• How can you handle the runtime error so that
the program can continue to run or terminate
gracefully?
Exceptions
Program
• Show runtime error

Quotient Run
Program
• Fix it using an if statement

QuotientWithIf Run
Previously
• Exceptions
• Motivation
Program
• What if the runtime error occurs in a called
method?

QuotientWithException Run
Program
• The advantages of using exception handling:
• It enables a method to throw an exception to its
caller.
• Without this capability, a method must handle the
exception or
• terminate the program.

QuotientWithMethod Run
Program
• By handling InputMismatchException, your
program will continuously read an input until it is
correct.

InputMismatch Run
Exception Hierarchy

• Exception Types
Exception Hierarchy

• “System errors” are thrown by JVM and


represented in the Error class.
• E.g. Linkage error, VirtualMachineError, …
• The Error class describes internal system errors.
• Such errors rarely occur.
• If one does, there is little you can do beyond
notifying the user and trying to terminate the
program gracefully.
Exception Hierarchy

• “Exception” describes errors caused by your


program and external circumstances.
• E.g. RuntimeException, IOException,
ClassNotFoundException, …
• These errors can be caught and handled by your
program.
Exception Hierarchy

• “RuntimeException” is caused by programming


errors, such as bad casting, accessing an out-of-
bounds array, and numeric errors.
• E.g. ArithmaticException, NulPointerException,
IndexOfBoundException,
IllegalArgumentException,…
Checked

• RuntimeException, Error and their subclasses are


known as unchecked exceptions.
• All other exceptions are known as checked
exceptions, meaning that
• the compiler forces the programmer to check and
deal with the exceptions.
Checked

• In most cases, unchecked exceptions reflect


programming logic errors that are not recoverable.
• E.g. NullPointerException or
IndexOutOfBoundsException
• To avoid cumbersome overuse of try-catch blocks,
Java does not mandate you to write code to catch
unchecked exceptions.
Exception Handling

• Exception handling process


1. Declare exception
2. Throw exception
3. Catch exception
Declaring Exception

• Every method must state the types of checked


exceptions it might throw.
• This is known as declaring exceptions.
Throwing Exception

• When the program detects an error, the program


can create an instance of an appropriate
exception type and throw it.
• This is known as throwing an exception.
Throwing Exception

• Example

/** Set a new radius */


public void setRadius(double newRadius)
throws IllegalArgumentException
{
if (newRadius >= 0)
radius = newRadius;
else
throw new IllegalArgumentException(
"Radius cannot be negative");
}
Catching Exception

• Example
Catching Exception

• Exception handling example


Previously

• Exceptions
• Used in conjunction with methods
• 3 steps
• Declare (throws)
• Throw (throw)
• Catch (try-catch)
• Checked vs. unchecked
Catching Exception

• Java forces you to deal with checked exceptions.


• IOException
• If a method declares a checked exception you
must
1. invoke it in a try-catch block or
2. declare to throw the exception in the calling
method.
Catching Exception

• For example, you have to write the code as shown in


(a) or (b).
Catching Exception

• The order in which exceptions are specified in catch


blocks is important.
• A compile error will result if a catch block for a
superclass type appears before a catch block for a
subclass type.
Program
• This example demonstrates declaring, throwing,
and catching exceptions by modifying the
setRadius method in the Circle class.
• The new setRadius method throws an exception if
radius is negative.

TestCircleWithException CircleWithException

Run
Rethrow
• Rethrwoing exceptions
finally
• Occasionally, you may want some code to be
executed regardless of whether an exception
occurs or is caught.
Trace Program
Suppose no exceptions in
the statements

try {
statements;
}
catch(TheException ex) {
//handling ex;
}
finally {
//finalStatements;
}

//Next statement ..
Trace Program

try {
statements;
}
catch(TheException ex) {
//handling ex; The final block is always
executed
}
finally {
//finalStatements;
}

//Next statement ..
Trace Program

try {
statements;
}
catch(TheException ex) {
//handling ex;
}
finally {
//finalStatements; Next statement in the
method is executed
}

//Next statement ..
Trace Program
try { Suppose an exception of
statement1; type Exception1 is thrown in
statement2; statement2
statement3;
}
catch(Exception1 ex1) {
//handling ex1;
}
catch(Exception2 ex2) {
//handling ex2;
throw x
}
finally {
//finalStatements;
}

//Next statement ..
Trace Program
try {
statement1;
statement2;
statement3;
} The exception is handled.
catch(Exception1 ex1) {
//handling ex1;
}
catch(Exception2 ex2) {
//handling ex2;
throw x
}
finally {
//finalStatements;
}

//Next statement ..
Trace Program
try {
statement1;
statement2;
statement3;
}
catch(Exception1 ex1) {
//handling ex1;
}
catch(Exception2 ex2) { The final block is always
//handling ex2; executed.
throw x
}
finally {
//finalStatements;
}

//Next statement ..
Trace Program
try {
statement1;
statement2;
statement3;
}
catch(Exception1 ex1) {
//handling ex1;
}
catch(Exception2 ex2) {
//handling ex2;
throw x
} The next statement in the
finally { method is now executed.
//finalStatements;
}

//Next statement ..
Trace Program
try {
statement1;
statement2; statement2 throws an
statement3; exception of type Exception2.
}
catch(Exception1 ex1) {
//handling ex1;
}
catch(Exception2 ex2) {
//handling ex2;
throw x
}
finally {
//finalStatements;
}

//Next statement ..
Trace Program
try {
statement1;
statement2;
statement3;
}
catch(Exception1 ex1) {
//handling ex1;
}
catch(Exception2 ex2) {
//handling ex2; Handling exception
throw x
}
finally {
//finalStatements;
}

//Next statement ..
Trace Program
try {
statement1;
statement2;
statement3;
}
catch(Exception1 ex1) {
//handling ex1;
}
catch(Exception2 ex2) {
//handling ex2;
throw x
}
finally {
//finalStatements; Execute the final block
}

//Next statement ..
Trace Program
try {
statement1;
statement2;
statement3;
}
catch(Exception1 ex1) {
//handling ex1;
}
catch(Exception2 ex2) {
//handling ex2; Rethrow the exception
throw x and control is
transferred to the caller
}
finally {
//finalStatements;
}

//Next statement ..
Caution!
• Exception handling separates error-handling code
from normal programming tasks.
• Thus making programs easier to read and to
modify.
• Be aware, however, that exception handling
usually requires more time and resources because
it requires
• instantiating a new exception object,
• rolling back the call stack, and
• propagating the errors to the calling methods.
When?
• When to use exceptions:
1. An exception occurs in a method:
• If you want the exception to be processed by its
caller, you should create an exception object and
throw it.
• If you can handle the exception in the method
where it occurs, there is no need to throw it.
When?
• When should you use the try-catch block in the
code?
• You should use it to deal with unexpected error
conditions.
• Do not use it to deal with simple, expected
situations.
When?
• Example
When?
• Same example, better
Custom Exceptions

• Use the exception classes in the API whenever


possible.
• Define custom exception classes if the predefined
classes are not sufficient.
• Define custom exception classes by extending
Exception or a subclass of Exception.
Program
• Custom Exception

InvalidRadiusException

CircleWithRadiusException Run

TestCircleWithRadiusException

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy