Sobes.tech
Junior

Чӣ тавр бояд хатогиҳоро дар Java дуруст партоем?

sobes.tech AI

Ҷавоб аз AI

გამონაკლისები უნდა იქნას გადაყრილი, როდესაც ხდება არასათანადო სიტუაცია, რომელიც არღვევს პროგრამის ნორმალურ შესრულებას და საჭიროებს დაუყოვნებლივ დამუშავებას.

ძირითადი პრინციპები:

  • გამოიყენეთ გამონაკლისები შეცდომების შეტყობინებისთვის, არა პროცესის ნაკადის კონტროლისთვის.
  • აირჩიეთ სტანდარტული ბიბლიოთეკიდან ყველაზე შესაბამისი გამონაკლისის ტიპი.
  • შექმენით საკუთარი გამონაკლისის კლასი, როდესაც სტანდარტული არ უზრუნველყოფს საკმარის ინფორმაციას.
  • ჩართეთ გამონაკლისის შეტყობინებაში დეტალური ინფორმაცია შეცდომის მიზეზის შესახებ, მათ შორის კონტექსტი.
  • არ იჭერით გამონაკლისებს, რომლებსაც სწორად ვერ უმკლავდებით. უკეთესია, რომ მათ გადმოაგდოთ ზევით, ზარის სტეკზე.
  • გამოიყენეთ try-with-resources ბლოკები რესურსების ავტომატური დახურვისთვის.
  • ლოგგერეთ გამონაკლისები, რომლებსაც უმკლავდებით ან გადმოაგდებთ ზევით.

სწორი სინტაქსი: throw new MyException("შეცდომის შეტყობინება");

მაგალითი:

// საკუთარი გამონაკლისის შექმნა
public class InvalidParameterException extends Exception {
    public InvalidParameterException(String message) {
        super(message);
    }
}

// მეთოდი, რომელიც გადაყრის გამონაკლისს
public int divide(int a, int b) throws InvalidParameterException {
    if (b == 0) {
        throw new InvalidParameterException("დაშლილობა ნულზე აკრძალულია");
    }
    return a / b;
}

// მეთოდის გამოყენება და გამონაკლისის დამუშავება
public void performDivision(int x, int y) {
    try {
        int result = divide(x, y);
        System.out.println("შედეგი: " + result);
    } catch (InvalidParameterException e) {
        // შეცდომის ლოგგერება
        System.err.println("დაშლის შეცდომა: " + e.getMessage());
        // შესაძლებელია დამატებითი დამუშავება ან გადმოყრა
    }
}

Checked და Unchecked გამონაკლისების განსხვავებები:

ტიპი მემკვიდრეობა საჭიროებს დამუშავებას/დაკავშირებას მაგალითი
Checked Exception (სხვა RuntimeException) დიახ (try-catch ან throws) IOException, SQLException
Unchecked RuntimeException არა (კომპილატორი არ მოითხოვს) NullPointerException, ArrayIndexOutOfBoundsException