«por último bloque no se completa normalmente’ Eclipse de advertencia

Eclipse me da que la advertencia de que en el código siguiente:

public int getTicket(int lotteryId, String player) {
    try {
        c = DriverManager.getConnection("jdbc:mysql://" + this.hostname + ":" + this.port + "/" + this.database, this.user, this.password); 
        int ticketNumber;

        PreparedStatement p = c.prepareStatement(
                "SELECT max(num_ticket) " +
                "FROM loteria_tickets " +
                "WHERE id_loteria = ?"
                );
        p.setInt(1, lotteryId);
        ResultSet rs = p.executeQuery();
        if (rs.next()) {
            ticketNumber = rs.getInt(1);
        } else {
            ticketNumber = -1;
        }

        ticketNumber++;

        p = c.prepareStatement(
                "INSERT INTO loteria_tickets " +
                "VALUES (?,?,?,?)");
        p.setInt(1, lotteryId);
        p.setInt(2, ticketNumber);
        p.setString(3, player);
        p.setDate(4, new java.sql.Date((new java.util.Date()).getTime()));
        p.executeUpdate();

        return ticketNumber;
    } catch (Exception e) {
        e.printStackTrace();
    } finally { 
        if (c != null) {
            try {
                c.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return -1;
    }
}

Lo que está mal con mi código?

  • quitar return -1 ; y que debería estar bien
  • bloque no se completa normalmente » ha escrito esta en la línea de asunto
  • Agregar devolución -1 después del try-catch-finally bloque.
InformationsquelleAutor José D. | 2013-07-05

5 Kommentare

  1. 120

    quitar instrucción return de ella.
    Bloque Final se considera la limpieza de bloque, el retorno no es generalmente lo que se espera de él.

    • Yo lo veo, yo debería tener el retorno a la final de la captura… Gracias
    • Pero ¿existe algún riesgo? si puedo hacer esto conscientemente, la comprensión de las repercusiones?
    • Creo OP quería devolver -1 cuando algo salió mal, en el post original -1 es siempre devuelto…
  2. 21

    La return de finally «reemplaza» otra excepción que tirar.

    public class App {
        public static void main(String[] args) {
            System.err.println(f());
        }
        public static int f() {
            try {
                throw new RuntimeException();
            } finally {
                return 1;
            }
        }
    }

    1

  3. 4

    Con tanto return y throw declaración en la finally bloque obtendrá la advertencia, por ejemplo, obtendrá la misma advertencia con el siguiente bloque finally:

    ...
    }finally{
            throw new RuntimeException("from finally!");
    }
    ...
  4. 0

    Si usted no tiene ninguna catch bloques, entonces su finally bloques tienen que estar anidados directamente en el interior de cada uno de los otros. Es solo la captura de una excepción que permite el código para continuar más allá del final de un try/catch/finally bloque. Si no se captura la excepción, usted no puede tener ningún tipo de código después de un bloque finally!

    Se puede ver cómo funciona esto con este ejemplo en Repl.es

    Ejemplo De Salida

    testing if 0 > 5 ?
    try1
    try2
    finally3
    catch1
    finally2
    After other finally
    finally1
    end of function
    
    testing if 10 > 5 ?
    try1
    try2
    try3
    success
    finally3
    finally2
    finally1

    Código de ejemplo en Repl.es

    class Main {
    
        public static void main(String[] args) {
            isGreaterThan5(0);
            isGreaterThan5(10);
        }
    
        public static boolean isGreaterThan5(int a)
        {
            System.out.println();
            System.out.println("testing if " + a + " > 5 ?");
            try
            {
                System.out.println("try1");
                try
                {
                    System.out.println("try2");
                    try
                    {
                        if (a <= 5)
                        {
                            throw new RuntimeException("Problems!");
                        }
    
                        System.out.println("try3");
    
                        System.out.println("success");
                        return true;
                    }
                    finally
                    {
                        System.out.println("finally3");
                    }
                }
                catch (Exception e)
                {
                    System.out.println("catch1");
                }
                finally
                {
                    System.out.println("finally2");
                }
                System.out.println("After other finally");
            }
            catch (Exception e)
            {
                System.out.println("failed");
                return false;
            }
            finally
            {
                System.out.println("finally1");
            }
    
            System.out.println("end of function");
            return false;
        }
    
    }

Kommentieren Sie den Artikel

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

Pruebas en línea