"Grundkurs Programmieren in Java - Band 1 (3. Auflage, 2006)"
2001-2006, Carl Hanser Verlag

Lösungsvorschlag zu Aufgabe 13.2 (Version 3.0)

(c) 2001-2006 D. Ratz, J. Scheffler, D. Seese, J. Wiesenberger

Exueb1.java:

Funktioniert nicht:
  E:\hiwi\temp>javac Exueb1.java
  Exueb1.java:6: unreported exception java.io.FileNotFoundException; must be caugh
  t or declared to be thrown
      FileReader f=new FileReader("Exueb1.java");
                   ^
  Exueb1.java:8: unreported exception java.io.IOException; must be caught or decla
  red to be thrown
	        int c=f.read();
               ^
  2 errors
Der Konstruktor von FileReader kann eine FileNotFoundException werfen und die read() Methode kann eine IOException werfen - diese müssen weitergeworfen und gefangen werden.

Quelltext: Exueb1.java



Exueb2.java:

  E:\hiwi\temp>javac Exueb2.java
  Exueb2.java:22: ')' expected
      catch(IOException e,FileNotFoundException f) {}
                         ^
  Exueb2.java:22: '{' expected
      catch(IOException e,FileNotFoundException f) {}
                                                     ^
  Exueb2.java:25: '}' expected
  }
   ^
  3 errors
Mit einer catch-Anweisung kann immer nur eine Exception gefangen werden, also:
  catch (IOException e) {}
  catch (FileNotFoundException e) {}
Der Bezeichner f für die FileNotFoundException wäre nicht zulässig, da wir schon ein FileReader-Objekt mit diesem Bezeichner in diesem Sichtbarkeitsbereich haben. Die FileNotFoundException kann aber nur vom FileReader-Konstruktor geworfen werden, der von diesem try-catch-Block aber gar nicht eingeklammert wird.

Quelltext: Exueb2.java



Exueb3.java:

  E:\hiwi\temp>javac Exueb3.java
  Exueb3.java:14: unreported exception java.io.FileNotFoundException; must be caug
  ht or declared to be thrown
      FileReader f=new FileReader("Exueb3.java");
                   ^
  1 error
Die FileNotFoundException wird vom Konstruktor des FileReader-Objekts geworfen, der try-catch-Block klammert dessen Aufruf aber nicht ein.

Quelltext: Exueb3.java



Exueb4.java:

  E:\hiwi\temp>javac Exueb4.java
  Exueb4.java:8: 'try' without 'catch' or 'finally'
      try {
      ^
  1 error
Zu jedem try gehört auch mindestens eine catch-Anweisung.

Quelltext: Exueb4.java



Exueb5.java:

  E:\hiwi\temp>javac Exueb5.java
  Exueb5.java:16: exception java.io.FileNotFoundException has already been caught
      catch(FileNotFoundException e) {}
      ^
  1 error
Eine Exception muss entweder geworfen oder gefangen werden.

Quelltext: Exueb5.java



Exueb6.java:

Dieses Programm funktioniert!

Quelltext: Exueb6.java



Exueb6.java:

  E:\hiwi\temp>javac Exueb7.java
  Exueb7.java:14: 'catch' without 'try'
      catch(IOException e) {}
      ^
  1 error
Ein catch-Block darf nur auf einen try-Block folgen!

Quelltext: Exueb7.java