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

Viewers also liked (20)

PPTX
Network
PPTX
Nlp naive bayes
PPT
Reflection
PPTX
Exception handling
PPT
Prolog resume
PPTX
Data visualization
PPT
Google mock for dummies
PPTX
Test driven development
PPT
Xml and webdata
PPTX
Behaviour driven development
PPT
Html5
PPTX
Decision analysis
PDF
Text categorization as a graph
PPT
Text classificationmethods
PPT
Database introduction
PPT
Polymorphism
PPT
Sql database object
PPT
Basic dns-mod
PPTX
Cryptography
PPT
Gm theory
Network
Nlp naive bayes
Reflection
Exception handling
Prolog resume
Data visualization
Google mock for dummies
Test driven development
Xml and webdata
Behaviour driven development
Html5
Decision analysis
Text categorization as a graph
Text classificationmethods
Database introduction
Polymorphism
Sql database object
Basic dns-mod
Cryptography
Gm theory
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

More from Fraboni Ec (20)

PPT
Hardware multithreading
PPT
PDF
What is simultaneous multithreading
PPTX
Directory based cache coherence
PPTX
Business analytics and data mining
PPTX
Big picture of data mining
PPTX
Data mining and knowledge discovery
PPTX
Cache recap
PPTX
How analysis services caching works
PPTX
Hardware managed cache
PPTX
Data structures and algorithms
PPTX
Cobol, lisp, and python
PPT
Abstract data types
PPTX
Optimizing shared caches in chip multiprocessors
PPTX
Abstraction file
PPTX
Object model
PPTX
Object oriented analysis
PPT
Abstract class
PPTX
Concurrency with java
PPTX
Inheritance
Hardware multithreading
What is simultaneous multithreading
Directory based cache coherence
Business analytics and data mining
Big picture of data mining
Data mining and knowledge discovery
Cache recap
How analysis services caching works
Hardware managed cache
Data structures and algorithms
Cobol, lisp, and python
Abstract data types
Optimizing shared caches in chip multiprocessors
Abstraction file
Object model
Object oriented analysis
Abstract class
Concurrency with java
Inheritance

Recently uploaded (20)

PPTX
Programs and apps: productivity, graphics, security and other tools
PPT
Teaching material agriculture food technology
PDF
Spectral efficient network and resource selection model in 5G networks
DOCX
The AUB Centre for AI in Media Proposal.docx
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
Encapsulation theory and applications.pdf
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
KodekX | Application Modernization Development
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Empathic Computing: Creating Shared Understanding
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
Programs and apps: productivity, graphics, security and other tools
Teaching material agriculture food technology
Spectral efficient network and resource selection model in 5G networks
The AUB Centre for AI in Media Proposal.docx
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Encapsulation theory and applications.pdf
Chapter 3 Spatial Domain Image Processing.pdf
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Understanding_Digital_Forensics_Presentation.pptx
Advanced methodologies resolving dimensionality complications for autism neur...
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
KodekX | Application Modernization Development
NewMind AI Weekly Chronicles - August'25 Week I
Review of recent advances in non-invasive hemoglobin estimation
Per capita expenditure prediction using model stacking based on satellite ima...
Mobile App Security Testing_ A Comprehensive Guide.pdf
Empathic Computing: Creating Shared Understanding
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Diabetes mellitus diagnosis method based random forest with bat algorithm

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]