Ich habe in den letzten zwei Tagen den Ausnahmemechanismus kennengelernt, von dem try...catch...finally meiner Meinung nach ein wichtiger Teil ist. In Bezug auf die Aussagen, die ich zuvor gelernt habe, bin ich auf das interessante Problem der Rückgabe gestoßen Durch Experimente habe ich herausgefunden, dass diese logische Beziehung in der Tat subtil ist. Das Folgende ist meine eigene Meinung. Ich hoffe, dass Sie Senioren darauf hinweisen können.
Schauen Sie sich zunächst den ersten Teil des Codes an
public class return_finally{ public static void main(String[] args){ System.out.println( m_1() } public static int m_1(){ int i=10; ); return i+=10; }catch(Exception e){ System.out.println( "error: "+e ); System.out.println( i ); } System.out.println( "finally" } return i;
Die Ausgabe des ersten Codeteils lautet wie folgt:
Start
20
Endlich
20
Beachten Sie, dass die zweite Rückgabe zu diesem Zeitpunkt außerhalb der finalen Anweisung liegt. Gemäß den Bestimmungen, die gleichzeitig return und final erscheinen, können wir verstehen, dass die erste Rückgabe nur eine Bedingung ist. Ihre Funktion besteht nur darin, die finale Anweisung zu finden. Tatsächlich führt es nur eine i + = 10-Operation aus, gibt dann direkt die final-Anweisung ein und gibt schließlich das Ergebnis zurück.
Schauen wir uns den zweiten Codeabschnitt an:
public class return_finally{ public static void main(String[] args){ System.out.println( m_1() } public static int m_1(){ int i=10; ); return i+=10; }catch(Exception e){ System.out.println( "error: "+e ); System.out.println( i ); } System.out.println( "finally" );
Der Unterschied zwischen dem zweiten Teil des Codes und dem ersten Teil besteht darin, dass die endgültige Rückgabe in der final-Anweisung platziert wird. Wir können das Ausgabeergebnis erraten:
Start
20
Endlich
50
Die zu diesem Zeitpunkt ausgeführte Rückgabe überschrieb die aus der vorherigen Operation erhaltenen Ergebnisse und gab den Wert 50 zurück. Das heißt, die Rückgabe in der final-Anweisung wurde ausgeführt. Nun, es sollte so ausgedrückt werden
Es gibt auch einen dritten Codeteil, bitte genießen Sie ihn langsam:
public class return_finally{ public static void main(String[] args){ System.out.println( m_1() } public static int m_1(){ int i=10; ); return i; }catch(Exception e){ System.out.println( "error: "+e ); System.out.println( i ); } System.out.println( "finally" } return i;
Zu diesem Zeitpunkt gibt es in der final-Anweisung ein zusätzliches i=50. Was ist also das Ergebnis?
Start
Endlich
10
Dies ist das Ergebnis. In der final-Anweisung gibt es keine Return-Anweisung, sodass sich der ursprüngliche Rückgabewert nicht ändert.
Können wir es anhand dieser drei Beispiele so verstehen:
Wenn Sie in der Try-Anweisung auf die Rückgabe stoßen, speichern Sie zunächst den Wert an einer Stelle und suchen Sie dann nach der Final-Anweisung. Wenn die Anweisung einen neuen Algorithmus enthält, nehmen Sie den Wert aus diesem Bereich und führen Sie die Operation aus Wenn es in „finally“ keine Rückgabe gibt, geben Sie einfach den „neuen Wert“ ein. „Überschreiben Sie den „alten Wert“ in diesem Bereich und geben Sie ihn schließlich zurück. Wenn es in „finally“ keinen Return gibt, nehmen Sie einfach den „alten Wert“ in diesem Bereich heraus und geben Sie ihn zurück.
Das Obige dient nur dem Verständnis. Ich hoffe, Sie können mir weitere Ratschläge geben. Vielen Dank für Ihre Hilfe!