Ինչպես են 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)NullPointerExceptionArrayIndexOutOfBoundsExceptionArithmeticException- և այլն
- Այլ
Exceptionենթակլասներ (Checked Exceptions)IOExceptionFileNotFoundExceptionSQLException- և այլն
Սխալների հետ աշխատելը ներառում է այս հիերարխիայի ըմբռնումը, համապատասխան սխալի տիպի ընտրությունը (իր սեփական սխալների համար), արդյունավետ օգտագործումը try-catch-finally-ի՝ սխալների մշակման և փոխանցման համար, ինչպես նաև սխալների լոգավորումը սխալների աուդիտի համար։