# Exceptions



## JavaIsTheBest (3. Jun 2016)

Hallo,
ich habe eine Aufgabe zu Exceptions und hätte ein paar Fragen dazu.

1) Warum muss eine Exception in der Schnittstelle Queue geworfen werden und nicht erst in der Implementierungsklasse?
2) Wozu die finale Variable queue und als Parameter, auch eine Variable vom Typ Queue. Ich weiß, dass ist der konstruktor. Nur sehe ich nicht den Grund, warum das so implementiert ist.


```
class QueueEmptyException extends Exception {
public final Queue queue;
public QueueEmptyException (Queue q) {
queue = q;
}
}
```

3) Könnte ich die Klasse ListElement auch so implementieren, anstatt wie in der Lösung.


```
public class ListElem {
   
    ListElem s;
    ListElem next;
   
    public ListElem(ListElem s){
        this.s=s;
        next=null;
    }

}
```


----------



## Joose (3. Jun 2016)

JavaIsTheBest hat gesagt.:


> 1) Warum muss eine Exception in der Schnittstelle Queue geworfen werden und nicht erst in der Implementierungsklasse?



Das Interface gibt nur vor wie die Methode deklariert ist, inkl möglicher Exceptions. 
Geworfen wird die Exception dann erst in der Implementierung.



JavaIsTheBest hat gesagt.:


> 2) Wozu die finale Variable queue und als Parameter, auch eine Variable vom Typ Queue. Ich weiß, dass ist der konstruktor. Nur sehe ich nicht den Grund, warum das so implementiert ist.



Damit nach dem Konstruktor aufruf dem Exception Objekt kein anderes Queue Objekt zugewiesen werden kann.
Die Exception bekommt das Queue Objekt übergeben bei welchem der Fehler aufgetreten ist, somit kann die Exception dort wo sie gefangen wird mehr Informationen bereitstellen.


----------



## JavaIsTheBest (3. Jun 2016)

Und was sagt ihr zu meiner 3) Frage? Anstatt einen String übergebe ich ein ListElement.


----------



## mrBrown (3. Jun 2016)

Ist Falsch. Du bräuchtest dann das ListItem, um das ListItem zu erstellen. Das ListItem soll ja eben den String enthalten - das speichert den Wert, den die Liste an der position hat


----------



## JavaIsTheBest (5. Jun 2016)

Ich verstehe noch nicht ganz den Unterschied zwischen ListElement und einem einzelnen Element (in der Aufgabe ein String).

Die Knoten einer verketteten Liste repräsentieren, doch ein einziges Element (hier: Objekte vom Typ String? Was ist dann ListElement?


----------



## mrBrown (5. Jun 2016)

Deine ListItem's sind die "Behälter" für den Listeninhalt.

Stell dir deine ListItems als Klarsichthüllen vor, die kannst du aneinanderheften, das ist dann deine List. In den Hüllen liegt dann der eigentliche Inhalt, hier der String


----------



## JavaIsTheBest (5. Jun 2016)

Sorry, dass ich soviel frage

public String element;
public ListElem next;

Warum ist next nicht vom Typ String?
Die verkettete Liste soll doch auf den Inhalt, des nächsten Elements zeigen?

Und warum ist element vomTyp String da?
Um den "Behälter" zu füllen?


----------



## mrBrown (5. Jun 2016)

Um bei der Analogie mit Klarsichtfolien zu bleiben:
Du hängst mehrere ListElem (Klarsichtfolien) aneinander, jede einzelne enthält dann den entsprechenden String(Zettel oä). Du kannst aber nicht einfach an eine ListElem als nächstes Element einen String anhängen, der muss immer in einem Behälter sein. (An Klarsichtfolien nicht einfach einen Zettel, sondern der Zettel in eine neue Folie).

Die Liste zeigt immer auf das nächste ListenElement, und das Element kennt seinen Inhalt.
Nach außen wirkt es so, als ist nur der Inhalt drin, aber zum Verwalten braucht die Liste intern ListElems.


----------



## JavaIsTheBest (5. Jun 2016)

Also kann eine Klarsichtfolie(ListElem) nur auf etwas, vom gleichen Typ zeigen?


----------



## mrBrown (5. Jun 2016)

Ja.

Und der String könnte ja auch überhaupt nicht auf irgendwas zeigen


----------

