Documentation
The Java™ Tutorials
Download Ebooks
Download JDK
Search Java Tutorials
Trail: Essential Classes
Lesson: Exceptions
Home Page > Essential Classes > Exceptions
« Previous • TOC

# Answers to Questions and Exercises

## Questions

1. Question: Is the following code legal?

       try {

       } finally {

       }

   Answer: Yes, it's legal — and very useful A `try` statement does not have to have a `catch` block if it has a `finally` block. If the code in the `try` statement has multiple exit points and no associated `catch` clauses, the code in the `finally` block is executed no matter how the `try` block is exited. Thus it makes sense to provide a `finally` block whenever there is code that must always be executed. This include resource recovery code, such as the code to close I/O streams.
2. Question: What exception types can be caught by the following handler?

       catch (Exception e) {

       }

   What is wrong with using this type of exception handler?

   Answer: This handler catches exceptions of type `Exception`; therefore, it catches any exception. This can be a poor implementation because you are losing valuable information about the type of exception being thrown and making your code less efficient. As a result, your program may be forced to determine the type of exception before it can decide on the best recovery strategy.

3. Question: Is there anything wrong with this exception handler as written? Will this code compile?

       try {

       } catch (Exception e) {

       } catch (ArithmeticException a) {

       }

   Answer: This first handler catches exceptions of type `Exception`; therefore, it catches any exception, including `ArithmeticException`. The second handler could never be reached. This code will not compile.
4. Question: Match each situation in the first list with an item in the second list.
   1. `int[] A;
      A[0] = 0;`
   2. The JVM starts running your program, but the JVM can't find the Java platform classes. (The Java platform classes reside in `classes.zip` or `rt.jar`.)
   3. A program is reading a stream and reaches the `end of stream` marker.
   4. Before closing the stream and after reaching the `end of stream` marker, a program tries to read the stream again.
   1. __error
   2. __checked exception
   3. __compile error
   4. __no exception

   Answer:

   1. 3 (compile error). The array is not initialized and will not compile.
   2. 1 (error).
   3. 4 (no exception). When you read a stream, you expect there to be an end of stream marker. You should use exceptions to catch unexpected behavior in your program.
   4. 2 (checked exception).

## Exercises

1. Exercise: Add a `readList` method to ``ListOfNumbers.java``. This method should read in `int` values from a file, print each value, and append them to the end of the vector. You should catch all appropriate errors. You will also need a text file containing numbers to read in.

   Answer: See ```ListOfNumbers2.java``.`

2. Exercise: Modify the following `cat` method so that it will compile:

       public static void cat(File file) {
           RandomAccessFile input = null;
           String line = null;

           try {
               input = new RandomAccessFile(file, "r");
               while ((line = input.readLine()) != null) {
                   System.out.println(line);
               }
               return;
           } finally {
               if (input != null) {
                   input.close();
               }
           }
       }

   Answer: The code to catch exceptions is shown in bold:

       public static void cat(File file) {
           RandomAccessFile input = null;
           String line = null;

           try {
               input = new RandomAccessFile(file, "r");
               while ((line = input.readLine()) != null) {
                   System.out.println(line);
               }
               return;
           } catch(FileNotFoundException fnf) {
               System.err.format("File: %s not found%n", file);
           } catch(IOException e) {
               System.err.println(e.toString());
           } finally {
               if (input != null) {
                   try {
                       input.close();
                   } catch(IOException io) {
                   }
               }
           }
       }

« Previous • TOC

Previous page: Questions and Exercises