Thursday, August 2, 2007

Try - catch - finally και return

Μία από τις απορίες που είχα πριν από λίγες μέρες ήταν τι γίνεται αν έχουμε μία μέθοδο που επιστρέφει τιμή, ο κώδικάς της βρίσκεται σε ένα μπλοκ try - catch - finally, και η εντολή return είναι είτε μέσα στην try είτε μέσα στην catch.

Δηλαδή ο κώδικα είναι κάπως έτσι:

try
{
...
// Κώδικας της try
...
return true;
}
catch (Exception ex)
{
...
// Κώδικας της catch
...
return false;
}
finally
{
...
// Κώδικας της finally
...
}

Όταν η εκτέλεση φτάσει στην εντολή return, εκτελείται η return και δεν εκτελείται η finally (επομένως ο κώδικας μας είναι προβληματικός) ή εκτελείται πρώτα η finally και μετά η return?

Όπως ήταν φυσικό η Java είναι έξυπνη γλώσσα και έτσι όταν φτάσει η ροή του κώδικα στην εντολή return εκτελείται πρώτα η finally και μετά η return. Για να μην έχει κανείς απορροία δηλαδή!