PPTX - UF CISE

Download Report

Transcript PPTX - UF CISE

1 / 89
1
COP 3503 FALL 2012
SHAYAN JAVED
LECTURE 11
Programming Fundamentals using Java
2 / 89
Exception Handling
3 / 89
Errors

Syntax Errors

Logic Errors

Runtime Errors
4 / 89
Syntax Errors

Arise because language rules weren’t followed.
5 / 89
Syntax Errors

Arise because language rules weren’t followed.

Detected by the compiler
 javac
for Java
 g++ for C++
6 / 89
Logic Errors

Program compiles and runs, but results are wrong.
7 / 89
Logic Errors


Program compiles and runs, but results are wrong.
Detected and fixed through testing.
8 / 89
Logic Errors



Program compiles and runs, but results are wrong.
Detected and fixed through testing.
Arise because logic coded by the programmer was
incorrect.
9 / 89
Logic Errors



Program compiles and runs, but results are wrong.
Detected and fixed through testing.
Arise because logic coded by the programmer was
incorrect.
 Example:
wrote c = a - b instead of c = a + b
10 / 89
Runtime Errors

Occur when program is running – environment
detects it and can’t carry it out
11 / 89
Runtime Errors


Occur when program is running – environment
detects it and can’t carry it out
Examples of Code Errors:
 Divide
by zero
12 / 89
Runtime Errors


Occur when program is running – environment
detects it and can’t carry it out
Examples of Code Errors:
 Divide
by zero
 Array out of bounds
13 / 89
Runtime Errors


Occur when program is running – environment
detects it and can’t carry it out
Examples of Code Errors:
 Divide
by zero
 Array out of bounds
 Accessing a null pointer (reference)
14 / 89
Runtime Errors


Occur when program is running – environment
detects it and can’t carry it out
Examples of Code Errors:
 Divide
by zero
 Array out of bounds
 Accessing a null pointer (reference)
 Integer overflow
15 / 89
Runtime Errors


Occur when program is running – environment
detects it and can’t carry it out
Examples of Code Errors:
 Divide
by zero
 Array out of bounds
 Accessing a null pointer (reference)
 Integer overflow

Programs crash when such exceptions are not
handled
16 / 89
Errors
int[] numbers = { 1.5, 5, 7 };
System.out.prntln(numbers[numbers.length]);
Try to point out all the errors in this code
17 / 89
Errors
int[] numbers = { 1.5, 5, 7 };
System.out.prntln(numbers[numbers.length]);
Syntax Error(s)
18 / 89
Errors
int[] numbers = { 1.5, 5, 7 };
System.out.prntln(numbers[numbers.length]);
Syntax Error(s)
19 / 89
Errors
int[] numbers = { 1.5, 5, 7 };
System.out.prntln(numbers[numbers.length]);
Syntax Error(s)
Runtime Error(s)
20 / 89
Exception
An exception is an event, which occurs during the
execution of a program, that disrupts the normal
flow of the program’s instructions.
21 / 89
Exception Handling in Java

Mechanism for handling exceptions by detecting
and responding to them in a systematic, uniform
and reliable manner.
22 / 89
Exception Handling in Java

Mechanism for handling exceptions by detecting
and responding to them in a systematic, uniform
and reliable manner.

Any exceptions not handled within the Java
program are “caught” by the Java Runtime
Environment (JRE)
23 / 89
Exception

A method in Java throws Exceptions
 “Something
went wrong”
24 / 89
Exception

A method in Java throws Exceptions
 “Something

went wrong”
Exceptions are Objects
 Every
Exception is a subclass of the Exception class
25 / 89
Unchecked Exceptions/Errors
ClassNotFoundException
IOException
ArithmeticException
Exception
AWTException
NullPointerException
RuntimeException
IndexOutOfBoundsException
Object
Throwable
Several more classes
IllegalArgumentException
LinkageError
VirtualMachineError
Error
AWTError
Several more classes
Several more classes
26 / 89
System Errors
ClassNotFoundException
IOException
ArithmeticException
Exception
AWTException
NullPointerException
RuntimeException
IndexOutOfBoundsException
Object
Throwable
Several more classes
IllegalArgumentException
LinkageError
VirtualMachineError
Error
AWTError
Several more classes
Several more classes
27 / 89
System Errors

Thrown by the Java Virtual Machine (JVM)
28 / 89
System Errors

Thrown by the Java Virtual Machine (JVM)

Represented by the Error class
29 / 89
System Errors

Thrown by the Java Virtual Machine (JVM)

Represented by the Error class

Describes internal system errors
30 / 89
System Errors

Thrown by the Java Virtual Machine (JVM)

Represented by the Error class

Describes internal system errors

Rarely occur – if they do you can’t do much other
than terminating
31 / 89
Runtime Exceptions (Unchecked)
ClassNotFoundException
IOException
ArithmeticException
Exception
AWTException
NullPointerException
RuntimeException
IndexOutOfBoundsException
Object
Throwable
Several more classes
IllegalArgumentException
LinkageError
VirtualMachineError
Error
AWTError
Several more classes
Several more classes
32 / 89
Checked Exceptions
ClassNotFoundException
IOException
ArithmeticException
Exception
AWTException
NullPointerException
RuntimeException
IndexOutOfBoundsException
Object
Throwable
Several more classes
IllegalArgumentException
LinkageError
VirtualMachineError
Error
AWTError
Several more classes
Several more classes
33 / 89
Checked Exceptions
ClassNotFoundException
IOException
ArithmeticException
Exception
AWTException
NullPointerException
RuntimeException
IndexOutOfBoundsException
Object
Throwable
Several more classes
IllegalArgumentException
Need to explicitly deal
with
Checked Exceptions:
try and catch them, or
throw them
LinkageError
VirtualMachineError
Error
AWTError
Several more classes
Several more classes
34 / 89
Exception Handling

Keywords:
 try
some code, catch any Exceptions
35 / 89
Exception Handling

Keywords:
 try
 or
some code, catch any Exceptions
throw an Exception
36 / 89
Exception Handling

Keywords:
 try
 or
some code, catch any Exceptions
throw an Exception
 finally
execute some code
37 / 89
Exception Handling

Java forces you to deal with checked Exceptions
38 / 89
Exception Handling


Java forces you to deal with checked Exceptions
Two ways to deal with them:
void p1 () {
try {
riskyMethod();
}
catch (Exception ex) {
....
}
}
(a)
39 / 89
Exception Handling


Java forces you to deal with checked Exceptions
Two ways to deal with them:
void p1 () {
try {
riskyMethod();
}
catch (Exception ex) {
....
}
void p1 () throws Exception {
riskyMethod();
}
}
(a)
(b)
40 / 89
Exception Handling

Remember the clone() method?
41 / 89
Exception Handling


Remember the clone() method?
Can be written in two ways:
Object clone() {
try {
return super.clone();
}
catch
(CloneNotSupportedException
ex) {
....
}
}
(a)
42 / 89
Exception Handling


Remember the clone() method?
Can be written in two ways:
Object clone() {
try {
return super.clone();
}
catch
(CloneNotSupportedException
ex) {
....
}
}
(a)
Object clone() throws
CloneNotSupportedException {
return super.clone();
}
(b)
43 / 89
Exception Handling

In the first case, we are catching and handling the
Exception
44 / 89
Exception Handling

In the first case, we are catching and handling the
Exception

In the second case we are throwing it – needs to
be caught and handled by the calling method
45 / 89
Catching Exceptions

A try-catch statement:
try {
// Statement(s) which throw Exceptions
} catch (Exception1 exception1) {
// Handles Exceptions of type Exception1
} catch (Exception2 exception2) {
// Handles Exceptions of type Exception2
} catch (Exception exception) {
// Handles Exceptions of type Exception
// ALL Exceptions
}
// Any code after the try-catch block
46 / 89
Catching Exceptions

A try-catch statement:
try {
// Statement(s) which throw Exceptions
} catch (CloneNotSupportedException exception1) {
// Handles Exceptions of type CloneNotSupportedException
} catch (NullPointerException exception2) {
// Handles Exceptions of type NullPointerException
} catch (Exception exception) {
// Handles Exceptions of type Exception
// ALL Exceptions
}
// Any code after the try-catch block
47 / 89
Catching Exceptions

A try-catch statement:
try {
Circle clone = circle1.clone();
} catch (CloneNotSupportedException exception1) {
// Handles Exceptions of type CloneNotSupportedException
} catch (NullPointerException exception2) {
// Handles Exceptions of type NullPointerException
} catch (Exception exception) {
// Handles Exceptions of type Exception
// ALL Exceptions
}
// Any code after the try-catch block
48 / 89
Catching Exceptions

Thrown Exceptions have to be eventually caught
somewhere in your code
49 / 89
Exception Information

So an Exception has been caught – what can we do
with it?
try {
// Statements which throw Exceptions
} catch (Exception exception) {
// ALL Exceptions
}
50 / 89
Exception Information

Some useful methods in the Throwable class:
51 / 89
Exception Information

Some useful methods in the Throwable class:

String toString():
 Returns a short description of the Exception
52 / 89
Exception Information

Some useful methods in the Throwable class:

String toString():
 Returns a short description of the Exception

String getMessage():
 Returns a detailed description of the Exception
53 / 89
Exception Information

Some useful methods in the Throwable class:

String toString():
 Returns a short description of the Exception

String getMessage():
 Returns a detailed description of the Exception

void printStackTrace():
 Prints the stacktrace information on the console
54 / 89
Exception Information

Some useful methods in the Throwable class:

void printStackTrace():
 Prints the stacktrace information on the console
Sample output:
java.lang.NullPointerException at
MyClass.method2(MyClass.java:9) at
MyClass.method1(MyClass.java:6) at
MyClass.main(MyClass.java:3)
55 / 89
Exception Information

Example:
java.io.PrintWriter output = null;
try {
output = new java.io.PrintWriter(“text.txt”);
output.println(“Welcome to Java”);
output.close();
}
catch (java.io.IOException ex){
System.out.println(ex.toString());
ex.printStackTrace() ;
}
56 / 89
Problems

Example:
java.io.PrintWriter output = null;
try {
output = new java.io.PrintWriter(“text.txt”);
output.println(“Welcome to Java”);
output.close();
}
catch (java.io.IOException ex){
System.out.println(ex.toString());
ex.printStackTrace() ;
}
Must execute output.close() even if Exception occurs
57 / 89
Solution

Use the finally clause – for code that must be
executed “no matter what”
58 / 89
Solution

Use the finally clause – for code that must be
executed “no matter what”
try {
// Statement(s) which throw Exceptions
} catch (Exception1 exception1) {
// Handles Exceptions of type Exception1
} catch (Exception exception) {
// Handles Exceptions of type Exception
} finally {
// code executed whether there is an Exception or not
}
59 / 89
Solution

Example:
java.io.PrintWriter output = null;
try {
output = new java.io.PrintWriter(“text.txt”);
output.println(“Welcome to Java”);
}
catch (java.io.IOException ex){
ex.printStackTrace() ;
} finally {
if (output != null)
output.close();
}
60 / 89
The finally block

Executed when try block is exited in these ways:
61 / 89
The finally block

Executed when try block is exited in these ways:
 After
last statement of try block
62 / 89
The finally block

Executed when try block is exited in these ways:
 After
 After
last statement of try block
last statement of the catch block (if an Exception
was caught)
63 / 89
The finally block

Executed when try block is exited in these ways:
 After
last statement of try block
 After
last statement of the catch block (if an Exception
was caught)
 When
an Exception is thrown in try but NOT caught
64 / 89
The finally block

Executed when try block is exited in these ways:
 After
last statement of try block
 After
last statement of the catch block (if an Exception
was caught)
 When
an Exception is thrown in try but NOT caught
Executed even if there is a return statement prior to
reaching the finally block
65 / 89
Throwing Exceptions

If written code could encounter a runtime error:
66 / 89
Throwing Exceptions

If written code could encounter a runtime error:

It creates an Exception object and throws it
67 / 89
Throwing Exceptions

If written code could encounter a runtime error:

It creates an Exception object and throws it

and must also declare it in the method description
68 / 89
Throwing Exceptions

If written code could encounter a runtime error:

It creates an Exception object and throws it

and must also declare it in the method description
 Only
if the Exception is a checked Exception
 Optional for unchecked
69 / 89
Throwing Exceptions

Example:
public void setRadius(double newRadius)
{
if (newRadius >= 0)
radius =
newRadius;
else
throw new IllegalArgumentException(
"Radius cannot be negative");
}
70 / 89
Throwing Exceptions

Example:
OPTIONAL
public void setRadius(double newRadius) throws
IllegalArgumentException
{
if (newRadius >= 0)
radius =
newRadius;
else
throw new IllegalArgumentException(
"Radius cannot be negative");
}
71 / 89
Throwing Exceptions
try {
Circle c1 = new Circle(5);
c1.setRadius(-5);
}
catch (IllegalArgumentException ex) {
System.out.println(ex);
}
72 / 89
Throwing Exceptions
try {
Circle c1 = new Circle(5);
c1.setRadius(-5);
}
catch (IllegalArgumentException ex) {
System.out.println(ex);
}
Output:
Radius cannot be negative
73 / 89
Creating Custom Exceptions

Create custom Exception classes if predefined
classes not sufficient
74 / 89
Creating Custom Exceptions

Create custom Exception classes if predefined
classes not sufficient

To create a custom class:
 class
should extend Exception
75 / 89
Creating Custom Exceptions

Create custom Exception classes if predefined
classes not sufficient

To create a custom class:
 class
should extend Exception
 Good practice to add:
A
default (empty) constructor
 A constructor with one String parameter
76 / 89
Creating Custom Exceptions
public class InvalidRadiusException extends Exception {
private double radius;
public InvalidRadiusException() {
super(“Invalid radius!”);
}
public InvalidRadiusException(double radius) {
super("Invalid radius!”);
this.radius = radius;
}
public double getRadius() {
return radius;
}
}
77 / 89
Creating Custom Exceptions

Example:
public void setRadius(double newRadius) throws
IllegalArgumentException
{
if (newRadius >= 0)
radius =
newRadius;
else
throw new IllegalArgumentException(
"Radius cannot be negative");
}
78 / 89
Creating Custom Exceptions

Example:
public void setRadius(double newRadius) throws
InvalidRadiusException
{
if (newRadius >= 0)
radius =
newRadius;
else
throw new InvalidRadiusException(radius);
}
79 / 89
Creating Custom Exceptions
try {
Circle c1 = new Circle(5);
c1.setRadius(-5);
}
catch (IllegalArgumentException ex) {
System.out.println(ex);
}
80 / 89
Creating Custom Exceptions
try {
Circle c1 = new Circle(5);
c1.setRadius(-5);
}
catch (InvalidRadiusException ex) {
System.out.println(“Invalid Radius: “ +
ex.getRadius());
}
81 / 89
Creating Custom Exceptions
try {
Circle c1 = new Circle(5);
c1.setRadius(-5);
}
catch (InvalidRadiusException ex) {
System.out.println(“Invalid Radius: “ +
ex.getRadius());
}
Output:
Invalid Radius: -5.0
82 / 89
When to create Custom Exceptions

Use the exception classes in the API whenever possible.
83 / 89
When to create Custom Exceptions

Use the exception classes in the API whenever possible.

Write your own custom exception class if you answer yes to
one of the following:
84 / 89
When to create Custom Exceptions

Use the exception classes in the API whenever possible.

Write your own custom exception class if you answer yes to
one of the following:

Do you need an exception type that isn’t represented by Java?
85 / 89
When to create Custom Exceptions

Use the exception classes in the API whenever possible.

Write your own custom exception class if you answer yes to
one of the following:

Do you need an exception type that isn’t represented by Java?

Would it help users if they can differentiate your exceptions from
those thrown by classes from other vendors?
86 / 89
When to create Custom Exceptions

Use the exception classes in the API whenever possible.

Write your own custom exception class if you answer yes to
one of the following:

Do you need an exception type that isn’t represented by Java?

Would it help users if they can differentiate your exceptions from
those thrown by classes from other vendors?

Do you want to pass more than just a string to the exception handler?
87 / 89
When to use Exceptions

Use if the event is exception and truly an error
88 / 89
When to use Exceptions



Use if the event is exception and truly an error
Do not use it to deal with simple, expected
situations
try {
System.out.println(refVar.toString());
Example:
}
catch (NullPointerException ex) {
System.out.println("refVar is null");
}
89 / 89
When to use Exceptions



Use if the event is exception and truly an error
Do not use it to deal with simple, expected
situations
try {
System.out.println(refVar.toString());
Example:
}
catch (NullPointerException ex) {
System.out.println("refVar is null");
}

Replace with:
if (refVar != null)
System.out.println(refVar.toString());
else
System.out.println("refVar is null");