Warum muss ich hier im Konstruktor meine Exeption nicht abfangen ?

frager2345

Aktives Mitglied
Hi, also hier einmal der Code:
Meine Klasse Buch:
Java:
public class Buch {
    private boolean ausgeliehen = false;
    private  String autor;
    private  String titel;
    private LocalDate rueckgabeDatum =  null;

    //Konstruktor

    public Buch(String autor, String titel)  {
        setTitel(autor);
        setAutor(autor);

    }
    //getter

    public String getAutor() {
        return autor;
    }
    public String getTitel() {
        return titel;
    }
    public boolean isAusgeliehen(){
        return ausgeliehen;
    }
    public LocalDate getRueckgabedatum() throws IllegaloanExeption{
        if(ausgeliehen){
            return rueckgabeDatum;
        }else{
            throw new IllegaloanExeption("Buch nicht ausgeliehen!");
        }
    }
    //setter

    private void setAutor(String autor) throws IllegalArgumentException{
        if(checkAutor(autor)){
            this.autor = autor;
        }
        throw new IllegalArgumentException("Auto hat ein falsches Format");
    }

    private void setTitel(String titel) throws IllegalArgumentException{
        if(checkTitel(titel)){
            this.titel = titel;
        }
        throw new IllegalArgumentException("Titel hat ein falsches Format");
    }
    //checker
    private boolean checkTitel(String titel){
        return titel.length() > 0;
    }
    private boolean checkAutor(String autor){
        return autor.length() > 0;
    }
    //methoden
    public void ausleihen() throws IllegaloanExeption{
        if(!ausgeliehen){
            ausgeliehen = true;
            rueckgabeDatum.now().plusDays(14);
        }else{
            throw new IllegaloanExeption("Objekt ist bereits ausgeliehen");
        }
    }
    public void zurueckgeben() throws IllegaloanExeption{
        if(ausgeliehen){
            ausgeliehen = false;
            rueckgabeDatum = null;
        }else{
            throw new IllegaloanExeption("Objekt ist noch nicht ausgeliehen");
        }
    }

    @Override
    public boolean equals(Object a){
        if(a == null){
            return false;
        }
        if(!(a.getClass().equals(this.getClass()))){
            return false;
        }
        Buch buch = (Buch) a;
        return (buch.getTitel() == this.getTitel());
    }

    @Override

    public String toString(){
        return autor + ":" + titel;
    }
}
Meine Exeption:
Code:
public class IllegaloanExeption extends Exception{
    public IllegaloanExeption(String message){
        super(message);
    }
}

Meine Frage ist jetzt warum ich bei meinen Setter aufrufen im Konstruktor nicht die Exeption auffangen muss (mit try catch). Müsste ich das erst dann machen , wenn ich den Konstruktor aufrufe?
Gruß
 
Die IllegalArgumentException ist eine RuntimeException. Bei Runtime Exceptions muss man weder das throws in der Methodensignatu haben noch muss man diese abfangen. Diese beiden Schritte sind nur bei Checked Exceptions notwendig.
 
Die IllegalArgumentException ist eine RuntimeException. Bei Runtime Exceptions muss man weder das throws in der Methodensignatu haben noch muss man diese abfangen. Diese beiden Schritte sind nur bei Checked Exceptions notwendig.
Ah ok, danke dir. Wie ist es mit meiner eigenen Exeption. Diese ist ja eine geprüfte Exeption, warum muss ich diese dann nicht abfangen?
 

Zurück
Oben