Was wird mehr benutzt eine Tür öffnen oder eine Tür schließen?
Die zwei Fälle sind Gegenstücke, wo der Fehler passiert wird sie geworfen. Wo der Fehler behandelt wird (Loggen, User informieren, alles abstürzen lassen) da wird er gefangen...
throws Exception in der Methoden signatur sollte schon gar nicht sein.
Und ob du wirfst oder fängst ist nicht unbedingt exklusiv. Du kannst eine Exception fangen und in dem Fall eine andere werfen.
Die wichtigste Frage ist... kann der Verwender etwas mit der Exception anfangen, kann er darauf reagieren. Wenn ja, dann wirf sie, wenn nicht dann hängst davon, ob das Programm dennoch gütig weiterlaufen kann oder es nicht geht. Im 2. Fall ist dann die RuntimeException angesagt, im ersten reicht meistens dann eine warnung zu loggen.
Zum Einen: Fall 2 liefert dir einen Compiler-Fehler, da du die Exception fängst und trotzdem ein throws angibst.
Zum anderen:
Man kann es nicht genau sagen. Beide Fälle tuen etwas unterschiedliches. Im ersten wirfst du direkt eine Exception in einem bestimmtem Fall. Im zweiten willst du sicher gehen, dass du eine evtl. auftretende Exception an Ort und Stelle bearbeiten kannst. Est also eher die Frage wo du die Exception behandeln willst.
publicstaticvoidmain(String[] args)throwsException{foo();}privatestaticvoidfoo()throwsException{try{thrownewClassNotFoundException("weird, but works");}catch(Exception e){thrownewIOException(e);}}
Achso okay, ich dachte beide Methoden machen im Prinzip das gleiche. Das mit throws auch im zweiten Fall kommt durch das schnelle schreiben der Beispiele. Hab einfach nur den Inhalt der Methode geändert und am Methodenkopf leider vergessen das throws wegzumachen.
Wenn ich also dem Benutzer in der View sagen will, dass zum Beispiel seine Eingabe falsch war, catch ich die Exception??
du willst doch dem nutzer die möglichkeit geben seine Eingabe zu berichtigen... ergo ja - auffangen - meldung geben und ihn erneut versuchen zu lassen.
Gut dann habe ich das jetzt auch richtig verstanden. Ihr glaubt gar nicht wie dankbar ich für eure mittlerweile tägliche Hilfe bin. Hab seid meiner Anmeldung (erst vor ein paar Tagen) schon ne Menge dazugelernt. Danke euch allen
publicstaticvoidmain(String[] args)throwsException{foo();}privatestaticvoidfoo()throwsException{try{thrownewClassNotFoundException("weird, but works");}catch(Exception e){thrownewIOException(e);}}