Sobes.tech
Middle

Τι τύπος εξαίρεσης στη Java είναι αδύνατο να χειριστεί;

sobes.tech AI

Απάντηση από AI

Σφάλμα.

Η Java διαχωρίζει τις εξαιρέσεις (Throwable) σε τρεις βασικούς τύπους:

  1. Ελεγχόμενες Εξαιρέσεις: Απαιτούν υποχρεωτικό χειρισμό ή δήλωση στη υπογραφή της μεθόδου (throws).
  2. Μη ελεγχόμενες Εξαιρέσεις (Εξαιρέσεις χρόνου εκτέλεσης): Δεν απαιτούν υποχρεωτικό χειρισμό. Συνήθως υποδεικνύουν σφάλματα στη λογική του προγράμματος.
  3. Σφάλματα: Αντιπροσωπεύουν σοβαρά προβλήματα που σχετίζονται με τη μηχανή εικονικής Java ή τους πόρους του συστήματος. Δεν μπορούν να αντιμετωπιστούν σε επίπεδο εφαρμογής, καθώς δεν είναι προβλήματα του ίδιου του κώδικα.

Παραδείγματα Error:

  • OutOfMemoryError: Η μηχανή εικονικής Java δεν μπόρεσε να διαθέσει μνήμη.
  • StackOverflowError: Προκλήθηκε υπερχείλιση στοίβας (πολύ βαθιά αναδρομή).
  • InternalError: Εσωτερικό σφάλμα της Java Virtual Machine.

Η διαχείριση του Error μέσω try-catch δεν έχει νόημα, καθώς αυτά τα σφάλματα υποδεικνύουν καταστάσεις από τις οποίες η εφαρμογή γενικά δεν μπορεί να ανακάμψει επιτυχώς. Αντίθετα, όταν προκύψει ένα Error, η εφαρμογή τερματίζει συνήθως.

Αν και τεχνικά μπορεί να γραφει catch (Error e), τέτοιος κώδικας θεωρείται κακή πρακτική και δεν λύνει το βασικό πρόβλημα.

try {
    // Κώδικας που μπορεί να προκαλέσει OutOfMemoryError
    List<Object> list = new ArrayList<>();
    while (true) {
        list.add(new Object());
    }
} catch (OutOfMemoryError e) {
    // Αυτό το μπλοκ θα εκτελεστεί, αλλά δεν θα μπορείτε να ανακάμψετε,
    // καθώς το σύστημα δεν διαθέτει επαρκή μνήμη.
    System.err.println("Έλλειψη μνήμης! Η εφαρμογή πιθανώς θα τερματίσει.");
    // Οι επόμενες ενέργειες εδώ είναι άχρηστες ή θα προκαλέσουν SecurityException
} catch (Exception e) {
    // Χειρισμός άλλων εξαιρέσεων
    e.printStackTrace();
}

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