Wie lege ich in Java einen Rückgabetyp fest, wenn eine Ausnahme auftritt?

8

hey alle, ich bin neu in Java und habe mich gefragt, ob ich eine Methode definiere, um ein Datenbankobjekt zurückzugeben

wie

%Vor%

Wenn die Verbindung fehlschlägt, wenn ich versuche, sie zu erstellen, was soll ich zurückgeben? Eclipse sagt mir, dass ich ein Connection-Objekt zurückgeben muss, aber wenn es fehlschlägt, bin ich mir nicht sicher, was ich tun soll.

Danke!

AKTUALISIERTER CODE ZUM AUSNAHME-BUBBLE:

%Vor%     
James 31.05.2010, 19:19
quelle

6 Antworten

5

Wenn eine Ausnahme ausgelöst wird, wird von der Methode kein normaler Wert zurückgegeben. Normalerweise ist der Compiler in der Lage, dies zu erkennen, so dass Sie nicht einmal mit Warnmeldungen / Fehlern vom Typ "return required" belästigt werden. Manchmal, wenn es nicht möglich ist, müssen Sie eine "alibi" return-Anweisung geben, die tatsächlich nie ausgeführt wird.

Definieren Sie Ihre Methode wie folgt

%Vor%

erfüllt Eclipse: -)

Update: Wie andere bereits erwähnt haben, ist es keine gute Idee, eine Ausnahme in einen Catch-Block zu werfen, wie Sie es getan haben. Die einzige Situation, wenn es eine anständige Lösung ist, ist, wenn Sie zwischen verschiedenen Arten von Ausnahmen konvertieren müssen. Z.B. eine Methode namens löst eine Ausnahmetyp, die Sie nicht oder nicht nach oben ausbreiten wollen, können zu (zum Beispiel, weil es zu einem proprietären Bibliothek oder Rahmen gehört und Sie den Rest Ihres Codes von ihm zu trennen).

Auch dann der richtige Weg, eine Ausnahme erneut auslösen, die ursprüngliche Ausnahme in die neuen Konstruktor (Standard-Java-Ausnahmen und die meisten Rahmen für spezifische Ausnahmen dies erlauben) zu übergeben. Auf diese Weise werden die Stapelverfolgung und alle anderen Informationen innerhalb der ursprünglichen Ausnahme beibehalten. Es ist auch eine gute Idee, den Fehler vor dem erneuten Einlesen zu protokollieren. ZB

%Vor%     
Péter Török 31.05.2010, 19:22
quelle
5

Sie sollten nur Ihren gesamten try/catch -Block eliminieren und zulassen, dass Ausnahmen mit einer entsprechenden Ausnahmedeklaration propagiert werden. Dadurch wird der Fehler beseitigt, den Eclipse meldet, und genau jetzt macht Ihr Code etwas sehr Schlechtes: Indem Sie alle Ausnahmen abfangen und erneut werfen, zerstören Sie die ursprüngliche Stack-Ablaufverfolgung und verstecken andere Informationen, die im ursprünglichen Ausnahme-Objekt enthalten sind / p>

Plus, was ist der Zweck der Zeile Class.forName("com.mysql.jdbc.Driver").newInstance(); ? Sie erstellen ein neues mysql Driver -Objekt durch Reflektion (warum?), Aber Sie tun nichts damit (warum?).

    
JSBձոգչ 31.05.2010 19:23
quelle
1

Dies ist genau die Situation, in der Sie die Ausnahme in der Aufrufliste weiterleiten lassen sollten (indem Sie die Methode als throws SQLException deklarieren oder sie in eine anwendungsspezifische Ausnahme einfügen), damit Sie sie auf einer höheren Ebene abfangen und handhaben können.

Das ist der ganze Sinn von Ausnahmen: Sie können wählen, wo Sie sie fangen.

    
Michael Borgwardt 31.05.2010 19:23
quelle
1

Niemals jemals eine generische Ausnahme wie diese verwenden. Wenn Sie keine vorbereitete Ausnahme (in diesem Fall eine SQLException) haben, erstellen Sie einen eigenen Ausnahmetyp und werfen Sie ihn. Jedes Mal, wenn ich auf etwas stoße, das erklärt, dass es "Exception" auslöst, und es sich herausstellt, dass es "Exceptions wirft" und so weiter, will ich den Idioten erwürgen, der diese Kette von gestartet hat Erklärungen.

    
Paul Tomblin 31.05.2010 19:25
quelle
0

Es tut mir leid, aber Sie sollten keinen solchen Code schreiben, selbst wenn Sie Java noch nicht kennen.

Wenn du so etwas schreiben musst, würde ich es eher so machen:

%Vor%

Und Sie sollten sich darüber im Klaren sein, dass Verbindungspools der richtige Weg für alles andere als eine einfache Anwendung mit einem einzigen Thread sind.

    
duffymo 31.05.2010 22:12
quelle
0

Probieren Sie es aus

%Vor%     
Sunil Kumar Sahu 29.05.2012 12:39
quelle

Tags und Links