¿Cómo puedo romper de un bloque try/catch sin lanzar una excepción en Java

Necesito una manera de romper con el centro de bloque try/catch sin lanzar una excepción.
Algo que es similar a la pausa y continuar en bucles.
Es esto posible?

He estado recibiendo extraño throughts se trata de lanzar una excepción personalizada (nombre «BreakContinueException») que simple no hace nada en su captura en el controlador. Estoy seguro de que esto es muy retorcido.

Por lo tanto, cualquier recta hacia adelante solución no soy consciente?

InformationsquelleAutor Basil Musa | 2011-06-30

7 Kommentare

  1. 47

    La forma correcta de hacerlo es, probablemente, para romper el método por poner el bloque try-catch en un método independiente, y el uso de una instrucción return:

    public void someMethod() {
        try {
            ...
            if (condition)
                return;
            ...
        } catch (SomeException e) {
            ...
        }
    }

    Si el código implica un montón de variables locales, también se puede considerar el uso de un break de una etiqueta de bloque, según lo sugerido por Stephen C:

    label: try {
        ...
        if (condition)
            break label;
        ...
    } catch (SomeException e) {
        ...
    }
    • Qué hacer si el método se supone que devuelven algo de void?
    • Creo que no entiendo el problema. En el primer fragmento, usted tendrá que poner una expresión después de la return palabra clave e incluir una instrucción return en la parte inferior del método.
  2. 27

    Siempre se puede hacer con un break de una construcción de bucle o una etiqueta de break como se especifica en aioobies respuesta.

    public static void main(String[] args) {
        do {
            try {
                //code..
                if (condition)
                    break;
                //more code...
            } catch (Exception e) {
    
            }
        } while (false);
    }
    • Se vreaking esta manera de ejecutar el finalmente {} bloque de try catch?
    • Musa: ¡Sí!
    • De la OMI, do ... while(false) debe ser considerado como una mala alternativa para una etiqueta de instrucción.
    • Estoy de acuerdo con @StephenC. Usted no debería usar un bucle a menos que usted está planeando en bucle. Será confuso para alguien que nunca lee el código, incluyendo a ti mismo en 2 meses a partir de ahora.
    • Cuando un bloque de código que se rompen con el break palabra clave, el bloque se considera que ha «terminado abruptamente.» Lo mismo se aplica cuando se produce una excepción; un bloque de código que será el que salió «abruptamente.» Este es el contrario de «normal» finalización/salir. finally bloques de obtener la ejecución cuando sus respectivos try bloques completos normalmente o bruscamente, de modo que la ejecución que en realidad va a la finalmente, si existe, inmediatamente antes de ir a donde usted se «rompió» a.
  3. 13

    Varias maneras:

    • return
    • break o continue cuando en un bucle
    • break de la etiqueta cuando en una etiqueta de declaración (ver @aioobe del ejemplo)
    • break cuando en una instrucción switch.

    • System.exit() … aunque no creo que sea eso lo que quieres decir.

    En mi opinión, «salto a la etiqueta» es la más natural (menos retorcido) manera de hacer esto si usted sólo quieren salir de un try/catch. Pero podría ser confuso para el principiante que los programadores de Java que nunca han encontrado que Java construir.

    Pero mientras que las etiquetas son oscuros, en mi opinión envolver el código en un do ... while (false) de modo que usted puede utilizar un break es la peor idea. Esto confundirá no-novatos y principiantes. Es mejor para los novatos (y no principiantes!) para aprender acerca de la etiqueta de instrucciones.


    Por el camino, return obras en el caso de que usted necesita para salir de un finally. Pero usted debe evitar hacer un return en un finally bloque porque la semántica son un poco confusas, y la responsable de dar al lector un dolor de cabeza.

  4. 7

    Hay varias maneras de hacerlo:

    1. Mover el código a un nuevo método y return de ella

    2. Envuelva el try/catch en un do{}while(false); bucle.

  5. 2

    De esta muestra en el bloque catch puedo cambiar el valor del contador y se romperá mientras bloque:

    class TestBreak {
        public static void main(String[] a) {
            int counter = 0;
    
            while(counter<5) {
                try {
                    counter++;
                    int x = counter/0;
                }
                catch(Exception e) {
                    counter = 1000;    
                }
            }
        }
    }k
    • 1) La pregunta es acerca de la superación de una prueba a no lanzar una excepción. Usted está lanzando una excepción en virtud de las cubiertas, y de una manera que probablemente es demasiado difícil para el compilador JIT para optimizar la distancia. 2) la Captura de Exception es malo.
  6. 1

    ¿return que va a hacer, si no hay finally

    • Una vuelta solo, obviamente, no hace más que romper el try/catch, aunque.
  7. 1

    Este es el código que suele hacer:

     try
     {
        ...........
        throw null;//this line just works like a 'break'
        ...........   
      }
      catch (NullReferenceException)
      { 
      }
      catch (System.Exception ex)
      {
          .........
      }
    • 1) Esto no es válido en Java. 2) La pregunta es acerca de la ruptura de un try sin lanzar una excepción. Usted está explícitamente lanzar una excepción.

Kommentieren Sie den Artikel

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

Pruebas en línea