Java-return Wert im try-catch-finally-Mechanismus

Ich habe gerade stieß dieses folgenden code:

public class TestFinally {
    public static void main(String[] args) {
        int returnValue = function();

        System.out.println("Return value: " + returnValue);
    }

    public static int function() {
        try {
            return 1;
        } catch (Exception e){
            return 2;
        } finally{
            return 3;
        }
    }
}

Es ist ohne Zweifel, dass dieser code ausgeführt wird, ergeben eine Ausgabe von "Rückgabewert 3".

Allerdings bin ich neugierig, wie:

  1. Der Mechanismus, der die Innereien in der JVM. Weiß jemand, ob die VM tatsächlich ersetzt der Rückgabewert auf dem stack durch über-schreiben die erste "return 1"? Wenn ja, wo finde ich mehr Informationen über diese.
  2. Habe ich noch nicht gefunden, der Einsatz für ein return im finally-Mechanismus, der auf diese Weise und erlaubt in der implementierten
    in der JVM. Wenn dieses code-Konstrukt wird verwendet als ein Mittel, um zurückzukehren
    Fehler-code -, ist es meiner Meinung nach gibt es bessere Möglichkeiten, um Fehler zu protokollieren
    oder kehren diese Fehler-codes. Es hat sich jemand gefunden, der einen solchen
    konstruieren?

Vielen Dank im Voraus.

Cheers,
Vern

  • zu 1.: keine Ahnung, ich möchte das auch wissen. zu 2.: schließlich kann verwendet werden, um zu tun, meint, dass unbedingt erledigt werden müssen, z.B. schließen von streams. Ich denke Ausnahmen sind schöner als die Fehler-codes, denn Sie sehen bereits in der Methoden-Signatur, was könnte schief gehen (ohne Lesen irgendeiner Dokumentation), und es ist schwieriger zu ignorieren Sie Sie einfach für die coder.
  • Naja, kann ich nicht wirklich beantworten das erste, aber das zweite scheint ziemlich offensichtlich. Die finally-Klausel wird verwendet, um aufzuräumen (wie nah-streams), was muss geschehen, selbst wenn der code gibt. Jedoch, Rückkehr in eine finally-Klausel ist eine schlechte Praxis sowieso, nur tun Sie es nicht.
  • Ich glaube nicht, Sie sind ment zu ändern Rückgabewert innerhalb finnaly block, aber warum sollte Sie auf der anderen Seite dossallow Sie es zu tun? Aber es ist nicht eine gute pracice zu tun.
  • Vielen Dank an alle für den input. Ja, ich erkannte, dass die Frage, die ich stellte, war nicht klar. Ich habe bearbeitet und geklärt die Frage. Ich bin gespannt, ob jemand gesehen hat, einen solchen code zu verwenden, wobei eine Rückgabe erfolgt in den try-block und einem zweiten return im finally-block zu überschreiben, der try-block den Rückgabewert. Hat jemand mal so einen verwenden?
InformationsquelleAutor Vern | 2012-01-14
Schreibe einen Kommentar