sera roja lunar luna julio fechas cuando agosto java try-catch-finally

java - roja - ''finalmente el bloque no se completa normalmente'' Advertencia de Eclipse



eclipse lunar 27 de julio (4)

Con las declaraciones return y throw en el bloque finally recibirás la advertencia, por ejemplo, recibirás la misma advertencia con el siguiente bloque finally:

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

Eclipse me da esa advertencia en el siguiente código:

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; } }

¿Qué pasa con mi código?


El return de finally "anula" el lanzamiento de una nueva excepción.

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



eliminar declaración de retorno de ella. El bloque final se considera bloque de limpieza, generalmente no se espera el retorno.