try-catch-finally con el regreso después de

Sé cómo try, catch & finalmente el trabajo (la mayor parte), pero tengo una cosa que me preguntaba: ¿qué pasa con una instrucción return después de un try-catch-finally, mientras que ya tuvo un rendimiento en la prueba (o captura)?

Por ejemplo:

public boolean someMethod(){
    boolean finished = false;
    try{
        //do something
        return true;
    }
    catch(someException e){
        //do something
    }
    finally{
        //do something
    }
    return finished;
}

Vamos a decir nada salió mal en el intento, así que nos devuelve true. A continuación, vamos a ir a la finalmente, cuando hacemos algo como el cierre de una conexión y, a continuación,?

Será el método de parada después de que hicimos algunas cosas en el último (por lo que el método devuelve true en el intento), o el método de continuar después de que el finalmente de nuevo, lo que resulta en la devolución de terminado (lo cual es falso)?

Gracias de antemano por las respuestas.

¿Por qué no puede ejecutar el código y ver qué valor devuelve?
Porque él está en un autobús, y estaba preguntando ^^

OriginalEl autor Kevin Cruijssen | 2014-03-20

5 Kommentare

  1. 14

    El hecho de que el bloque finally se ejecuta no hacer que el programa te olvides que has regresado. Si todo va bien, el código después de que el bloque finally no será ejecutado.

    Aquí está un ejemplo que pone de manifiesto:

    public class Main {
    
        public static void main(String[] args) {
            System.out.println("Normal: " + testNormal());
            System.out.println("Exception: " + testException());
        }
    
        public static int testNormal() {
            try {
                //no exception
                return 0;
            } catch (Exception e) {
                System.out.println("[normal] Exception caught");
            } finally {
                System.out.println("[normal] Finally");
            }
            System.out.println("[normal] Rest of code");
            return -1;
        }
    
        public static int testException() {
            try {
                throw new Exception();
            } catch (Exception e) {
                System.out.println("[except] Exception caught");
            } finally {
                System.out.println("[except] Finally");
            }
            System.out.println("[except] Rest of code");
            return -1;
        }
    
    }

    De salida:

    [normal] Finally
    Normal: 0
    [except] Exception caught
    [except] Finally
    [except] Rest of code
    Exception: -1

    OriginalEl autor Joffrey

  2. 7

    Si todo va bien, de regreso en el interior de la try se ejecuta después de la ejecución de la finally bloque.

    Si algo va mal dentro de try, exception es capturado y ejecutado y, a continuación, finally bloque se ejecuta y, a continuación, el regreso después de que se ejecuta.

    ¿Qué te hace pensar que es inalcanzable?
    El bloque finally no es el final. Probarlo. Todo el código que después será perfectamente alcanzable. Y finalmente devuelve nada. Es sólo un bloque de código que se ejecuta conscientes de si hubo una excepción o no.
    Por una razón diferente, sin embargo. Caída de la devolución dentro de los último lugar y algo dentro de tryblock que en realidad puede lanzar una excepción. Compile y ejecute.
    debido a que usted ponga una devolución en el bloque finally. Que hace todo después de inalcanzable.
    Es mi culpa,yo pensaba que el OP ha instrucción return en el bloque finally también.Así que todos estos debates no es útil.Lo siento

    OriginalEl autor Dhanush Gopinath

  3. 3

    Que en caso de que el código dentro de la que finalmente se ejecuta, pero el otro retorno se omite cuando no hay excepciones.
    También puede ver esto por sí mismo en el registro de algo 🙂

    Ver también a este respecto System.exit:
    ¿Cómo Java del Sistema.exit() trabajo con try/catch/finally bloques?

    Y ver de regreso de una finalmente:
    De regresar de un bloque finally en Java

    «En ese caso» significa «sin excepción» y «otra vuelta» es el que después de que el bloque finally, ¿verdad? (Sólo para hacer que claro)
    si hay una excepción a la 2ª vuelta será utilizado, pero el bloque finally está siendo ejecutado. Como he dicho usted puede tratar de hacerlo usted mismo en un pequeño programa en una de las principales y ver qué pasa por el sistema.de salida o de registro, o un punto de interrupción
    Soy consciente de que. Acabo de encontrar la frase que usted está usando un poco ambiguo …
    sí, yo sólo cubrió el caso sin la excepción, ya que yo pensaba que era la más interesante. Este es el valor predeterminado de pre Java 7 manera (usando por fin) a cerca de los recursos.
    Si recuerdo correctamente, se recomienda no volver dentro de probar, aunque, sino, se establece finished y tiene que devolver en un solo lugar, se único.

    OriginalEl autor Christophe Roussy

  4. 2
    public int Demo1()
        {
            try{
                System.out.println("TRY");
                throw new Exception();
                }catch(Exception e){
                    System.out.println("CATCH");
                }finally{
                    System.out.println("FINALLY");
                }return 0;
    
        }

    el resultado de la llamada a este método es similar a la de este

    TRY
    CATCH
    FINALLY
    0

    Significa Considerar Try{}catch{}finally{} como la secuencia de instrucciones que se ejecutan una a una, En este caso en particular.
    Y que el control va a volver.

    OriginalEl autor CoderCroc

  5. 0

    Definitivamente el código dentro trate de ejecutar.. pero cuando llega a la instrucción return.. se va a mover el bloque finally sin ejecutar la instrucción return en el bloque try.. y luego el código de finalmente va a ser ejecutado y, a continuación, la instrucción return de tratar de ejecutar.

    ¿Tienes pruebas?
    Simplemente no hay. Trate de algo de código si usted no sabe el resultado, pero no ponen una respuesta incorrecta, por favor. Si no se produjo la excepción, después de que el bloque finally, la instrucción return en la prueba va a ser ejecutado, nada más.
    He intentado. y estoy de acuerdo con usted..

    OriginalEl autor Narendra11744

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea