Was ist eine Checked Exception?
Checked Exceptions sind alle Exceptions die von der Klasse Exception erben, außer jenen, die von RuntimeException erben. Wie oben bereits erwähnt müssen Checked Exceptions entweder durch eine Angabe in der Methodensignatur mit dem throws-Keyword, oder durch Abfangen in einem try-catch Block behandelt werden. Java überprüft zur Compilezeit, ob die Exception entsprechend behandelt wird.
Was ist eine Unchecked Exception?
Unchecked Exceptions sind solche, die "ohne Ankündigung" geworfen werden können, also nicht in einer Methodensignatur angegeben werden. Bekannte Beispiele von Unchecked Exceptions sind ArrayIndexOutOfBoundsException, IllegalArgumentException oder NullPointerException. Diese Exceptions erben von RuntimeException, was den Effekt hat, dass die Angabe in der Signatur nicht notwendig ist.
Die spezielle Implementierung mit einer LinkedList erfordert das auch nicht, da sie sich automatisch vergrößert. D.h. hier gibt es keine feste maximale Größe. Theoretisch wird die Größe nur durch Deinen verfügbaren Arbeitsspeicher begrenzt.Warum wird in der Methode put eine throws BufferFullException geworfen?
Es wird doch nirgendwo überprüft, ob der Buffer voll ist.
Das stimmt wohl, Du möchtest nun allerdings nicht, dass eine NoSuchElem. Exep. geworfen wird, deswegen prüft man ja mit if (size()==0) ob die liste leer ist, falls ja wirft man eine BufferEmptyEcep.In der Aufgabe steht, wenn die Liste leer ist, dann wird eine NoSuchElementException geworfen. Das wird in der get Methode aber nicht gemacht und stattdessen eine BufferEmptyException geworfen.
Das erste Mal steht dort "throws". Beachte das s am Ende. Das deutet darauf hin, dass die Methode diese Exception werfen kann.Und warum wird in der Methode get() zweimal die BufferEmptyException geworfen?
Die spezielle Implementierung mit einer LinkedList erfordert das auch nicht, da sie sich automatisch vergrößert. D.h. hier gibt es keine feste maximale Größe. Theoretisch wird die Größe nur durch Deinen verfügbaren Arbeitsspeicher begrenzt.
Das stimmt wohl, Du möchtest nun allerdings nicht, dass eine NoSuchElem. Exep. geworfen wird
Jein, wenn es "nur" diese Klasse geben würde, die das Interface implementiert: JA.Das heißt, man hätte das theoretisch auch weglassen können?
Warum sollte ich das nicht wollen? NoSuchElement bedeutet doch, dass kein Element vorhanden ist?
static void checked() throws FileNotFoundException{
FileReader r = new FileReader(new File(“C:/xxxxxx.doc”));
throw new NullPointerException();
}
static void checked() throws FileNotFoundException{
try{
FileReader r = new FileReader(new File(“C:/xxxxxx.doc”));
}catch(FileNotFoundException e){
throw e;
}
throw new NullPointerException();
}
FileReader r = new FileReader(new File(“C:/xxxxxx.doc”));
diese Zeile kann eine FileNotFoundException werfen.