Exceptions - PowerPoint PPT Presentation

1 / 41
About This Presentation
Title:

Exceptions

Description:

... exceptionObject = new Exception( 'Oops!' ); Exercises. 9. Is the following legal? Exception exceptionObject = new Exception( 'Oops!' ); throw exceptionObject; ... – PowerPoint PPT presentation

Number of Views:111
Avg rating:3.0/5.0
Slides: 42
Provided by: ggre8
Category:
Tags: exceptions | oops

less

Transcript and Presenter's Notes

Title: Exceptions


1
Exceptions exception handling
2
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.

3
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/l
    ang/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.

4
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 )

5
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 nmber
  • public int getBadNumber ( )
  • return mBadNumber

6
Create an exception instance
  • Ex.
  • new Exception( Uh oh! )
  • Exception e new Exception( Rats! )

7
Throw an exception
  • Ex.
  • throw new Exception( Invalid value. )
  • Exception e new Exception( Invalid age. )
  • throw e

8
Declare (a method that indicates) that an
exception may be thrown
  • Ex.
  • public int f ( int x ) throws Exception

9
Handle the possibility that an exception may be
thrown
  • The try-catch blocks
  • try
  • catch (Exception e)

10
Exercises
  • 1. What is the output produced by the following
    code?
  • int waitTime 46
  • try
  • System.out.println( Try block entered. )
  • if (waitTime30)
  • throw new Exception( Over 30. )
  • else if (waitTime
  • 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. )

11
Exercises
  • 2. What is the output produced by the following
    code?
  • int waitTime 12
  • try
  • System.out.println( Try block entered. )
  • if (waitTime30)
  • throw new Exception( Over 30. )
  • else if (waitTime
  • 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. )

12
Exercises
  • 3. What are the throw statements (below)?
  • int waitTime 12
  • try
  • System.out.println( Try block entered. )
  • if (waitTime30)
  • throw new Exception( Over 30. )
  • else if (waitTime
  • 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. )

13
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 (waitTime30)
  • throw new Exception( Over 30. )
  • else if (waitTime
  • 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. )

14
Exercises
  • 5. What is the try block (below)?
  • int waitTime 12
  • try
  • System.out.println( Try block entered. )
  • if (waitTime30)
  • throw new Exception( Over 30. )
  • else if (waitTime
  • 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. )

15
Exercises
  • 6. What is the catch block (below)?
  • int waitTime 12
  • try
  • System.out.println( Try block entered. )
  • if (waitTime30)
  • throw new Exception( Over 30. )
  • else if (waitTime
  • 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. )

16
Exercises
  • 7. What is the catch block parameter (below)?
  • int waitTime 12
  • try
  • System.out.println( Try block entered. )
  • if (waitTime30)
  • throw new Exception( Over 30. )
  • else if (waitTime
  • 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. )

17
Exercises
  • 8. Is the following legal?
  • Exception exceptionObject new Exception(
    Oops! )

18
Exercises
  • 9. Is the following legal?
  • Exception exceptionObject new Exception(
    Oops! )
  • throw exceptionObject

19
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?

20
Useful exception subclasses
  • ArrayIndexOutOfBoundsException
  • NumberFormatException
  • IOException
  • NoSuchMethodException
  • FileNotFoundException

21
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.

22
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.

23
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() )

24
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 (number0)
  • throw new MyException( Hi Mom! )
  • System.out.println( leaving try block )
  • catch (MyException exceptionObject)

25
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 (number0)
  • throw new MyException( Hi Mom! )
  • System.out.println( leaving try block )
  • catch (Exception exceptionObject) //was
    MyException

26
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 (number0)
  • throw new MyException( Hi Mom! )
  • System.out.println( leaving try block )
  • catch (MyException exceptionObject)

27
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.

28
Exercises
  • 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
  • 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 )

29
Exercises
  • 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
  • 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 )

30
Exercises
  • 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
  • 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 )

31
Exercises
  • 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
  • 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 )

32
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)

33
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

34
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/j
    2se/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.htmlnextInt())

35
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

36
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
  • throw new Exception( )

37
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
  • throw new Exception( )

38
Exercises
  • 24. Correct the following method definition by
    adding a suitable throws clause
  • public static void doStuff ( int n )
  • if (n
  • 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?

39
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.
  • 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
  • throw new NegativeNumberException(
    )
  • else
  • System.out.println( "No
    Exception." )
  • System.out.println( "Still in
    sampleMethod." )
  • catch (NegativeNumberException e)

40
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.
    " )

41
Exercises
  • 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.
    " )

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. /
Write a Comment
User Comments (0)
About PowerShow.com