Sobes.tech
Junior

Ինչպես են Java-ում սխալները մշակվում և ինչպես աշխատել դրանց հետ?

sobes.tech AI

Պատասխան AI-ից

Java-յում սխալները մշակվում են արտակարգ իրավիճակների մեխանիզմի միջոցով: Արտակարգ իրավիճակները ներկայացնում են իրադարձություններ, որոնք խախտում են ծրագրի նորմալ կատարման ընթացքը: Կան երկու տեսակի արտակարգ իրավիճակներ՝ Checked Exceptions և Unchecked Exceptions:

Checked Exceptions:

  • ժառանգում են java.lang.Exception-ից (բացառությամբ RuntimeException):
  • պարտադիր է մշակել (օգտագործելով try-catch) կամ հայտարարել մեթոդի սիգնատուրայում (օգտագործելով throws):
  • ներկայացնում են սխալներ, որոնք կարող են առաջանալ սովորական պայմաններում (օրինակ, IOException, FileNotFoundException):

Unchecked Exceptions:

  • ժառանգում են java.lang.RuntimeException կամ java.lang.Error-ից:
  • չեն պահանջում պարտադիր մշակում կամ հայտարարում:
  • ներկայացնում են սխալներ, որոնք հաճախ ցույց են տալիս տրամաբանական սխալներ կոդում կամ անսովոր միջավայրի վիճակներ (օրինակ, NullPointerException, ArrayIndexOutOfBoundsException):

Սխալների մշակումը:

Սխալների մշակման համար օգտագործվում են try-catch-finally բլոկներ:

  • try: կոդի բլոկ, որը կարող է առաջացնել սխալ:
  • catch: կոդի բլոկ, որը կատարվում է, եթե try բլոկում առաջացել է նշված տիպի սխալ:
  • finally: կոդի բլոկ, որը կատարվում է անկախ նրանից, թե առաջացել է սխալ կամ ոչ: հաճախ օգտագործվում է ռեսուրսների ազատման համար:
try {
    // Կոդ, որը կարող է առաջացնել սխալ
    int result = 10 / 0; // Օրինակ՝ ArithmeticException
} catch (ArithmeticException e) {
    // ArithmeticException-ի մշակումը
    System.err.println("Բաժանում զրոյով սխալ: " + e.getMessage());
    // Կարող է լոգավորել սխալը, ցույց տալ հաղորդագրություն օգտվողին և այլն
} catch (Exception e) {
    // Ամեն այլ սխալի մշակումը, եթե նախորդում չի եղել
    System.err.println("Ընդհանուր սխալ: " + e.getMessage());
} finally {
    // Կոդ, որը միշտ կիրականացվի
    System.out.println("Finally բլոկը կատարվեց.");
}

Սխալների փոխանցում:

Մեթոդը կարող է հայտարարել, որ կարող է առաջացնել որոշակի սխալ, օգտագործելով throws բանալի բառը:

public void readFile(String filePath) throws FileNotFoundException, IOException {
    // Ֆայլի ընթերցման կոդ
    // Եթե ֆայլը չի գտնվել, կարող է արտադրվել `FileNotFoundException`
    FileReader fr = new FileReader(filePath);
    // Եթե տեղի է ունենում մուտք/արտահոսքի սխալ, կարող է արտադրվել `IOException`
    // ...
}

Կոչող մեթոդը պետք է կամ մշակել այս սխալը (try-catch), կամ նույնպես հայտարարել, որ այն փոխանցում է:

Իմպլեմենտացիայի սեփական սխալներ:

Կարող եք ստեղծել ձեր սեփական սխալների դասեր, ժառանգելով Exception-ից (Checked Exceptions համար) կամ RuntimeException-ից (Unchecked Exceptions համար):

public class MyCustomException extends Exception {
    public MyCustomException(String message) {
        super(message);
    }
}

Օգտագործում:

public void processData(int value) throws MyCustomException {
    if (value < 0) {
        throw new MyCustomException("Արժեքը չի կարող լինել բացասական");
    }
    // Տվյալների մշակումը
}

Սխալների հիմնական դասերը (հիերարխիա):

  • java.lang.Throwable (բոլոր սխալների և արտակարգ իրավիճակների հիմնական դասը)
    • java.lang.Error (խոշոր խնդիրների համար, որոնք սովորաբար չեն մշակվում ծրագրի կողմից, օրինակ՝ OutOfMemoryError)
    • java.lang.Exception (սխալների համար, որոնք ծրագրը կարող է մշակել)
      • java.lang.RuntimeException (Unchecked Exceptions)
        • NullPointerException
        • ArrayIndexOutOfBoundsException
        • ArithmeticException
        • և այլն
      • Այլ Exception ենթակլասներ (Checked Exceptions)
        • IOException
        • FileNotFoundException
        • SQLException
        • և այլն

Սխալների հետ աշխատելը ներառում է այս հիերարխիայի ըմբռնումը, համապատասխան սխալի տիպի ընտրությունը (իր սեփական սխալների համար), արդյունավետ օգտագործումը try-catch-finally-ի՝ սխալների մշակման և փոխանցման համար, ինչպես նաև սխալների լոգավորումը սխալների աուդիտի համար։