Ստուգված բացառություն ընդդեմ գործարկման ժամանակի բացառություն
Բացառությունները հատուկ տեսակի իրադարձություններ են, որոնք կարող են խաթարել ծրագրի բնականոն հոսքը: Անվան բացառությունը գալիս է «բացառիկ իրադարձություն» բառից: Բացառություն նետելը բացառության օբյեկտ ստեղծելու և այն գործարկման ժամանակի համակարգին հանձնելու գործընթացն է: Երբ գործարկման ժամանակի համակարգը ստանում է բացառության օբյեկտը, այն կփորձի գտնել ինչ-որ մեկին, ով կառավարում է այն զանգերի կույտի ներսում՝ անցնելով այն հակառակ հերթականությամբ (որպես կոչվել են մեթոդները): Գործարկման ժամանակի համակարգը հաջողակ է, եթե գտնում է մեթոդ բացառության կարգավորիչով: Բացառությունների մշակիչը կոդի բլոկ է, որը կարող է պաշտոնապես կարգավորել նշված բացառությունը:Եթե գործարկման ժամանակի համակարգը գտնի համապատասխան մշակող, այն կփոխանցի բացառության օբյեկտը մշակողին: Սա կոչվում է բռնել բացառությունը: Այնուամենայնիվ, եթե բացառությունը հնարավոր չէ կարգավորել, ծրագիրը կդադարեցվի: Java-ում բացառությունները ժառանգվում են Throwable դասից: Նշված Բացառությունները բացառություններ են, որոնց վրա կառավարումն իրականացվում է կոմպիլյատորի կողմից: Runtime բացառությունները բացառությունների մի տեսակ են, որոնք չեն ստուգվում կազմողի կողմից:
Ի՞նչ է ստուգված բացառությունը:
Checked Exceptions-ը կա՛մ java.lang.exception դասի օբյեկտներ են, կա՛մ դրա ենթադասեր (բացառությամբ java.lang. RuntimeException-ի և նրա ենթադասերի): Ստուգված բացառությունները «ստուգվում» են կոմպիլյացիայի ժամանակ: Դա նշանակում է, որ ծրագրավորողը կամ պետք է բռնի կամ նետի այս բացառությունները, այլապես կոմպիլյատորը կբողոքի (կոմպիլյատորի սխալ առաջացնելով): Այս պատճառով շատ ստուգված բացառություններ շատ լավ հայտնի են ծրագրավորողներին: Օրինակ, IOException-ը և նրա ենթադասերը ստուգված են բացառություններ, և երբ ծրագրավորողը գործ ունի ֆայլ մուտք գործելու կամ փոփոխելու հետ, կոմպիլյատորը ստուգում է, որպեսզի համոզվի, որ բոլոր հնարավոր IOException-ները հոգ են տանում ծրագրավորողի կողմից:
Ի՞նչ է Runtime Exception:
Runtime Exceptions-ը բաղկացած է java.lang. RuntimeException-ից և դրա բոլոր ենթադասերից: Տեսականորեն ասած, դրանք ծառայում են նույն նպատակին, ինչ ստուգված բացառությունները, և կարող են նետվել կամ վարվել ստուգված բացառության պես, բայց դրանց կառավարումը չի պարտադրվում կոմպիլյատորի կողմից: Հետևաբար, Runtime բացառությունները պատկանում են չստուգված բացառությունների ընտանիքին: NullPointerException-ը, NumberFormatEception-ը, ClassCastException-ը և ArrayIndexOutOfBoundsException-ը Java-ում գործարկման ժամանակի ընդհանուր բացառություններ են:
Ո՞րն է տարբերությունը Checked Exception-ի և Runtime Exception-ի միջև:
Չնայած թե ստուգված բացառությունները և թե գործարկման ժամանակի բացառությունները ծրագրի կատարման ընթացքում անցանկալի երևույթ են, դրանք ունեն իրենց տարբերությունները: Ստուգված բացառությունների մշակումն իրականացվում է կոմպիլյատորի կողմից, բայց գործարկման ժամանակի բացառությունները՝ ոչ: Հետևաբար, ստուգված բացառությունները պետք է գցվեն կամ մշակվեն, որպեսզի կոդը կազմվի, բայց գործարկման ժամանակի բացառությունների հետ կապված նման պահանջ չկա:Հետևաբար, գործարկման ժամանակի բացառությունները սխալների հետ միասին պատկանում են չստուգված բացառությունների կատեգորիային:
Ստուգված բացառությունների թերությունն այն է, որ ծրագրավորողը պետք է կարգավորի այն, նույնիսկ եթե նա չգիտի, թե ինչպես դա անել: Այսպիսով, եթե ծրագրավորողը պարզապես նետում է նոր բացառություն՝ առանց բնօրինակը փաթաթելու, ապա սկզբնական բացառությանը պատկանող stack հետքը կկորչի: Այստեղ է, որ գործարկման ժամանակի բացառությունները հարմար են: Քանի որ գործարկման ժամանակի բոլոր բացառությունները կարող են մշակվել մեկ տեղում, այդպիսով ծրագրավորողները կարող են ավելի քիչ քանակությամբ կոդ գրել: Մյուս կողմից, քանի որ ստուգված բացառությունները պետք է բռնել, ծրագրավորողի համար անակնկալ չկա: Նա միշտ կիմանա, թե որ ստուգված բացառությունը կարող է արվել որոշակի մեթոդով: Հակառակ դրան, գործարկման ժամանակի տարբեր բացառություններ կարող են բացվել առանց ծրագրավորողի իմացության: