2013-07-05 3 views
49

Eclipse-mir im folgenden Code, dass die Warnung geben:‚schließlich nicht vervollständigt Block normalerweise nicht‘ Eclipse-Warnung

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

Was mit meinem Code falsch?

+3

remove return -1; und es sollte in Ordnung sein – Satya

+0

@Dennis 'endlich Block nicht normal beendet' er hat dies in Betreff Zeile geschrieben –

Antwort

98

Remove-Anweisung von ihm entfernen. Der letzte Block wird als Bereinigungsblock betrachtet, eine Rückgabe wird in der Regel nicht erwartet.

+2

Ich sehe, ich sollte die Rückkehr am Ende des Fangs ... Thanks –

+2

Aber gibt es Schaden? wenn ich das bewusst mache, die Auswirkungen verstehe? – Dhiraj

+0

Ich denke OP wollte -1 zurückgeben, wenn etwas schief gelaufen ist, im ursprünglichen Post -1 wird _alles_ zurückgegeben ... – Bamboomy

14

Die return von finally "überschreibt" weitere Ausnahme werfen.

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

Allgemeinen ein finally Block sollte nie eine return-Anweisung haben, weil es andere return -Aussagen oder Exceptions überschreiben würde.

Weiterführende Literatur und detailliertere Antworten auf die Hintergründe davon bitte die Frage

Behaviour of return statement in catch and finally

2

Mit beiden return und throw Aussage im finally bloc sehen Sie die Warnung erhalten wird, zum Beispiel, werden Sie die gleiche Warnung mit dem folgenden abschließenden Block erhalten:

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