java सवर 'आखिरकार ब्लॉक सामान्य रूप से ग्रहण चेतावनी को पूरा नहीं करता है




मज़बूत पासवर्ड बनाएं (4)

ग्रहण मुझे निम्नलिखित कोड में चेतावनी देता है:

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

मेरे कोड में क्या गलत है?


इससे वापसी विवरण हटा दें। अंतिम ब्लॉक को क्लीनअप ब्लॉक माना जाता है, आमतौर पर इसमें वापसी की उम्मीद नहीं होती है।


finally return "ओवरराइड" और अपवाद फेंकने से return

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


finally ब्लॉक में return और throw दोनों के साथ आपको चेतावनी मिलेगी, उदाहरण के लिए, आपको अंततः ब्लॉक के साथ एक ही चेतावनी मिल जाएगी:

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

आम तौर पर finally ब्लॉक में वापसी का वक्तव्य नहीं होना चाहिए क्योंकि यह अन्य return स्टेटमेंट्स या Exceptions को ओवरराइट करेगा।

आगे पढ़ने और इसके पृष्ठभूमि की अधिक विस्तृत उत्तरों के लिए कृपया प्रश्न देखें

पकड़ और अंत में वापसी बयान का व्यवहार







try-catch-finally