1 / 89 cop 3503 fall 2012 shayan javed lecture 11 programming fundamentals using java 1

Post on 15-Jan-2016

218 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1 / 89

COP 3503 FALL 2012SHAYAN JAVED

LECTURE 11

Programming Fundamentals using Java

1

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

LinkageError

Error

AWTError

AWTException

Throwable

ClassNotFoundException

VirtualMachineError

IOException

Exception

RuntimeException

Object

ArithmeticException

NullPointerException

IndexOutOfBoundsException

Several more classes

Several more classes

Several more classes

IllegalArgumentException

26 / 89

System Errors

LinkageError

Error

AWTError

AWTException

Throwable

ClassNotFoundException

VirtualMachineError

IOException

Exception

RuntimeException

Object

ArithmeticException

NullPointerException

IndexOutOfBoundsException

Several more classes

Several more classes

Several more classes

IllegalArgumentException

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)

LinkageError

Error

AWTError

AWTException

Throwable

ClassNotFoundException

VirtualMachineError

IOException

Exception

RuntimeException

Object

ArithmeticException

NullPointerException

IndexOutOfBoundsException

Several more classes

Several more classes

Several more classes

IllegalArgumentException

32 / 89

Checked Exceptions

LinkageError

Error

AWTError

AWTException

Throwable

ClassNotFoundException

VirtualMachineError

IOException

Exception

RuntimeException

Object

ArithmeticException

NullPointerException

IndexOutOfBoundsException

Several more classes

Several more classes

Several more classes

IllegalArgumentException

33 / 89

Checked Exceptions

LinkageError

Error

AWTError

AWTException

Throwable

ClassNotFoundException

VirtualMachineError

IOException

Exception

RuntimeException

Object

ArithmeticException

NullPointerException

IndexOutOfBoundsException

Several more classes

Several more classes

Several more classes

IllegalArgumentException

Need to explicitly deal with Checked Exceptions:

try and catch them, or throw them

34 / 89

Exception Handling

Keywords: try some code, catch any Exceptions

35 / 89

Exception Handling

Keywords: try some code, catch any Exceptions

or throw an Exception

36 / 89

Exception Handling

Keywords: try some code, catch any Exceptions

or 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) { .... }

}

(a)

void p1 () throws Exception {

riskyMethod();

}

(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 last statement of try block

After 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 Example:

try { System.out.println(refVar.toString());}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 Example:

Replace with:

try { System.out.println(refVar.toString());}catch (NullPointerException ex) { System.out.println("refVar is null");}

if (refVar != null) System.out.println(refVar.toString());else System.out.println("refVar is null");

top related