Προς το περιεχόμενο

Απορία Java για try-catch-finally block


tampatas

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σε όλους

Έχω μια απορία σε ένα θέμα που δεν το είχα σκεφτεί μέχρι τώρα. Έστω οτι έχουμε τον παρακάτω κώδικα

try{

*

* code

*

}

catch (Exception e){

throw e;

}

finally {

this.clenaUpStuff();

}

 

Έστω οτι εκτελούνται οι εντολές στο code και παίρνουμε Exception. Μέσα στο catch block θα μπορούσα να αντιμετωππίσω το Exception, αλλά δεν το κάνω για λόγους σχεδίασης, οπότε θέλω να το "πετάξω". Το ερώτημα είναι σε περίπτωση που εμφανιστεί Exception και εγώ το κάνω throw το this.clenaUpStuff(), δηλαδή οι εντολές μέσα στο finally block, εκτελείται?

 

Έχω την εντύπωση πως όχι, πως γίνεται throw to exception και το finally δεν εκτελείται, αλλά θέλω να είμαι σίγουρος γιατί είναι πολλές οι συναρτήσεις που χρησιμοποιούν των κώδικα αυτής της μορφής. Ξέρει κάποιος στα σίγουρα?

 

 

Τώρα θα μου πείτε γιατί δεν δοκιμάζεις. Το δοκίμασα και τελικά το clenaUpStuff() εκτελείται κανονικά. Βλακεία μου που δεν το δοκίμασα από την αρχή.

Δημοσ.

Εαν στο try block βρεθει καποιο throw τοτε μετα τη γραμμη που ειναι το throw παει στο catch block εαν δεν υπαρχει καποιο throw στο try block και φτασεις στο τελος του try τοτε πας στο finally.

πχ

πας στο catch

>
1)boolean b=true;
try
{
2)if(
3)throw new Exception();
}
cathc(Exceprion e)
{
4)
}
finally
{
}

>
1)boolean b=false;
try
{
2)if(
throw new Exception();
}
cathc(Exceprion e)
{

}
finally
{
3)...
}

Δημοσ.

Το καταλαβαίνω αυτό, αλλά η απορία μου είναι άλλη.

Έστω οτι εμφανίζεται Exception στο try block. Η εκτέλεση μεταφέρεται στο catch block.

ΑΦΟΥ πας στο catch block κάνεις τι κάνεις και μετά έστω οτι κάνεις throw το Exception. Αν το κάνεις αυτό, ο κώδικας μέσα στο finally θα εκτελεστεί?

try{

*

throw Exception(); // meta apo edo paei sto catch block

*

}

catch (Exception e){

*

*

throw e;//to thema einai oti EDO ksanakano throw. To finally block tha ektelestei?

}

finally {

this.clenaUpStuff();

}

Δημοσ.
Το καταλαβαίνω αυτό, αλλά η απορία μου είναι άλλη.

Έστω οτι εμφανίζεται Exception στο try block. Η εκτέλεση μεταφέρεται στο catch block.

ΑΦΟΥ πας στο catch block κάνεις τι κάνεις και μετά έστω οτι κάνεις throw το Exception. Αν το κάνεις αυτό, ο κώδικας μέσα στο finally θα εκτελεστεί?

try{

*

throw Exception(); // meta apo edo paei sto catch block

*

}

catch (Exception e){

*

*

throw e;//to thema einai oti EDO ksanakano throw. To finally block tha ektelestei?

}

finally {

this.clenaUpStuff();

}

 

Ότι και να γίνει το finally θα εκτελεστεί είτε γίνει throw κάποιο exception είτε δεν γίνει

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...