SlideShare a Scribd company logo
EXCEPTION
HANDLING
Exception
• An exception is an abnormal condition that
arises in a code sequence at run time.
• An exception is a run time error
• A Java exception is an object that
describes an exceptional (that is, error)
condition that has occurred in a piece of
code
• When an exceptional condition arises, an
object representing that exception is
created and thrown in the method that
caused the error
• That method maychoose to handle it self
or pass it on.
• At some point the exception is caught and
processed
• Exceptions can be generated by java run
time system or can be manually generated
by your code.
• JRE generates exceptions when you
violate the rules of java language or the
constraints of java execution environment.
• Manually generated exceptions are
typically used to report some error
condition to the caller of a method.
• Java exception handling is managed via five
keywords: try, catch, throw, throws, and
finally
• Program statements that you want to monitor for
exceptions are contained within a try block
• If an exception occurs within the try block, it is
thrown
• Your code can catch this exception (using
catch) and handle it
• System-generated exceptions are automatically
thrown by the Java run-time system
• To manually throw an exception, use the
keyword throw
• Any exception that is thrown out of a method
must be specified as such by a throws clause
• Any code that absolutely must be executed
before a method returns is put in a finally block
• This is the general form of an exception-handling block:
try {
// block of code to monitor for errors
}
catch (ExceptionType1 exOb) {
// exception handler for ExceptionType1
}
catch (ExceptionType2 exOb) {
// exception handler for ExceptionType2
}
// ...
finally {
// block of code to be executed before try block ends
}
Exception Types
• All exception types are subclasses of the built-in
class Throwable
• Immediately below Throwable are two
subclasses that partition exceptions into two
distinct branches
• One branch is headed by Exception
• This class is used for exceptional conditions that
user programs should catch
• There is an important subclass of
Exception, called RuntimeException
• Exceptions of this type are automatically
defined for the programs that you write
and include things such as division by
zero and invalid array indexing
• The other branch is topped by Error, which
defines exceptions that are not expected to be
caught under normal circumstances by your
program
• Exceptions of type Error are used by the Java
run-time system to indicate errors having to do
with the run-time environment, itself
• Stack overflow is an example of such an error
Uncaught Exceptions
• class Exc0 {
• public static void main(String args[]) {
• int d = 0;
• int a = 42 / d;
• }
• }
• Java.lang.ArithmeticException: /by zero at
Exc0.main(Exco.java:4)
• When JRE detects the attempt to /0 it
constrcucts a new exception object and throws
this exception
• This causes the execution of Exc0 to stop
because once an exception is generated it
should be caught some where.In this case we
have not supplied any handler so default handler
of JRE gets called.
• Default handler displays string describing the
exception and the stack trace from the point at
which exception has occurred and terminates
the program.
• class Exc1 {
• static void subroutine() {
• int d = 0;
• int a = 10 / d;
• }
• public static void main(String args[]) {
• Exc1.subroutine();
• }
• }
• Java.lang.ArithmeticException: /by zero
• at Exc1.subroutine(Exc1.java:4)
• at Exc1.main(Exc1.java:7)
Using try and catch
• Handling an exception manually provides
two benefits
• First, it allows you to fix the error
• Second, it prevents the program from
automatically terminating
class Exc2 {
public static void main(String args[]) {
int d, a;
try { // monitor a block of code.
d = 0;
a = 42 / d;
System.out.println("This will not be printed.");
} catch (ArithmeticException e) { // catch divide-by-zero
error
System.out.println("Division by zero.");
}
System.out.println("After catch statement.");
}
} o/p:
This program generates the following output:
Division by zero.
• A try and its catch statement form a unit
• The scope of the catch clause is restricted
to those statements specified by the
immediately preceding try statement
• A catch statement cannot catch an
exception thrown by another try statement
// Handle an exception and move on.
import java.util.Random;
class HandleError {
public static void main(String args[]) {
int a=0, b=0, c=0;
Random r = new Random();
for(int i=0; i<32000; i++) {
try {
b = r.nextInt();
c = r.nextInt();
a = 12345 / (b/c);
} catch (ArithmeticException e) {
System.out.println("Division by zero.");
a = 0; // set a to zero and continue
}
System.out.println("a: " + a);
}
}
}
Displaying a Description of an
Exception
catch (ArithmeticException e) {
System.out.println("Exception: " + e);
a = 0; // set a to zero and continue
}
Exception: java.lang.ArithmeticException: /
by zero
Multiple catch Clauses
// Demonstrate multiple catch statements.
class MultiCatch {
public static void main(String args[]) {
try {
int a = args.length;
System.out.println("a = " + a);
int b = 42 / a;
int c[] = { 1 };
c[42] = 99;
} catch(ArithmeticException e) {
System.out.println("Divide by 0: " + e);
} catch(ArrayIndexOutOfBoundsException e) {
System.out.println("Array index oob: " + e);
}
System.out.println("After try/catch blocks.");
}
}
• Java MultiCatch
• a=0
• Divide by 0:java.lang.ArithmeticException:/by zero
• After try/catch blocks
OR
• Java MultiCatch TestArg
• a=1
• Array index
oob:java.lang.ArrayIndexOutOfBoundsException:42
• After try/catch blocks
/* This program contains an error. A subclass must come
before its superclass in a series of catch statements. If
not, unreachable code will be created and a compile-
time error will result. */
class SuperSubCatch {
public static void main(String args[]) {
try {
int a = 0;
int b = 42 / a;
} catch(Exception e) {
System.out.println("Generic Exception catch.");
}
/* This catch is never reached because ArithmeticException
is a subclass of Exception. */
catch(ArithmeticException e) { // ERROR - unreachable
System.out.println("This is never reached.");
}
}
Nested try Statements
• Each time a try statement is entered, the
context of that exception is pushed on the
stack
• // An example nested try statements.
• class NestTry {
• public static void main(String args[]) {
• try {
• int a = args.length;
• /* If no command line args are present,
• the following statement will generate
• a divide-by-zero exception. */
• int b = 42 / a;
• System.out.println("a = " + a);
• try { // nested try block
• /* If one command line arg is used,
• then an divide-by-zero exception
• will be generated by the following code. */
• if(a==1) a = a/(a-a); // division by zero
• /* If two command line args are used
• then generate an out-of-bounds exception. */
• if(a==2) {
• int c[] = { 1 };
• c[42] = 99; // generate an out-of-bounds exception
• }
• } catch(ArrayIndexOutOfBoundsException e) {
• System.out.println("Array index out-of-bounds: " + e);
• }
• } catch(ArithmeticException e) {
• System.out.println("Divide by 0: " + e);
• }
• }
• }
• /* Try statements can be implicitly nested via
• calls to methods. */
• class MethNestTry {
• static void nesttry(int a) {
• try { // nested try block
• /* If one command line arg is used,
• then an divide-by-zero exception
• will be generated by the following code. */
• if(a==1) a = a/(a-a); // division by zero
• /* If two command line args are used
• then generate an out-of-bounds exception. */
• if(a==2) {
• int c[] = { 1 };
• c[42] = 99; // generate an out-of-bounds exception
• }
• } catch(ArrayIndexOutOfBoundsException e) {
• System.out.println("Array index out-of-bounds: " + e);
• }
• }
• public static void main(String args[]) {
• try {
• int a = args.length;
• /* If no command line args are present,
• the following statement will generate
• a divide-by-zero exception. */
• int b = 42 / a;
• System.out.println("a = " + a);
• nesttry(a);
• } catch(ArithmeticException e) {
• System.out.println("Divide by 0: " + e);
• }
• }
• }
throw
• It is possible for your program to throw an
exception explicitly, using the throw
statement
• The general form of throw is shown here:
throw ThrowableInstance;
• Here, ThrowableInstance must be an
object of type Throwable or a subclass of
Throwable
• There are two ways you can obtain a
Throwable object: using a parameter into
a catch clause, or creating one with the
new operator
• The flow of execution stops immediately
after the throw statement; any
subsequent statements are not executed
// Demonstrate throw.
class ThrowDemo {
static void demoproc() {
try {
throw new NullPointerException("demo");
} catch(NullPointerException e) {
System.out.println("Caught inside demoproc.");
throw e; // rethrow the exception
}
}
public static void main(String args[]) {
try {
demoproc();
} catch(NullPointerException e) {
System.out.println("Recaught: " + e);
} } }
Output:
Caught inside demoproc.
Recaught: java.lang.NullPointerException: demo
throws
• If a method is capable of causing an exception
that it does not handle, it must specify this
behavior so that callers of the method can guard
themselves against that exception
• A throws clause lists the types of exceptions
that a method might throw
• Exceptions that a method can throw must be
declared in the throws clause
• This is the general form of a method declaration
that includes a throws clause:
type method-name(parameter-list) throws
exception-list
{
// body of method
}
• Here, exception-list is a comma-separated list of
the exceptions that a method can throw
// This program contains an error and will
not compile.
class ThrowsDemo {
static void throwOne() {
System.out.println("Inside throwOne.");
throw new IllegalAccessException("demo");
}
public static void main(String args[ ]) {
throwOne();
}
}
class ThrowsDemo {
static void throwOne() throws IllegalAccessException {
System.out.println("Inside throwOne.");
throw new IllegalAccessException("demo");
}
public static void main(String args[]) {
try {
throwOne();
} catch (IllegalAccessException e) {
System.out.println("Caught " + e);
}
}
}
Here is the output generated by running this example
program:
inside throwOne
finally
• finally creates a block of code that will be
executed after a try/catch block has completed
and before the code following the try/catch
block
• The finally block will execute whether or not an
exception is thrown
• If an exception is thrown, the finally block will
execute even if no catch statement matches the
exception
• The finally clause is optional
• Each try statement requires at least one
catch or a finally clause
// Demonstrate finally.
class FinallyDemo {
// Through an exception out of the method.
static void procA() {
try {
System.out.println("inside procA");
throw new RuntimeException("demo");
} finally {
System.out.println("procA's finally");
}
}
// Return from within a try block.
static void procB() {
try {
System.out.println("inside procB");
return;
} finally {
System.out.println("procB's finally");
}
}
// Execute a try block normally.
static void procC() {
try {
System.out.println("inside procC");
} finally {
System.out.println("procC's finally");
}
}
public static void main(String args[]) {
try {
procA();
} catch (Exception e) {
System.out.println("Exception caught");
}
procB();
procC();
}
}
Here is the output generated by the
preceding program:
inside procA
procA’s finally
Exception caught
inside procB
procB’s finally
inside procC
procC’s finally
Java’s Built-in Exceptions
Exception
Exception
Creating our own Exception
subclasses
• // This program creates a custom exception type.
• class MyException extends Exception {
• private int detail;
• MyException(int a) {
• detail = a;
• }
• public String toString() {
• return "MyException[" + detail + "]";
• }
• }
• class ExceptionDemo {
• static void compute(int a) throws MyException {
• System.out.println("Called compute(" + a + ")");
Creating our own Exception
subclasses
• if(a > 10)
• throw new MyException(a);
• System.out.println("Normal exit");
• }
• public static void main(String args[]) {
• try {
• compute(1);
• compute(20);
• } catch (MyException e) {
• System.out.println("Caught " + e);
• }
• }
• }
• Called compute(1)
• Normal exit
• Called compute(20)
• Caught MyException[20]

More Related Content

PPT
Exception Handling
PPTX
Pi j4.2 software-reliability
PPTX
Java exception handling
PPTX
Nalinee java
PPTX
Exceptions in Java
PPT
Exception handling in java
PPT
Types of exceptions
PPTX
Java exception handling
Exception Handling
Pi j4.2 software-reliability
Java exception handling
Nalinee java
Exceptions in Java
Exception handling in java
Types of exceptions
Java exception handling

What's hot (13)

PDF
Built in exceptions
PPT
Exceptions
DOCX
What is an exception in java?
PPTX
Chap2 exception handling
PDF
Mocking in Java with Mockito
PDF
Java Pitfalls and Good-to-Knows
PDF
16 exception handling - i
PPTX
Java -Exception handlingunit-iv
PPTX
Mock your way with Mockito
PDF
Mockito a simple, intuitive mocking framework
PPT
Mockito with a hint of PowerMock
ODP
Using Mockito
PPT
Comp102 lec 10
Built in exceptions
Exceptions
What is an exception in java?
Chap2 exception handling
Mocking in Java with Mockito
Java Pitfalls and Good-to-Knows
16 exception handling - i
Java -Exception handlingunit-iv
Mock your way with Mockito
Mockito a simple, intuitive mocking framework
Mockito with a hint of PowerMock
Using Mockito
Comp102 lec 10
Ad

Similar to Exception (20)

PPTX
Unit-4 Java ppt for BCA Students Madras Univ
PPTX
L14 exception handling
PPT
Exception Handling Exception Handling Exception Handling
PPT
8.Exception handling latest(MB).ppt .
PPTX
Unit II Java & J2EE regarding Java application development
PPT
A36519192_21789_4_2018_Exception Handling.ppt
PPTX
Java-Unit 3- Chap2 exception handling
PDF
17 exception handling - ii
PPTX
Interface andexceptions
PPTX
Chapter v(error)
PPTX
OBJECT ORIENTED PROGRAMMING_Unit3_NOTES first half.pptx
PPTX
Exception handling in java.pptx
PPTX
Exception Handling In Java Presentation. 2024
PPTX
Java-Exception Handling Presentation. 2024
PPTX
Exception handling, Stream Classes, Multithread Programming
PPT
Exception Handling in java masters of computer application
PPTX
PPTX
Exception handling in java
DOCX
MODULE5_EXCEPTION HANDLING.docx
Unit-4 Java ppt for BCA Students Madras Univ
L14 exception handling
Exception Handling Exception Handling Exception Handling
8.Exception handling latest(MB).ppt .
Unit II Java & J2EE regarding Java application development
A36519192_21789_4_2018_Exception Handling.ppt
Java-Unit 3- Chap2 exception handling
17 exception handling - ii
Interface andexceptions
Chapter v(error)
OBJECT ORIENTED PROGRAMMING_Unit3_NOTES first half.pptx
Exception handling in java.pptx
Exception Handling In Java Presentation. 2024
Java-Exception Handling Presentation. 2024
Exception handling, Stream Classes, Multithread Programming
Exception Handling in java masters of computer application
Exception handling in java
MODULE5_EXCEPTION HANDLING.docx
Ad

More from Hoang Nguyen (20)

PPTX
Rest api to integrate with your site
PPTX
How to build a rest api
PPTX
Api crash
PPTX
Smm and caching
PPTX
Optimizing shared caches in chip multiprocessors
PPTX
How analysis services caching works
PPTX
Hardware managed cache
PPTX
Directory based cache coherence
PPTX
Cache recap
PPTX
Python your new best friend
PPTX
Python language data types
PPTX
Python basics
PPTX
Programming for engineers in python
PPTX
Learning python
PPTX
Extending burp with python
PPTX
Cobol, lisp, and python
PPT
Object oriented programming using c++
PPTX
Object oriented analysis
PPTX
Object model
PPTX
Data structures and algorithms
Rest api to integrate with your site
How to build a rest api
Api crash
Smm and caching
Optimizing shared caches in chip multiprocessors
How analysis services caching works
Hardware managed cache
Directory based cache coherence
Cache recap
Python your new best friend
Python language data types
Python basics
Programming for engineers in python
Learning python
Extending burp with python
Cobol, lisp, and python
Object oriented programming using c++
Object oriented analysis
Object model
Data structures and algorithms

Recently uploaded (20)

PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Mushroom cultivation and it's methods.pdf
PDF
Encapsulation theory and applications.pdf
PDF
Approach and Philosophy of On baking technology
PDF
Heart disease approach using modified random forest and particle swarm optimi...
PDF
A comparative study of natural language inference in Swahili using monolingua...
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPTX
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
PPTX
Group 1 Presentation -Planning and Decision Making .pptx
PDF
Accuracy of neural networks in brain wave diagnosis of schizophrenia
PPTX
SOPHOS-XG Firewall Administrator PPT.pptx
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
gpt5_lecture_notes_comprehensive_20250812015547.pdf
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Mushroom cultivation and it's methods.pdf
Encapsulation theory and applications.pdf
Approach and Philosophy of On baking technology
Heart disease approach using modified random forest and particle swarm optimi...
A comparative study of natural language inference in Swahili using monolingua...
Assigned Numbers - 2025 - Bluetooth® Document
Network Security Unit 5.pdf for BCA BBA.
Reach Out and Touch Someone: Haptics and Empathic Computing
Mobile App Security Testing_ A Comprehensive Guide.pdf
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
Group 1 Presentation -Planning and Decision Making .pptx
Accuracy of neural networks in brain wave diagnosis of schizophrenia
SOPHOS-XG Firewall Administrator PPT.pptx
Advanced methodologies resolving dimensionality complications for autism neur...
Build a system with the filesystem maintained by OSTree @ COSCUP 2025

Exception

  • 2. Exception • An exception is an abnormal condition that arises in a code sequence at run time. • An exception is a run time error
  • 3. • A Java exception is an object that describes an exceptional (that is, error) condition that has occurred in a piece of code • When an exceptional condition arises, an object representing that exception is created and thrown in the method that caused the error • That method maychoose to handle it self or pass it on. • At some point the exception is caught and processed
  • 4. • Exceptions can be generated by java run time system or can be manually generated by your code. • JRE generates exceptions when you violate the rules of java language or the constraints of java execution environment. • Manually generated exceptions are typically used to report some error condition to the caller of a method.
  • 5. • Java exception handling is managed via five keywords: try, catch, throw, throws, and finally • Program statements that you want to monitor for exceptions are contained within a try block • If an exception occurs within the try block, it is thrown • Your code can catch this exception (using catch) and handle it
  • 6. • System-generated exceptions are automatically thrown by the Java run-time system • To manually throw an exception, use the keyword throw • Any exception that is thrown out of a method must be specified as such by a throws clause • Any code that absolutely must be executed before a method returns is put in a finally block
  • 7. • This is the general form of an exception-handling block: try { // block of code to monitor for errors } catch (ExceptionType1 exOb) { // exception handler for ExceptionType1 } catch (ExceptionType2 exOb) { // exception handler for ExceptionType2 } // ... finally { // block of code to be executed before try block ends }
  • 8. Exception Types • All exception types are subclasses of the built-in class Throwable • Immediately below Throwable are two subclasses that partition exceptions into two distinct branches • One branch is headed by Exception • This class is used for exceptional conditions that user programs should catch
  • 9. • There is an important subclass of Exception, called RuntimeException • Exceptions of this type are automatically defined for the programs that you write and include things such as division by zero and invalid array indexing
  • 10. • The other branch is topped by Error, which defines exceptions that are not expected to be caught under normal circumstances by your program • Exceptions of type Error are used by the Java run-time system to indicate errors having to do with the run-time environment, itself • Stack overflow is an example of such an error
  • 11. Uncaught Exceptions • class Exc0 { • public static void main(String args[]) { • int d = 0; • int a = 42 / d; • } • } • Java.lang.ArithmeticException: /by zero at Exc0.main(Exco.java:4)
  • 12. • When JRE detects the attempt to /0 it constrcucts a new exception object and throws this exception • This causes the execution of Exc0 to stop because once an exception is generated it should be caught some where.In this case we have not supplied any handler so default handler of JRE gets called. • Default handler displays string describing the exception and the stack trace from the point at which exception has occurred and terminates the program.
  • 13. • class Exc1 { • static void subroutine() { • int d = 0; • int a = 10 / d; • } • public static void main(String args[]) { • Exc1.subroutine(); • } • }
  • 14. • Java.lang.ArithmeticException: /by zero • at Exc1.subroutine(Exc1.java:4) • at Exc1.main(Exc1.java:7)
  • 15. Using try and catch • Handling an exception manually provides two benefits • First, it allows you to fix the error • Second, it prevents the program from automatically terminating
  • 16. class Exc2 { public static void main(String args[]) { int d, a; try { // monitor a block of code. d = 0; a = 42 / d; System.out.println("This will not be printed."); } catch (ArithmeticException e) { // catch divide-by-zero error System.out.println("Division by zero."); } System.out.println("After catch statement."); } } o/p: This program generates the following output: Division by zero.
  • 17. • A try and its catch statement form a unit • The scope of the catch clause is restricted to those statements specified by the immediately preceding try statement • A catch statement cannot catch an exception thrown by another try statement
  • 18. // Handle an exception and move on. import java.util.Random; class HandleError { public static void main(String args[]) { int a=0, b=0, c=0; Random r = new Random(); for(int i=0; i<32000; i++) { try { b = r.nextInt(); c = r.nextInt(); a = 12345 / (b/c); } catch (ArithmeticException e) { System.out.println("Division by zero."); a = 0; // set a to zero and continue } System.out.println("a: " + a); } } }
  • 19. Displaying a Description of an Exception catch (ArithmeticException e) { System.out.println("Exception: " + e); a = 0; // set a to zero and continue } Exception: java.lang.ArithmeticException: / by zero
  • 20. Multiple catch Clauses // Demonstrate multiple catch statements. class MultiCatch { public static void main(String args[]) { try { int a = args.length; System.out.println("a = " + a); int b = 42 / a; int c[] = { 1 }; c[42] = 99; } catch(ArithmeticException e) { System.out.println("Divide by 0: " + e); } catch(ArrayIndexOutOfBoundsException e) { System.out.println("Array index oob: " + e); } System.out.println("After try/catch blocks."); } }
  • 21. • Java MultiCatch • a=0 • Divide by 0:java.lang.ArithmeticException:/by zero • After try/catch blocks OR • Java MultiCatch TestArg • a=1 • Array index oob:java.lang.ArrayIndexOutOfBoundsException:42 • After try/catch blocks
  • 22. /* This program contains an error. A subclass must come before its superclass in a series of catch statements. If not, unreachable code will be created and a compile- time error will result. */ class SuperSubCatch { public static void main(String args[]) { try { int a = 0; int b = 42 / a; } catch(Exception e) { System.out.println("Generic Exception catch."); } /* This catch is never reached because ArithmeticException is a subclass of Exception. */ catch(ArithmeticException e) { // ERROR - unreachable System.out.println("This is never reached."); } }
  • 23. Nested try Statements • Each time a try statement is entered, the context of that exception is pushed on the stack
  • 24. • // An example nested try statements. • class NestTry { • public static void main(String args[]) { • try { • int a = args.length; • /* If no command line args are present, • the following statement will generate • a divide-by-zero exception. */ • int b = 42 / a; • System.out.println("a = " + a); • try { // nested try block • /* If one command line arg is used, • then an divide-by-zero exception • will be generated by the following code. */
  • 25. • if(a==1) a = a/(a-a); // division by zero • /* If two command line args are used • then generate an out-of-bounds exception. */ • if(a==2) { • int c[] = { 1 }; • c[42] = 99; // generate an out-of-bounds exception • } • } catch(ArrayIndexOutOfBoundsException e) { • System.out.println("Array index out-of-bounds: " + e); • } • } catch(ArithmeticException e) { • System.out.println("Divide by 0: " + e); • } • } • }
  • 26. • /* Try statements can be implicitly nested via • calls to methods. */ • class MethNestTry { • static void nesttry(int a) { • try { // nested try block • /* If one command line arg is used, • then an divide-by-zero exception • will be generated by the following code. */ • if(a==1) a = a/(a-a); // division by zero • /* If two command line args are used • then generate an out-of-bounds exception. */ • if(a==2) { • int c[] = { 1 }; • c[42] = 99; // generate an out-of-bounds exception • } • } catch(ArrayIndexOutOfBoundsException e) {
  • 27. • System.out.println("Array index out-of-bounds: " + e); • } • } • public static void main(String args[]) { • try { • int a = args.length; • /* If no command line args are present, • the following statement will generate • a divide-by-zero exception. */ • int b = 42 / a; • System.out.println("a = " + a); • nesttry(a); • } catch(ArithmeticException e) { • System.out.println("Divide by 0: " + e); • } • } • }
  • 28. throw • It is possible for your program to throw an exception explicitly, using the throw statement • The general form of throw is shown here: throw ThrowableInstance;
  • 29. • Here, ThrowableInstance must be an object of type Throwable or a subclass of Throwable • There are two ways you can obtain a Throwable object: using a parameter into a catch clause, or creating one with the new operator • The flow of execution stops immediately after the throw statement; any subsequent statements are not executed
  • 30. // Demonstrate throw. class ThrowDemo { static void demoproc() { try { throw new NullPointerException("demo"); } catch(NullPointerException e) { System.out.println("Caught inside demoproc."); throw e; // rethrow the exception } } public static void main(String args[]) { try { demoproc(); } catch(NullPointerException e) { System.out.println("Recaught: " + e); } } } Output: Caught inside demoproc. Recaught: java.lang.NullPointerException: demo
  • 31. throws • If a method is capable of causing an exception that it does not handle, it must specify this behavior so that callers of the method can guard themselves against that exception • A throws clause lists the types of exceptions that a method might throw
  • 32. • Exceptions that a method can throw must be declared in the throws clause • This is the general form of a method declaration that includes a throws clause: type method-name(parameter-list) throws exception-list { // body of method } • Here, exception-list is a comma-separated list of the exceptions that a method can throw
  • 33. // This program contains an error and will not compile. class ThrowsDemo { static void throwOne() { System.out.println("Inside throwOne."); throw new IllegalAccessException("demo"); } public static void main(String args[ ]) { throwOne(); } }
  • 34. class ThrowsDemo { static void throwOne() throws IllegalAccessException { System.out.println("Inside throwOne."); throw new IllegalAccessException("demo"); } public static void main(String args[]) { try { throwOne(); } catch (IllegalAccessException e) { System.out.println("Caught " + e); } } } Here is the output generated by running this example program: inside throwOne
  • 35. finally • finally creates a block of code that will be executed after a try/catch block has completed and before the code following the try/catch block • The finally block will execute whether or not an exception is thrown • If an exception is thrown, the finally block will execute even if no catch statement matches the exception
  • 36. • The finally clause is optional • Each try statement requires at least one catch or a finally clause
  • 37. // Demonstrate finally. class FinallyDemo { // Through an exception out of the method. static void procA() { try { System.out.println("inside procA"); throw new RuntimeException("demo"); } finally { System.out.println("procA's finally"); } } // Return from within a try block. static void procB() { try { System.out.println("inside procB"); return; } finally { System.out.println("procB's finally"); } }
  • 38. // Execute a try block normally. static void procC() { try { System.out.println("inside procC"); } finally { System.out.println("procC's finally"); } } public static void main(String args[]) { try { procA(); } catch (Exception e) { System.out.println("Exception caught"); } procB(); procC(); } }
  • 39. Here is the output generated by the preceding program: inside procA procA’s finally Exception caught inside procB procB’s finally inside procC procC’s finally
  • 43. Creating our own Exception subclasses • // This program creates a custom exception type. • class MyException extends Exception { • private int detail; • MyException(int a) { • detail = a; • } • public String toString() { • return "MyException[" + detail + "]"; • } • } • class ExceptionDemo { • static void compute(int a) throws MyException { • System.out.println("Called compute(" + a + ")");
  • 44. Creating our own Exception subclasses • if(a > 10) • throw new MyException(a); • System.out.println("Normal exit"); • } • public static void main(String args[]) { • try { • compute(1); • compute(20); • } catch (MyException e) { • System.out.println("Caught " + e); • } • } • }
  • 45. • Called compute(1) • Normal exit • Called compute(20) • Caught MyException[20]