Ποια είναι κάποια ρίψιμα σφάλματα στην Java (εξετάζοντας τη διαφορά μεταξύ σφαλμάτων, εξαιρέσεων και παραδειγμάτων αυτών);


Απάντηση 1:

Εξαιρέσεις υποτίθεται ότι είναι εξαιρετικές.

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

Όσον αφορά τις κλάσεις λάθους και εξαίρεσης της Java:

  • Τα σφάλματα γενικά χρησιμοποιούνται για πράγματα εκτός του ελέγχου του κώδικα εφαρμογής, δηλαδή στο περιβάλλον που τρέχει η εφαρμογή, για παράδειγμα OutOfMemory. Οι εξαιρέσεις γενικά χρησιμοποιούνται για προβλήματα μέσα στον κώδικα εφαρμογής (όπως το IOException ή η υποκατηγορία του, FileNotFoundException).

Σφάλματα

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

Ένα λάθος είναι κάτι που τραβάει το χαλί από το πρόγραμμα, έτσι γενικά δεν πρέπει να προσπαθήσετε να το χειριστείτε, αλλά το πρόγραμμα πρέπει να βγει από το πρόγραμμα.

Εξαιρέσεις

Οι εξαιρέσεις είναι γενικά "ελεγμένες", που σημαίνει ότι ο μεταγλωττιστής θα διαμαρτύρεται αν δεν προσθέσετε κώδικα για να τα χειριστείτε ρητά, είτε προσπαθήστε / πιάσετε είτε μια ρητή "ρίψη".

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

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

Οι μη ελεγμένες εξαιρέσεις είναι πιο πιθανό να προκληθούν από σφάλμα στον κώδικα, για παράδειγμα NullPointerException ή IndexOutOfBoundsException.

Οι άνθρωποι έχουν διαφορετικές απόψεις σχετικά με τις εξακριβωμένες εξαιρέσεις έναντι των ανεξέλεγκτων εξαιρέσεων, ενώ μερικοί θεωρούν ότι οι ελεγμένες εξαιρέσεις «σπάνε» ή υπερχρησιμοποιούνται στην Java.

Εξαιρέσεις Γενικά

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

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

Οι προγραμματιστές φαίνονται να προετοιμάζονται για να βάλουν ένα try / catch στο χαμηλότερο επίπεδο, βασικά μόλις ο μεταγλωττιστής ή ο IDE τους διαμαρτύρονται γι 'αυτό. Αλλά συχνά σε εκείνο το σημείο στην ανάπτυξη δεν είναι προφανές τι πρέπει να κάνουμε γι 'αυτό από την άποψη της συνολικής λογικής εφαρμογής ή σε ποιο επίπεδο του κώδικα είναι κατάλληλο να το χειριστούμε. Συχνά οι προγραμματιστές απλώς καταγράφουν και στη συνέχεια εκ νέου ρίχνουν, ή ακόμα και μερικές φορές απλά να το πιάσει και να το αγνοήσει!

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

Σε αυτό το υψηλότερο επίπεδο, να πιάσετε την εξαίρεση, να την καταγράψετε και, στη συνέχεια, ίσως να βγείτε (ή να την επαναφέρετε, που αντιστοιχεί στο ίδιο πράγμα σε αυτό το επίπεδο) με την προεπιλογή. Προτιμώ σαφώς να προσελκύει κάθε πιθανή εξαίρεση, ακόμη και αν δεν πρόκειται να κάνετε πολλά γι 'αυτό, παρά μια παγίδα. Με αυτόν τον τρόπο μπορείτε αργότερα να δείτε πιο εύκολα τι εξαιρέσεις πρέπει να αντιμετωπίσετε.

Εύχομαι οι IDE να υποστηρίζουν την απεικόνιση και τον χειρισμό της εξαίρεσης και την επαναφορά της με πιο δομική έννοια.