Reading material

If you use the first edition of the textbook, follow the reading material in orange. If you use the second edition, follow the reading material in brown.

(1st) Pages 704-707 (section on exceptions)

(2nd) Pages 76-80 (section on exceptions)

Additional material

Exceptions Catching exceptions

public static void fibonacci(String[] args)
{
       try
       {

              int lo = 1;
              int hi = 1;
              int n = Integer.parseInt(args[0]);
              System.out.println(lo);
              for (int i = 1; i < n; i++)
              {
                    System.out.println(hi);
                    int temp = hi;
                    hi = lo + hi;
                    lo = temp;
              }
        }
        catch (ArrayIndexOutOfBoundsException e)
        {
              System.err.println("No command line argument provided");
        }
        catch (NumberFormatException e)
        {
              System.err.println("Command line argument " + e.getMessage() + " is not an integer");
        }
        finally
        {
              System.out.println("Done!");
        }

}

Specifying exceptions

public static void fibonacci(String[] args) throws ArrayIndexOutOfBoundsException, NumberFormatException
{
       int lo = 1;
       int hi = 1;
       int n = Integer.parseInt(args[0]);
       System.out.println(lo);
       for (int i = 1; i < n; i++)
       {
             System.out.println(hi);
             int temp = hi;
             hi = lo + hi;
             lo = temp;
       }
}

Throwning exceptions

public static void fibonacci(String[] args) throws ArrayIndexOutOfBoundsException, NumberFormatException
{
       int lo = 1;
       int hi = 1;
       if (args.length == 0)
       {
             throw new ArrayIndexOutOfBoundsException();
       }
       int n = Integer.parseInt(args[0]);     // may still throw a NumberFormatException
       System.out.println(lo);
       for (int i = 1; i < n; i++)
       {
             System.out.println(hi);
             int temp = hi;
             hi = lo + hi;
             lo = temp;
       }
}

Question

AException and BException are both subclasses of Exception. Furthermore, BException is a subclass of AException. Draw the inheritance diagram. Is an AException object of type BException? Is a BException object of type AException? method may throw exceptions of type AException and BException. Do the following code fragments always produce the same output?

try                               try
{                                 {
    method();                         method();
}                                 }
catch (AException e)              catch (BException e)
{                                 {
    System.out.println("A");          System.out.println("B");
}                                 }
catch (BException e)              catch (AException e)
{                                 {
    System.out.println("B");          System.out.println("A");
}                                 }