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

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

Δημοσ.

Καλησπέρα! Διαβάζοντας σχετικά για τις εξαιρέσεις στην γλώσσα java είδα ότι υπάρχει μία δεσμευμένη λέξη κλειδί throws η οποία χρησιμοποιείται όταν μία μέθοδος δεν συλλαμβάνει όλες τις εξαιρέσεις από μόνη της.

Δηλαδή το throws  απλά διευκρινίζει την ανάγκη που υπάρχει να ελεγχθεί μία εξαίρεση?

 

Επίσης στην Java οι εξαιρέσεις διακρίνονται σε ελεγχόμενες και μη ελεγχόμενες.

Στην εντολή throws μπορεί να περιέχονται μόνο μη ελεγχόμενες εξαιρέσεις.

Αν έχω πρόκληση μίας μη ελεγχόμενης εξαίρεσης μέσα σε μία μέθοδο, που φροντίζω να αντιμετωπίσω μέσα στην μέθοδο στην οποία αυτή προκαλείται, τότε χρειάζεται η χρήση του throws και η δήλωση της εξαίρεσης?

 

Δεν ξέρω αν έγινα απολύτως κατανοητός απλώς είναι λίγο λεπτό θέμα και προσπαθώ να βγάλω άκρη..

Αν μπορεί κάποιος ας βοηθήσει.

Ευχαριστώ!

  • Moderators
Δημοσ.

Πες ότι έχεις μια συνάρτηση και μέσα σ' αυτή έχεις κώδικα που μπορεί να κάνει throw ένα exception. Αν διαχειριστείς αυτόν τον κώδικα μέσα στη συνάρτηση, τότε η ίδια η συνάρτηση δεν κάνει throw τίποτα. Αν δε διαχειριστείς αυτόν τον κώδικα, τότε η συνάρτησή σου μπορεί να κάνει throw, μιας και δε θα έχεις διαχειριστεί το exception μέσα στη συνάρτηση.

  • Like 1
  • Moderators
Δημοσ.

Άμα η συνάρτηση κάνει throw τότε το throw αυτό πρέπει να το διαχειριστεί αυτός που καλεί τη συνάρτηση.

Δημοσ.

Αν δεν την διαχειριστείς μέσα στην συνάρτηση, νομίζω ναι, ή βγάζει ανέλενκτη. Και τα δύο είναι ανεπιθύμητα οπότε...

Δημοσ.

Αν  δεν βαλουμε throw θα είναι λάθος? θα μας βγάλει κάποιο σφάλμα?

θα χτυπάει ο compiler ότι έχεις ένα throw και δεν το διαχειρίζεσαι.

Γενικά ή μέσα στην συνάρτηση θα έχεις ένα try catch να ελέγχεις τις εξαιρέσεις σου ή θα είναι όπως είπε και ο kercyn εκεί που καλείται η συνάρτηση.

Δημοσ.

To throw σαν εντολη θα την χρησιμοποιήσεις θεωρω μονο κατα την διαρκεια του development για υπενθύμιση ουσιαστικα οτι λειπει functionality απο μια εντολη ας πουμε.

πχ

 throw new System.NotImplementedException(); 

Δημοσ.

δεν συμφωνώ με τον Papakaliati στο παραπάνω, πολλές φορές μπορεί να χρειαστεί να κάνεις throw.

Δημοσ.

δεν συμφωνώ με τον Papakaliati στο παραπάνω, πολλές φορές μπορεί να χρειαστεί να κάνεις throw.

Οπως;

(Δεν λεω το οπως ουτε ειρωνικα ουτε για να σε μειωσω, αλλα για την περιπτωση που θα μαθω κατι, μην παρεξηγουμαστε)

Δημοσ.

δεν μου έρχεται κάτι συγκεκριμένο, αλλά να ανοίξω τώρα eclipse και να βάλω search για throw? προσωπικά θυμάμαι και το χρησιμοποιώ.

Δημοσ.

Ευχαριστώ πολύ όλους για τις απαντήσεις σας. Απλά η ερώτηση μου αφορούσε το throws και όχι το throw. Είναι δύο διαφορετικές δεσμευμένες λέξεις κλειδιά της γλώσσας...

 

Επίσης αν μπορεί κάποιος να διευκρινίσει ποια ακριβώς είναι η διαφορά ανάμεσα στις ελεγχόμενες και μη ελεγχόμενες εξαιρέσεις γιατί έχω ψιλοκολλήσει και με αυτό.

Ευχαριστώ!

Δημοσ.

Λοιπόν μη ελεγμένο, οπότε κάνει throws

public void function throws Exception{
  throw new System.NotImplementedException(); 
}

ελεγμένο θα ήταν

public void function{
  try{
    throw new System.NotImplementedException(); 
  }
  catch(Exception ex){
    //...
  }
}

όπως βλέπεις πρέπει να αναφερθεί και το throw για να καταλάβεις την χρήση του throws.

Δημοσ.

φίλε είσαι ωραίος αυτό μόνο! :) 

 

ένα τελευταίο θα ήθελα μόνο να ρωτήσω σχετικά με μία αναφορά που διάβασα σε ένα βιβλίο.

 

Στο βιβλίο αυτο γίνεται μία αναφορα στις εξαιρέσεις που ορίζονται στο java.lang. Το βιβλίο έχει ομαδοποιήσει τις εξαιρέσεις του java.lang σε δύο κατηγορίες: ελεγχόμενες και μη ελεγχόμενες. Με βάση ποιο κριτήριο γίνεται αυτό?

Εννοώ ότι με βάση το παραπάνω παράδειγμα ,το οποίο είναι και πολύ κατανοητό , μπορούμε να καταλάβουμε πότε έχουμε ελεγχόμενη και μη ελεγχόμενη περίπτωση. Όμως στην περίπτωση που αναφέρομαι φαίνεται να είναι κάπως αυθαίρετος ο ορισμός.

Γνωρίζει κάποιος κάτι?

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...