გამონაკლისი შეცდომის წინააღმდეგ
მოულოდნელი ქცევა აუცილებლად მოხდება პროგრამის გაშვებისას. ეს შეიძლება იყოს გამონაკლისების ან შეცდომების გამო. გამონაკლისი არის მოვლენები, რომლებმაც შეიძლება დაარღვიონ პროგრამის ნორმალური ნაკადი. შეცდომები არის პირობები, რომლებიც შეიძლება ჩაითვალოს გამოუსწორებლად. გამონაკლისები ძირითადად დაკავშირებულია თავად აპლიკაციასთან, ხოლო შეცდომები დაკავშირებულია სისტემასთან, რომელზეც პროგრამა მუშაობს.
რა არის გამონაკლისი?
გამონაკლისი არის მოვლენა, რომელმაც შეიძლება დაარღვიოს პროგრამის ნორმალური ნაკადი. სახელის გამონაკლისი მოდის "განსაკუთრებული მოვლენისგან". გამონაკლისის სროლა არის გამონაკლისის ობიექტის შექმნის პროცესი და მისი გადაცემა Runtime სისტემაში.გამონაკლისის ობიექტი იქმნება მეთოდით, რომელშიც მოხდა გამონაკლისი. გამონაკლისის ობიექტი შეიცავს სასარგებლო ინფორმაციას, როგორიცაა გამონაკლისის ტიპი და აღწერა. როდესაც Runtime სისტემა მიიღებს გამონაკლისის ობიექტს, ის შეეცდება მოძებნოს ვინმე, რომელიც ამუშავებს მას ზარის დასტაში, საპირისპირო თანმიმდევრობით (რომელშიც გამოიძახეს მეთოდები). Call stack არის მეთოდების შეკვეთილი სია, რომლებიც გამოიძახეს იმ მეთოდამდე, რომელშიც მოხდა გამონაკლისი. Runtime სისტემა წარმატებულია, თუ ის იპოვის მეთოდს გამონაკლისის დამმუშავებლით. გამონაკლისის დამმუშავებელი არის კოდის ბლოკი, რომელსაც შეუძლია ოფიციალურად გაუმკლავდეს აღნიშნულ გამონაკლისს. თუ Runtime სისტემა იპოვის შესაბამის დამმუშავებელს (ანუ გამონაკლისის ტიპი ემთხვევა იმ ტიპს, რომლის დამუშავებაც შესაძლებელია), ის გადასცემს გამონაკლისის ობიექტს დამმუშავებელს. ამას ჰქვია გამონაკლისის დაჭერა. თუმცა, თუ გამონაკლისის დამუშავება შეუძლებელია, პროგრამა შეწყდება. Java-ში გამონაკლისები მემკვიდრეობით მიიღება „Throwable class“. NullPointerException და ArrayIndexOutOfBoundsException ორი გავრცელებული გამონაკლისია Java-ში.
რა არის შეცდომა?
შეცდომა არის მდგომარეობა, რომელიც შეიძლება ჩაითვალოს გამოუსწორებლად, მაგალითად, პროგრამა მოითხოვს მეხსიერების რაოდენობას, ვიდრე ხელმისაწვდომია. ამ შეცდომების დამუშავება გაშვების დროს შეუძლებელია. თუ შეცდომა მოხდა, პროგრამა წყდება. ჯავაში შეცდომები მემკვიდრეობით მიიღება Throwable კლასიდან. შეცდომები, როგორც წესი, წარმოადგენს სერიოზულ პრობლემებს, რომელთა დაჭერაც პროგრამისტმა (ან აპლიკაციამ) არ უნდა შეეცადოს. შეცდომები უბრალოდ არანორმალური პირობებია, რომლებიც არასდროს მოსალოდნელია, რომ მოხდეს ნორმალურ ვითარებაში და, შესაბამისად, არასოდეს არის გათვალისწინებული. მაგალითად, OutOfMemoryError, StackOverflowError და ThreadDead არის ასეთი შეცდომები. მეთოდებს არასოდეს უნდა ჰქონდეთ შეცდომების დამმუშავებლები.
რა განსხვავებაა გამონაკლისსა და შეცდომას შორის?
შეცდომებიც და გამონაკლისებიც არის არასასურველი შემთხვევა პროგრამის შესრულებისას. თუმცა, მათ აქვთ ძირითადი განსხვავებები. გამონაკლისები შეიძლება განჭვრიტოს პროგრამისტმა, ხოლო შეცდომის პროგნოზირება რთულია.გამონაკლისები შეიძლება შემოწმდეს ან გაუქმდეს. მაგრამ შეცდომები ყოველთვის შეუმოწმებელია. გამონაკლისი, როგორც წესი, მიუთითებს პროგრამისტის მიერ გამოწვეულ შეცდომაზე. თუმცა, შეცდომები ხდება სისტემის შეცდომის ან რესურსის არასათანადო გამოყენების გამო. ამიტომ, გამონაკლისები უნდა დამუშავდეს განაცხადის დონეზე, ხოლო შეცდომებზე ზრუნვა უნდა მოხდეს სისტემის დონეზე (მხოლოდ თუ ეს შესაძლებელია). გამონაკლისის დამუშავების შემდეგ, გარანტირებული გაქვთ დაბრუნდებით პროგრამის ნორმალურ ნაკადზე. მაგრამ მაშინაც კი, თუ შეცდომა დაფიქსირდა, პროგრამისტმა შეიძლება არ იცოდეს, როგორ გაუმკლავდეს მას. შეცდომების ტრადიციული დამუშავებისგან განსხვავებით, გამონაკლისები იძლევა შეცდომების დამუშავების კოდის გამოყოფას ჩვეულებრივი კოდისგან.