Exceptions exception handling
This presentation is the property of its rightful owner.
Sponsored Links
1 / 42

Exceptions & exception handling PowerPoint PPT Presentation


  • 72 Views
  • Uploaded on
  • Presentation posted in: General

Exceptions & exception handling. Exceptions & exception handling. Use sparingly. Things you can do with exceptions: Define a new exception class. Create an exception instance. Throw an exception. Declare that an exception may be thrown (in a particular function).

Download Presentation

Exceptions & exception handling

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Exceptions exception handling

Exceptions &exception handling


Exceptions exception handling1

Exceptions & exception handling

  • Use sparingly.

  • Things you can do with exceptions:

    • Define a new exception class.

    • Create an exception instance.

    • Throw an exception.

    • Declare that an exception may be thrown (in a particular function).

    • Handle the possibility that an exception may be thrown.


1 define a new exception class

1. Define a new exception class

  • extend Exception (or extend a subclass of Exception)

    • See http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Exception.html.

  • This creates a new type.

  • All have a ctor w/ a single String arg.

  • Each has an accessor method called getMessage() that returns the String from the ctor arg.


Define a new exception class example

Define a new exception class example

//typical sample code

public class DivisionByZeroException extends Exception {

public DivisionByZeroException ( ) {

super( “Division by zero!” );

}

public DivisionByZeroException ( String message ) {

super( message );

}

}


Define a new exception class example w more information

public class BadNumberException extends Exception {

private int mBadNumber;

public BadNumberException ( ) {

super( “BadNumberException” );

}

public BadNumberException ( String message ) {

super( message );

}

public BadNumberException ( int number ) {

super( “BadNumberException” );

mBadNumber = number;

}

public int getBadNumber ( ) {

return mBadNumber;

}

}

Define a new exception class example (w/ more information)


2 create an exception instance

2. Create an exception instance

Ex.

new Exception( “Uh oh!” );

Exception e = new Exception( “Rats!” );


3 throw an exception

3. Throw an exception

Ex.

throw new Exception( “Invalid value.” );

Exception e = new Exception( “Invalid age.” );

throw e;


4 declare a method that indicates that an exception may be thrown

4. Declare (a method that indicates) that an exception may be thrown

Ex.

public int f ( int x ) throws Exception {

}


5 handle the possibility that an exception may be thrown

5. Handle the possibility that an exception may be thrown

  • The try-catch blocks:

    try {

    } catch (Exception e) {

    }


Exercises

Exercises

1. What is the output produced by the following code?

int waitTime = 46;

try {

System.out.println( “Try block entered.” );

if (waitTime>30)

throw new Exception( “Over 30.” );

else if (waitTime<30)

throw new Exception( “Under 30.” );

else

System.out.println( “No exception.” );

System.out.println( “Leaving try block.” );

} catch (Exception thrownObject) {

System.out.println( thrownObject.getMessage() );

}

System.out.println( “After catch block.” );


Exercises1

Exercises

2. What is the output produced by the following code?

int waitTime = 12;

try {

System.out.println( “Try block entered.” );

if (waitTime>30)

throw new Exception( “Over 30.” );

else if (waitTime<30)

throw new Exception( “Under 30.” );

else

System.out.println( “No exception.” );

System.out.println( “Leaving try block.” );

} catch (Exception thrownObject) {

System.out.println( thrownObject.getMessage() );

}

System.out.println( “After catch block.” );


Exercises2

Exercises

3. What are the throw statements (below)?

int waitTime = 12;

try {

System.out.println( “Try block entered.” );

if (waitTime>30)

throw new Exception( “Over 30.” );

else if (waitTime<30)

throw new Exception( “Under 30.” );

else

System.out.println( “No exception.” );

System.out.println( “Leaving try block.” );

} catch (Exception thrownObject) {

System.out.println( thrownObject.getMessage() );

}

System.out.println( “After catch block.” );


Exercises3

Exercises

4. What happens when a throw statement is executed? This is a general question. Tell what happens in general, not simply what happens in the code below or some other sample code.

int waitTime = 12;

try {

System.out.println( “Try block entered.” );

if (waitTime>30)

throw new Exception( “Over 30.” );

else if (waitTime<30)

throw new Exception( “Under 30.” );

else

System.out.println( “No exception.” );

System.out.println( “Leaving try block.” );

} catch (Exception thrownObject) {

System.out.println( thrownObject.getMessage() );

}

System.out.println( “After catch block.” );


Exercises4

Exercises

5. What is the try block (below)?

int waitTime = 12;

try {

System.out.println( “Try block entered.” );

if (waitTime>30)

throw new Exception( “Over 30.” );

else if (waitTime<30)

throw new Exception( “Under 30.” );

else

System.out.println( “No exception.” );

System.out.println( “Leaving try block.” );

} catch (Exception thrownObject) {

System.out.println( thrownObject.getMessage() );

}

System.out.println( “After catch block.” );


Exercises5

Exercises

6. What is the catch block (below)?

int waitTime = 12;

try {

System.out.println( “Try block entered.” );

if (waitTime>30)

throw new Exception( “Over 30.” );

else if (waitTime<30)

throw new Exception( “Under 30.” );

else

System.out.println( “No exception.” );

System.out.println( “Leaving try block.” );

} catch (Exception thrownObject) {

System.out.println( thrownObject.getMessage() );

}

System.out.println( “After catch block.” );


Exercises6

Exercises

7. What is the catch block parameter (below)?

int waitTime = 12;

try {

System.out.println( “Try block entered.” );

if (waitTime>30)

throw new Exception( “Over 30.” );

else if (waitTime<30)

throw new Exception( “Under 30.” );

else

System.out.println( “No exception.” );

System.out.println( “Leaving try block.” );

} catch (Exception thrownObject) {

System.out.println( thrownObject.getMessage() );

}

System.out.println( “After catch block.” );


Exercises7

Exercises

  • 8. Is the following legal?

    Exception exceptionObject = new Exception( “Oops!” );


Exercises8

Exercises

  • 9. Is the following legal?

    Exception exceptionObject = new Exception( “Oops!” );

    throw exceptionObject;


Try catch blocks examples

Try-catch blocks examples

  • Recall the Integer class (see http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Integer.html).

    • What method do we use to convert a String into an int?

    • What happens if the String does not contain an int?

    • Try it.

  • What happens when we walk off of the end of an array?

    • Can you avoid this behavior?


Useful exception subclasses

Useful exception subclasses

  • ArrayIndexOutOfBoundsException

  • NumberFormatException

  • IOException

  • NoSuchMethodException

  • FileNotFoundException


Exercises9

Exercises

10. Define an exception class called PowerFailureException.

  • The class should have a ctor w/ no parameters. If an exception is thrown with this zero-argument ctor, getMessage should return “Power Failure!”

  • The class should also have a ctor w/ a single parameter of type String. If an exception is thrown w/ this ctor, then getMessage returns the value that was used as an argument to the ctor.


Exercises10

Exercises

11. Define an exception class called TooMuchStuffException.

  • The class should have a ctor w/ no parameters. If an exception is thrown with this zero-argument ctor, getMessage should return “Too much stuff!”

  • The class should also have a ctor w/ a single parameter of type String. If an exception is thrown w/ this ctor, then getMessage returns the value that was used as an argument to the ctor.


Exercises11

Exercises

12. Suppose the exception class ExerciseException is defined as follows:

public class ExerciseException extends Exception {

public ExerciseException ( ) {

super("Exercise Exception thrown!");

System.out.println("Exception thrown.");

}

public ExerciseException ( String message ) {

super(message);

System.out.println( "ExerciseException invoked with an argument.");

}

}

What output would be produced by the following code (which is just an exercise and not likely to occur in a program)?

ExerciseException e = new ExerciseException( “Do be do” );

System.out.println( e.getMessage() );


Exercises12

Exercises

14. Suppose the exception class MyException is defined as follows:

public class MyException extends Exception {

public MyException ( ) {

super("My Exception thrown!");

}

public MyException ( String message ) {

super("MyException: " + message);

}

}

What output would be produced by the following code?

int number;

try {

System.out.println( “try block entered” );

number = 42;

if (number>0)

throw new MyException( “Hi Mom!” );

System.out.println( “leaving try block” );

} catch (MyException exceptionObject) {

System.out.println( exceptionObject.getMessage() );

}

System.out.println( “end of example.” );


Exercises13

Exercises

15. Suppose the exception class MyException is defined as follows:

public class MyException extends Exception {

public MyException ( ) {

super("My Exception thrown!");

}

public MyException ( String message ) {

super("MyException: " + message);

}

}

What output would be produced by the following code?

int number;

try {

System.out.println( “try block entered” );

number = 42;

if (number>0)

throw new MyException( “Hi Mom!” );

System.out.println( “leaving try block” );

} catch (Exception exceptionObject) { //was MyException

System.out.println( exceptionObject.getMessage() );

}

System.out.println( “end of example.” );


Exercises14

Exercises

16. Suppose the exception class MyException is defined as follows:

public class MyException extends Exception {

public MyException ( ) {

super("My Exception thrown!");

}

public MyException ( String message ) {

super("MyException: " + message);

}

}

What output would be produced by the following code?

int number;

try {

System.out.println( “try block entered” );

number = -58; //was 42

if (number>0)

throw new MyException( “Hi Mom!” );

System.out.println( “leaving try block” );

} catch (MyException exceptionObject) {

System.out.println( exceptionObject.getMessage() );

}

System.out.println( “end of example.” );


Multiple catch blocks

Multiple catch blocks

  • More general form of try-catch blocks:

    try {

    } catch (NegativeNumberException e) {

    } catch (DivisionByZeroException e) {

    }

    The order of catch blocks is important as they are evaluated in sequence. So put most specific first.


Exercises15

19. What output will be produced by the following code?

public class NegativeNumberException

extends Exception

{

public NegativeNumberException ( )

{

super( "Negative Number Exception!“ );

}

public NegativeNumberException ( String message )

{

super( message );

}

}

int n;

try {

n = 42;

if (n > 0)

throw new Exception();

else if (n < 0)

throw new NegativeNumberException();

else

System.out.println( “bingo!” );

} catch (NegativeNumberException e) {

System.out.println( “first catch” );

} catch (Exception e) {

System.out.println( “second catch” );

}

System.out.println( “end of exercise” );

Exercises


Exercises16

20. What output will be produced by the following code?

public class NegativeNumberException

extends Exception

{

public NegativeNumberException ( )

{

super( "Negative Number Exception!“ );

}

public NegativeNumberException ( String message )

{

super( message );

}

}

int n;

try {

n = -42; //was 42

if (n > 0)

throw new Exception();

else if (n < 0)

throw new NegativeNumberException();

else

System.out.println( “bingo!” );

} catch (NegativeNumberException e) {

System.out.println( “first catch” );

} catch (Exception e) {

System.out.println( “second catch” );

}

System.out.println( “end of exercise” );

Exercises


Exercises17

21. What output will be produced by the following code?

public class NegativeNumberException

extends Exception

{

public NegativeNumberException ( )

{

super( "Negative Number Exception!“ );

}

public NegativeNumberException ( String message )

{

super( message );

}

}

int n;

try {

n = 0; //was 42

if (n > 0)

throw new Exception();

else if (n < 0)

throw new NegativeNumberException();

else

System.out.println( “bingo!” );

} catch (NegativeNumberException e) {

System.out.println( “first catch” );

} catch (Exception e) {

System.out.println( “second catch” );

}

System.out.println( “end of exercise” );

Exercises


Exercises18

What output will be produced by the following code?

public class NegativeNumberException

extends Exception

{

public NegativeNumberException ( )

{

super( "Negative Number Exception!“ );

}

public NegativeNumberException ( String message )

{

super( message );

}

}

int n;

try {

n = -42; //was 42

if (n > 0)

throw new Exception();

else if (n < 0)

throw new NegativeNumberException();

else

System.out.println( “bingo!” );

} catch (Exception e) {

System.out.println( “first catch” );

} catch (NegativeNumberException e) {

System.out.println( “second catch” );

}

System.out.println( “end of exercise” );

Exercises


Throwing exceptions in methods

Methods can

throw exceptions, and/or

call methods that throw exceptions.

Catch or declare rule: Such a method must then

contain a try-catch block (already discussed), and/or

the function heading must specify that the method may throw an exception.

The catch or declare rule is not always enforced.

Checked exceptions (descendents of Exception)

Unchecked exceptions (descendents of RuntimeException)

Throwing exceptions in methods


Declare a method that indicates that an exception may be thrown

Declare (a method that indicates) that an exception may be thrown

  • Ex.

    public int f ( int x ) throws Exception {

    }

    public boolean g ( )

    throws DivideByZeroException, SomeOtherException

    {

    }


Useful methods that may throw exceptions

Useful methods that may throw exceptions

  • What method can be used to convert strings to integers?

  • Open a file for reading (see http://java.sun.com/j2se/1.5.0/docs/api/java/io/FileInputStream.html)

  • The Scanner class (see http://java.sun.com/j2se/1.5.0/docs/api/java/util/Scanner.html#nextInt())


Finally clause

finally clause

Most general form of try-catch-finally blocks:

try {

} catch (ExceptionClass1 e) {

} catch (ExceptionClass2 e) {

} catch (ExceptionClassn e) {

} finally {

//code executed whether or not an exception was thrown

}


Finally clause1

finally clause

Three cases:

  • no exception occurs in the try block

  • an exception occurs in the try block and is caught

  • an exception occurs in the try block but doesn’t match any catch


Exercises19

Exercises

29. What is the output of the following program? What would be the output if the argument to exerciseMethod was -42 instead of 42. How about 0?

public class FinallyDemo {

public static void main ( String[] args ) {

try {

exerciseMethod( 42 );

} catch(Exception e) {

System.out.println( "Caught in main.“ );

}

}

public static void exerciseMethod ( int n ) throws Exception {

try {

if (n > 0)

throw new Exception( );

else if (n < 0)

throw new NegativeNumberException( );

else

System.out.println( "No Exception." );

System.out.println( "Still in sampleMethod." );

} catch (NegativeNumberException e) {

System.out.println( "Caught in sampleMethod." );

} finally {

System.out.println( "In finally block." );

}

System.out.println( "After finally block." );

}

}


Exercises20

Exercises

22. What is the output produced by the following program?

public class Exercise {

public static void main ( String[] args ) {

try {

System.out.println( "Trying" );

sampleMethod( 98.6 );

System.out.println( "Trying after call." );

} catch(Exception e) {

System.out.println( "Catching." );

}

System.out.println( "End program." );

}

public static void sampleMethod ( double test ) throws Exception {

System.out.println( "Starting sampleMethod." );

if (test < 100)

throw new Exception( );

}

}


Exercises21

Exercises

23. What is the output produced by the following program?

public class Exercise {

public static void main ( String[] args ) {

try {

System.out.println( "Trying" );

sampleMethod( 212 ); //was 98.6

System.out.println( "Trying after call." );

} catch(Exception e) {

System.out.println( "Catching." );

}

System.out.println( "End program." );

}

public static void sampleMethod ( double test ) throws Exception {

System.out.println( "Starting sampleMethod." );

if (test < 100)

throw new Exception( );

}

}


Exercises22

Exercises

24. Correct the following method definition by adding a suitable throws clause:

public static void doStuff ( int n ) {

if (n<0)

throw new Exception( “Negative number.” );

}

25. What happens if an exception is thrown inside a method invocation but the exception is not caught inside the method?


Exercises23

Exercises

30. What is the output of the following?

import java.util.Scanner;

import java.util.InputMismatchException;

public class InputMismatchExceptionDemo {

public static void main ( String[] args ) {

Scanner keyboard = new Scanner( System.in );

int number = 0; //to keep compiler happy

boolean done = false;

while (! done) {

try {

System.out.println( "Enter a whole number:" );

//number = keyboard.nextInt();

done = true;

} catch (InputMismatchException e) {

keyboard.nextLine();

System.out.println( "Not a correctly written whole number.“ );

System.out.println( "Try again. " );

}

}

System.out.println( "You entered " + number );

}

}


Exercises24

Exercises

31. Give the definition for the following method. Use code similar to this code.

/**

Precondition: keyboard is an object of the class Scanner that has been set up for keyboard input (as we have been doing right along).

Returns: An int value entered at the keyboard. If the user enters an incorrectly formed input she or he is prompted to reenter the value.

*/

import java.util.Scanner;

import java.util.InputMismatchException;

public class InputMismatchExceptionDemo {

public static void main ( String[] args ) {

Scanner keyboard = new Scanner( System.in );

int number = 0; //to keep compiler happy

boolean done = false;

while (! done) {

try {

System.out.println( "Enter a whole number:" );

//number = keyboard.nextInt();

done = true;

} catch (InputMismatchException e) {

keyboard.nextLine();

System.out.print( "Not a correctly written “);

System.out.println( “whole number.“ );

System.out.println( "Try again. " );

}

}

System.out.println( "You entered " + number );

}

}


  • Login