# Exeptions



## emma26 (8. Mai 2016)

Hallo zusammen,

ich habe diesen Code bekommen:


```
public class Aufgabe1 {
    
     public static void main ( final String [] args){
       System.out.println ( Aufgabe1.printMessage ());
     }
    
     private static String printMessage () {
       try {
       /*   System.out.print ("A");
         if ( true ) throw new Exc1 () ; // 1
         if ( true ) throw new Exc2 () ; // 2
        
         System.out.print ("B");
         if ( true ) throw new Exc1 () ; // 3
         if ( true ) throw new Exc2 () ; // 4
         if ( true ) throw new Exc3 () ; // 5
         */
         System.out.print ("C");
         } catch ( final Exc1 e) {
         System.out.print ("D");
         return "H";
         } catch ( final Exc2 e) {
         System.out.print ("E");
         } finally {
         System.out.print ("F");
         }
         System.out.print("G");
         return "J";
         }

}
```

throw ... soll auskommentiert werden - sonst darf im Code nichts geändert werden.
Der Code ist nicht ausführbar und ich soll ihn ausführbar machen!

reicht es eine neue Klasse zu erstellen und die Exceptions erben zu lassen??


----------



## dayaftereh (8. Mai 2016)

Kannst du mal die konkrete Aufgabenstellung posten ?


----------



## julia1997 (8. Mai 2016)

Versuchen Sie dann jeweils nur ein Kommentar zu entfernen, damit eine einzige Ausnahme geworfen wird. Geben Sie fu ̈r diese 5 M ̈oglichkeiten die Ausgaben an. Erkl ̈aren Sie kurz die jeweiligen Ausgaben. Dabei mu ̈ssen Sie den Code anpassen, damit dieser u ̈berhaupt u ̈bersetzt werden kann. Es sollten aber alle catch-Klauseln erhalten bleiben!


----------



## dayaftereh (8. Mai 2016)

Komisch, also falls du alle Exception if's ein kommentierst, sollte der Code ausführbar sein und folgende Buchstabe ausgeben.

```
DFH
```

Da in printMessage das erste If greift und dann die Exception Exc1 geworfen wird. Die Exception wird dann im ersten Catch gefangen und dort wird D ausgegeben. Also return wird dann ein H zurück gegeben, wobei dann erst der finally Block durchlaufen wird. Im finally Block wird dann das F ausgeben und dann erst der return Wert H...


----------



## julia1997 (8. Mai 2016)

Aber wie kann ich den Code umschreiben, damit ich nur eine Zeile ausklammern kann?


----------



## julia1997 (8. Mai 2016)




----------



## emma26 (8. Mai 2016)

hallo habe jetzt herum gebastelt und hab für die exc1 und 2 einen neue Klasse gemacht, die schlägt Eclipse auch vor und dann dann fumktioniert auch das ausklammern....

Bsp

public class Exc1 extends Exception {
   String fehler;
   public Exc1() {
     fehler="Exc1 gworfen";
   }
}

als antworten hab ich

  a) The code is not excutable, because the catch functions are "user defined" functions. They have
   to be coded in Exc1.java and Exc2.java. Eclipse automatically creates this function blocks.
   If we would comment out the Exc* functions the method would print ABCFGJ on the console.

   b) Line 11, 14-16 deactivated: code doesn't work because the EXc2 is never thrown from the try statement body
     Line 14-16 deactivated: Output of ADFH
     Line 15-16 deactivated: Output of ADFH
     Line 16 deactivated: ADFH
     No line deactivated: Error because Exc3 is not coded

     It is always the same output because the other try/catch statements are not used.

   c) System Exceptions and User Exceptions


LG


----------



## Xyz1 (9. Mai 2016)

Also nur Runtimes müssen nicht deklariert werden.

Achso entsprechende Blöcke sind auch gegeben.

Sternchen rausnehmen, Dummy bedingungen einsetzen, einrücken, produktive Bedingungen finden.

Offtopic: Ist julia jetzt TO? Was soll das Verwirrungsspielchen?


----------



## emma26 (9. Mai 2016)

Hab erst jetzt gecheckt dass ich falsch auskommentiert habe, somit war auch 
System.out.print ("A"); System.out.print ("B"); weg man durfte wirklich nur die jeweiligen 5 throw auskommentieren. 

Julia, es war nicht nötig den Code umzuschreiben nicht benötige zeilen auskommentieren reicht!! dann schlägt eclipse automatisch die neuen klassen in der Fehlermeldung vor......

public class Exc1 extends Exception {

Diese sinnvoll befüllen und fertig!! Wichtig ist auch das finally immer stärker ist wie return!!!


----------



## dayaftereh (9. Mai 2016)

Nicht stärkere, sondern finally wird immer ausgeführt, egal ob ein return  im Block ist oder ne Exception geworfen wird!


----------



## emma26 (9. Mai 2016)

ahh ok danke fürs verbessern  habens gerade in Proseminar verglichen, es stimmt so wie es oben steht! LG an alle


----------

