Sie sind auf Seite 1von 47

CSC 308 2.

System Development with Java

Exception Handling
Budditha Hettige Department of Statistics and Computer Science
Budditha Hettige 1

Budditha Hettige

Errors
Errors can be categorized as several ways;
Syntax Errors Logical Errors Runtime Errors

Budditha Hettige

Syntax Errors
Error in the syntax of a sequence of characters or tokens that is intended to be written in a particular programming language All syntax errors can be reliably detected until run-time Many Syntax errors can be detected at compile-time

Budditha Hettige

Common Java syntax errors


Capitalization of key words
Line xx: class or interface declaration expected

Writing a string over a new line


Line xx: ';' expected

Missing brackets in a no-argument message


Line xx: Invalid expression statement

Forgetting to import a package


Line nn: Method yyyy not found in class xxxx.

Budditha Hettige

Syntax Error correction


1. Go to the error line 2. Identify the error 3. Correct the error
Error line

Error description

You must have a good working knowledge of error messages to discover the cause of the error
Budditha Hettige 6

Logical Errors
Errors that indicate the logic used when coding the program failed to solve the problem You do not get error messages with logic errors Your only clue to the existence of logic errors is the production of wrong solutions

Budditha Hettige

Common Logic Errors in Java


Using a variable before it is given a value
int x; x = x + 1; System.out.println("X = " + x);

Misplaced Semi-colon (usually with a loop or if statement)


if ( x > y) ; { System.out.println("X is bigger"); }

Confusing the equivalence operator == with the assignment operator =


Budditha Hettige 8

Logical error correction


Debugging can be used to find what the logical errors in your program
Debug line

Results

Budditha Hettige

Runtime Errors
low-level errors
dereference of a null pointer out-of-bounds array access divide by zero attempt to open a non-existent file for reading bad cast (e.g., casting an Object that is actually a Boolean to Integer)

higher-level
call to Stack's "pop" method for an empty stack call to "factorial" function with a negative number call to List's nextElement method when hasMoreElements is false
Budditha Hettige 10

Runtime Errors contd..


Errors can arise due to User error
providing a bad file name or a poorly formatted input file

Programmer error
These errors should be detected as early as possible to provide good feedback.
Budditha Hettige 11

Exceptions can occur at many levels


Hardware/operating system level.
Arithmetic exceptions; divide by 0, under/overflow. Memory access violations; segfault, stack over/underflow.

Language level.
Type conversion; illegal values, improper casts. Bounds violations; illegal array indices. Bad references; null pointers.

Program level.
User defined exceptions.
Budditha Hettige 12

Ways to handle errors


Write an error message and quit.
This doesn't provide any recovery

Return a special value to indicate that an error occurred


calling code check for an error. This can reduce the efficiency of the code

Use a reference parameter or a global variable to hold an error code Use exceptions. This seems to be the method of choice for modern programming languages.
Budditha Hettige 13

What Is an Exception?
An exception is an event that occurs during the execution of a program that disrupts the normal flow of instructions. Example
Divide by zero errors Accessing the elements of an array beyond its range Invalid input Hard disk crash Opening a non-existent file Heap memory exhausted
Budditha Hettige 14

Example
Divide by zero

class DivByZero { public static void main(String args[]) { System.out.println(3/0); System.out.println(Pls. print me.); } }
Where the error Error Message is occured Exception in thread "main" java.lang.ArithmeticException: / by zero at DivByZero.main(DivByZero.java:3)

Budditha Hettige

15

Default exception handler


1. 2. 3. 4. 5. Provided by Java runtime Prints out exception description Prints the stack trace Hierarchy of methods where the exception occurred Causes the program to terminate
Exception in thread "main" java.lang.ArithmeticException: / by zero at DivByZero.main(DivByZero.java:3

Budditha Hettige

16

What Happens When an Exception Occurs?

Budditha Hettige

17

When an Exception Occurs?


When an exception occurs within a method, the method creates an exception object and hands it off to the runtime system
Creating an exception object and handing it to the runtime system is called throwing an exception Exception object contains information about the error, including its type and the state of the program when the error occurred

Budditha Hettige

18

When an Exception Occurs? (1)


The runtime system searches the call stack for a method that contains an exception handler

Budditha Hettige

19

When an Exception Occurs? (2)


When an appropriate handler is found, the runtime system passes the exception to the handler
An exception handler is considered appropriate if the type of the exception object thrown matches the type that can be handled by the handler The exception handler chosen is said to catch the exception.

If the runtime system exhaustively searches all the methods on the call stack without finding an appropriate exception handler, the runtime system (and, consequently, the program) terminates and uses the default exception handler
Budditha Hettige 20

Searching the Call Stack for an Exception Handler

Budditha Hettige

21

How exception handler works?


Exception "thrown" here

Thrown exception matched against first set of exception handlers


Exception handler

If it fails to match, it is matched against next set of handlers, etc.


Exception handler

If exception matches none of handlers, program is abandoned

Budditha Hettige

22

Advantages
Separating Error-Handling code from regular business logic code Propagating errors up the call stack Grouping and differentiating error types

Budditha Hettige

23

Java Exception Handling


A method can duck any exceptions thrown within it, thereby allowing a method farther up the call stack to catch it. Hence, only the methods that care about errors have to worry about detecting errors Any checked exceptions that can be thrown within a method must be specified in its throws clause

Budditha Hettige

24

Grouping and Differentiating Error Types


Because all exceptions thrown within a program are objects, the grouping or categorizing of exceptions is a natural outcome of the class hierarchy An example of a group of related exception classes in the Java platform are those defined in java.io
IOException and its descendants IOException is the most general and represents any type of error that can occur when performing I/O Its descendants represent more specific errors. For example,
FileNotFoundException means that a file could not be located on disk.

Budditha Hettige

25

Catching Exceptions
try { <code to be monitored for exceptions> } catch (<ExceptionType1> <ObjName>) { <handler if ExceptionType1 occurs> } ... } catch (<ExceptionTypeN> <ObjName>) { <handler if ExceptionTypeN occurs> }

Budditha Hettige

26

Example

Budditha Hettige

27

Multiple catch

Budditha Hettige

28

How try and catch works?


NO Match

Try {

Catch {

Catch {

Statement after the last catch


Budditha Hettige

Leaves the method


29

Example
1. Execute This

2. Goto this catch()

3. Execute This
Budditha Hettige 30

No any catch for matching ???

Budditha Hettige

31

Catching Exceptions with finally


Syntax:
try { <code to be monitored for exceptions> } catch (<ExceptionType1> <ObjName>) { <handler if ExceptionType1 occurs> } ... } finally { <code to be executed before the try block ends> }
Budditha Hettige 32

Catching Exceptions the finally Keyword


Block of code is always executed despite of different scenarios:
Forced exit occurs using a return, a continue or a break statement Normal completion Caught exception thrown

Exception was thrown and caught in the method


Uncaught exception thrown

Exception thrown was not specified in any catch block in the method
Budditha Hettige 33

How try and catch finaly works?


Try { Catch { Catch { NO Match

Finally() { }

Statement after the last catch


Budditha Hettige 34

Sequence of Events for finally clause


Preceding step try block throw statement

matching catch

finally

Budditha Hettige

next step

35

Throwing Exceptions
Java allows you to throw exceptions (generate exceptions)
throw <exception object>;

An exception you throw is an object


You have to create an exception object in the same way you create any other object

Example:
throw new ArithmeticException(testing...);
Budditha Hettige 36

Rules in Exception Handling


A method is required to either catch or list all exceptions it might throw
Except for Error or RuntimeException, or their subclasses

If a method may cause an exception to occur but does not catch it, then it must say so using the throws keyword
Applies to checked exceptions only Syntax:
<type> <methodName> (<parameterList>) throws <exceptionList> { <methodBody> }
Budditha Hettige 37

Sequence of Events for No throw


Preceding step try block throw statement

unmatched catch matching catch unmatched catch next step

Budditha Hettige

38

Sequence of Events for throw


Preceding step try block throw statement

unmatched catch matching catch unmatched catch next step

Budditha Hettige

39

The exception hierarchy

Budditha Hettige

40

The Error and Exception Classes


Throwable class
Root class of exception classes Immediate subclasses
Error Exception

Exception class
Conditions that user programs can reasonably deal with Usually the result of some flaws in the user program code Examples
Division by zero error Array out-of-bounds error

Budditha Hettige

41

The Error and Exception Classes


Error class
Used by the Java run-time system to handle errors occurring in the run-time environment Generally beyond the control of user programs Examples
Out of memory errors Hard disk crash

Budditha Hettige

42

User define Exception

Budditha Hettige

43

Creating Your Own Exception Class


Steps to follow
Create a class that extends the RuntimeException or the Exception class Customize the class

Members and constructors may be added to the class


Example:
class HateStringExp extends RuntimeException { /* some code */ }
Budditha Hettige 44

Sample Code
class TestHateString { public static void main(String args[]) { String input = "invalid input"; try { if (input.equals("invalid input")) { throw new HateStringExp(); } System.out.println("Accept string."); } catch (HateStringExp e) { System.out.println("Hate string!); } class HateStringExp extends RuntimeException } { } /* some code */
}
Budditha Hettige 45

Example
public class CustomExceptionTest { public static void main(String[] args) throws Exception { int age = getAge(); if (age < 0) {

throw new NegativeAgeException(age);


} Else { System.out.println("Age entered is " + age); } } static int getAge() { return -10; } }
Budditha Hettige

46

Exception class
public class NegativeAgeException extends Exception { private int age; public NegativeAgeException(int newAge) { age = newAge; } public String toString() { return "Age cannot be negative" + " " +age ; } }
Budditha Hettige 47

Das könnte Ihnen auch gefallen