Java-ში რომელი ტიპის გამონაკლისი ვერ არის დამუშავებული?
sobes.tech AI
პასუხი AI-სგან
შეცდომა.
Java იყოფა გამონაკლისებს (Throwable) სამ ძირითად ტიპად:
- შესამოწმებელი გამონაკლისები (Checked Exceptions): მოითხოვს სავალდებულო დამუშავებას ან გამოხატვას მეთოდის სიგნატურაში (
throws). - შესამოწმებელი გამონაკლისები (Unchecked Exceptions, Runtime Exceptions): არ მოითხოვს სავალდებულო დამუშავებას. ჩვეულებრივ მიუთითებს პროგრამის ლოგიკაში შეცდომებზე.
- შეცდომები (Errors): წარმოადგენენ სერიოზულ პრობლემებს, დაკავშირებულ Java ვირტუალურ მანქანასთან ან სისტემის რესურსებთან. მათ შეუძლებელია დამუშავება აპლიკაციის დონეზე, რადგან ისინი არ ეხება კოდის პრობლემებს.
Error-ის მაგალითები:
OutOfMemoryError: Java ვირტუალურ მანქანამ ვერ შეძლო მეხსიერების გამოყოფა.StackOverflowError: Stack-ის გადატვირთვა (ძალიან ღრმა რეკურსია).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("Out of memory! Application will likely terminate.");
// შემდეგი მოქმედებები აქ უსარგებლოა ან გამოიწვევს SecurityException-ს
} catch (Exception e) {
// სხვა გამონაკლისების დამუშავება
e.printStackTrace();
}
QA ავტომატიზაციაში, თუ ტესტის შესრულებისას წარმოიქმნება Error, ეს მეტწილად მიუთითებს ტესტის გარემოს პრობლემაზე, JVM-ის კონფიგურაციის შეცდომაზე ან სერიოზულ დეფექტზე პროგრამაში, რომელიც გამოიწვია კრიტიკული შეცდომა, და არა მოსალოდნელ დამუშავებად გამონაკლისზე. ასეთ სცენარებს სჭირდებათ ძირეული მიზეზის გამოკვლევა, ტესტის კოდიდან გარეთ.