tampatas Δημοσ. 7 Απριλίου 2010 Δημοσ. 7 Απριλίου 2010 Γεια σε όλους Έχω μια απορία σε ένα θέμα που δεν το είχα σκεφτεί μέχρι τώρα. Έστω οτι έχουμε τον παρακάτω κώδικα 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() εκτελείται κανονικά. Βλακεία μου που δεν το δοκίμασα από την αρχή.
Evgenios1 Δημοσ. 7 Απριλίου 2010 Δημοσ. 7 Απριλίου 2010 Εαν στο 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)... }
tampatas Δημοσ. 7 Απριλίου 2010 Μέλος Δημοσ. 7 Απριλίου 2010 Το καταλαβαίνω αυτό, αλλά η απορία μου είναι άλλη. Έστω οτι εμφανίζεται 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(); }
Bspus Δημοσ. 7 Απριλίου 2010 Δημοσ. 7 Απριλίου 2010 http://www.janeg.ca/scjp/flow/try.html Forums good. Google better
elis88 Δημοσ. 7 Απριλίου 2010 Δημοσ. 7 Απριλίου 2010 Το καταλαβαίνω αυτό, αλλά η απορία μου είναι άλλη.Έστω οτι εμφανίζεται 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 είτε δεν γίνει
tampatas Δημοσ. 7 Απριλίου 2010 Μέλος Δημοσ. 7 Απριλίου 2010 Ευχαριστώ για τις απαντήσεις σας. Το έχω ήδη δοκιμάσει και δουλεύει κομπλέ.
ippo00 Δημοσ. 8 Απριλίου 2010 Δημοσ. 8 Απριλίου 2010 Συγνώμη αλλά άμα είναι να πετάς το exeption που πιάνεις καλύτερα να μην το πιάσεις καθόλου.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.