КампутарыПраграмаванне

Java: выключэння і іх апрацоўка

Любая праграма будзе працаваць стабільна толькі ў тым выпадку, калі яе зыходны код адладжаны, і ў ім адсутнічаюць умовы, якія могуць выклікаць непрадбачаныя сітуацыі. Працэс адлову магчымых збояў выконваецца на стадыі праграмавання. Для гэтага распрацоўшчык ўлічвае ўсе меркаваныя зыходы і спрабуе абмежаваць дзеянне памылкі такім чынам, каб яна не змагла парушыць працу праграмы або прывесці да яе краху.

Калі можа спатрэбіцца апрацоўка выключэнняў

У Java выключэння могуць быць выкліканыя ў выніку няправільнага ўводу дадзеных карыстачом, адсутнасці неабходнага для працы праграмы рэсурсу або раптоўнага адключэння сеткі. Для камфортнага выкарыстання створанага распрацоўшчыкам прыкладання, неабходна кантраляваць з'яўленне пазаштатных сітуацый. Спажывец не павінен чакаць завяршэння працы завісла праграмы, губляць дадзеныя ў выніку неапрацаваных выключэнняў або проста часта з'яўляюцца паведамленняў пра тое, што нешта пайшло не так.

Апрацоўка выключэнняў Java

Што неабходна ўлічваць? Мова Java валодае сваім убудаваным функцыяналам апрацоўкі выключэнняў. Вядома ж вялікі працэнт памылак адлоўліваецца яшчэ на стадыі кампіляцыі, калі сістэма аўтаматычна паведаміць аб тым, што выкарыстоўваць яе далей немагчыма. Але існуе і такі від выключэнняў, які ўзнікае падчас працы праграмы. Распрацоўшчык павінен здолець прадбачыць гэта і спраектаваць код такім чынам, каб ён не выклікаў памылкі, а апрацаваў яе адмысловым спосабам або перадаў кіраванне ў іншую галінку.

У Java такой адлоў выключэнняў навязваецца кампілятарам, таму тыповыя праблемы вядомыя і маюць сваю стандартную схему выканання.

тыповыя выключэння

Самым простым прыкладам, пры якім можна атрымаць выключэнне - гэта дзяленне. Нягледзячы на ўсю яго прастату, у выразе, у якасці дзельніка, можа апынуцца нуль, што прывядзе да памылкі. Добра, калі яго з'яўленне можна прадказаць раней і прадухіліць. Але такі варыянт даступны не заўсёды, таму адлоў выключэння трэба арганізаваць непасрэдна пры ўзнікненні «дзялення на нуль».

У Java механізм апрацоўкі перахопу памылкі выглядае так:

  • ў кучы ствараецца аб'ект выключэння, гэтак жа як і любы іншы;
  • натуральны ход праграмы перарываецца;
  • механізм выключэння спрабуе знайсці альтэрнатыўны спосаб працягу кода;
  • знайшоўшы месца бяспечнага выканання праграмы ў апрацоўшчыку, праца альбо адновіцца, альбо адбудзецца рэалізацыя выключэння асаблівым спосабам.

Найпросты прыклад стварэння памылкі можа выглядаць такім чынам:

if (a == null)

throw new NullPointerException ();

Тут пераменная a правяраецца на ініцыялізацыю, г.зн. не роўная Ці спасылка на аб'ект null. У выпадку, калі такая сітуацыя ўзнікла і патрэбна адмысловая апрацоўка, выкідваецца выключэнне з дапамогай throw new NullPointerException ().

Трохі падрабязнасцяў аб ключавых словах

Пры працы з выключэннямі часта даводзіцца выкарыстоўваць ключавыя словы Java для абазначэння таго ці іншага дзеяння. У дадзеным мове праграмавання іх пяць:

  • Try. Гэта ключавое слова ўжо сустракалася і азначае яно пераход у ўчастак кода, які можа згенераваць выключэнне. Блок абмяжоўваецца фігурнымі дужкамі {}.
  • Catch. Перахапляе патрэбны тып выключэння і апрацоўвае яго адпаведным чынам.
  • Finally. Дадзенае ключавое слова з'яўляецца дадатковым і служыць для выканання нейкага ўчастка кода, які неабходны ў любым выпадку, нават калі ні адно выключэнне ня перахоплена. Дадаецца непасрэдна пасля блока try.
  • Throw - дазваляе ствараць выключэння Java ў любым месцы кода.
  • Throws - ключавое слова, якое ставіцца ў сігнатуры метаду. Яно азначае, што наступны код можа выкінуць выключэнне Java названага тыпу. Такая пазнака служыць сігналам для распрацоўшчыкаў, што трэба мець на ўвазе - метад можа спрацаваць не так, як ад яго чакаюць.

Адлоў з дапамогай try

Выкід у Java выключэння, натуральна мяркуе, што яно будзе асаблівым чынам апрацавана. Зручней за ўсё гэта зрабіць, калі ўчастак кода адгароджаны ў нейкі блок. Які магчыма ўтрымлівае выключэнне. Пры выкананні такога кода віртуальная машына знойдзе неспадзяваны сітуацыю, зразумее, што знаходзіцца ў крытычным блоку і перадасць кіраванне ў ўчастак з апрацоўкай.

У Java код заварочваецца ў спецыяльны блок try, усярэдзіне якога можа быць згенеравана выключэнне. Такім чынам, у яго змяшчаецца адразу некалькі непрадбачаных сітуацый, якія будуць адлоўленыя ў адным месцы, не распаўзаючыся па кодзе.

Самы тыповы код з блокам апрацоўкі выглядае так:

try {

// Тут будзе вызначаны код, які можа спарадзіць выключэнне

} Catch (Тип_исключения_1 идентификатор_1) {

// Тут адбываецца апрацоўка выключэння, згодна з яго тыпу і умовам;

} Catch (Тип_исключения_2 идентификатор_2) {

// Тут адбываецца апрацоўка выключэння, згодна з яго тыпу і умовам;

}

Ключавое слова catch паведамляе аб тым, што код, падвергнуты праверцы на выключэнне, трэба апрацаваць так, як апісана далей, пры ўмове, што ён адпавядае яго тыпу. Ідэнтыфікатар можа выкарыстоўвацца ўнутры блока кода апрацоўкі як аргументы.

Finally

Як стала зразумела з папярэдняга раздзела, блокі catch ловяць выключэння і апрацоўваюць іх. Але вельмі часта ўзнікае сітуацыя, калі павінен выканацца нейкі код па-за залежнасці ад таго, ці былі адлоўленыя памылкі. Для гэтага існуе ключавое слова finally. Яно ўжываецца для павелічэння значэнняў розных лічыльнікаў, закрыцця файлаў або злучэнняў з сеткай.

У дадзеным участку прадстаўлены некалькі блокаў catch з прыдуманымі метадамі адлову выключэнняў. Да прыкладу, код, які змяшчаецца ў try спараджае неспадзяваны сітуацыю тыпу Cold. Тады ў кансоль будуць выведзены выразы «Caught cold!» І «Is that something to cheer about?». Гэта значыць блок finally выконваецца ў любым выпадку.

На самай справе спосаб пазбегнуць запуску finally існуе. Звязаны ён з завяршэннем працы віртуальнай машыны. Знайсці, як гэта рэалізаваць, можна на прасторах сеткі Інтэрнэт.

Ключавое слова throw

Throw генеруе выключэнне. Яго сінтаксіс выглядае так:

throw new NewException ();

Тут ствараецца новае выключэнне з тыпам NewException (). У якасці тыпу могуць выкарыстоўвацца ўжо ўваходзяць у стандартныя бібліятэкі Java класы і пэўныя раней распрацоўшчыкам ўласнай вытворчасці.

Такая канструкцыя ўваходзіць у апісанне якога-небудзь метаду, выклік якога затым павінен адбывацца ў рамках блока try, для таго, каб была магчымасць яго перахапіць.

Ключавое слова throws

Што рабіць, калі ў працэсе распрацоўкі паўстала сітуацыя, калі метад можа згенераваць выключэнне, але не ў стане правільна апрацаваць. Для гэтага ў сігнатуры метаду паказваецца слова throws і тып магчымага выключэння.

Гэтая пазнака з'яўляецца своеасаблівым паказальнікам для кліенцкіх распрацоўшчыкаў пра тое, што метад не здольны апрацаваць сваё ж выключэнне. Да таго ж, калі тып памылкі з'яўляецца правяраемым, то кампілятар прымусіць відавочна гэта пазначыць.

Try з рэсурсамі

У Java версіі 7 распрацоўшчыкі ўключылі такое важнае новаўвядзенне, як апрацоўка блока try з рэсурсамі.

Многія ствараемыя аб'екты ў Java, пасля іх выкарыстання павінны быць зачыненыя для эканоміі рэсурсаў. Раней даводзілася гэта ўлічваць і спыняць такія асобнікі ўручную. Зараз жа ў іх з'явіўся інтэрфейс AutoClosable. Ён дапамагае аўтаматычна зачыняць ужо скарыстаныя аб'екты, зьмешчаныя ў блок try. Дзякуючы такому падыходу пісаць код стала зручней, у яго чытальнасць значна павысілася.

Ўласныя класы выключэнняў Java

Стваральнікі апісванага мовы праграмавання ўлічылі многія аспекты пры праектаванні тыпаў непрадбачаных сітуацый. Аднак, усе варыянты зыходу падзей прадухіліць не атрымаецца, таму ў Java рэалізаваная магчымасць вызначэння сваіх уласных выключэнняў, падыходных менавіта пад патрэбы канкрэтнага кода.

Найпросты спосаб стварэння - ўспадкаваць ад найбольш прыдатнага да кантэксту аб'екта.

Тут адбылося спадчыну ад Exception, класа, які выкарыстоўваецца для вызначэння ўласных выключэнняў. У MyException маюцца два канструктара - адзін па змаўчанні, другі - з аргументам msg тыпу String.

Затым у public класе FullConstructors рэалізаваны метад f, сігнатура якога змяшчае throws MyException. Гэта ключавое слова азначае, што f можа выкінуць выключэнне Java тыпу MyException. Далей у целе метаду вырабляецца выснову тэкставай інфармацыі ў кансоль і ўласна сама генерацыя MyException, з дапамогай throw.

Другі метад трохі адрозніваецца ад першага тым, што пры стварэнні выключэння, яму перадаецца радковы параметр, які будзе адлюстраваны ў кансолі пры адлове. У main відаць, што f () і g () змешчаны ў блок праверкі try, а ключавое слова catch наладжана на адлоў MyException. Вынікам апрацоўкі будзе выснова паведамленні пра памылку ў кансоль:

Такім чынам атрымалася дадаць выключэння Java, створаныя ўласнаручна.

архітэктура выключэнняў

Як і ўсе аб'екты ў Java, выключэння таксама ўспадкоўваюцца і маюць іерархічную структуру. Каранёвым элементам усіх памылак, выкіданых у гэтай мове праграмавання з'яўляецца клас java.lang.Throwable. Ад яго ўспадкоўваюцца два выгляду - Error і Exception.

Error - апавяшчае аб крытычных памылках і ўяўляе сабой Неправяральныя выключэння Java. Перахоп і апрацоўка такіх дадзеных у большасці выпадкаў адбываецца на стадыі распрацоўкі і не мае патрэбу ва ўкараненні ў код канчатковага прыкладання.

Найбольш часта выкарыстоўваным класам для стварэння і аналізу выключэнняў служыць Exception. Які, у сваю чаргу, дзеліцца на некалькі галінак, у тым ліку RuntimeException. Да RuntimeException ставяцца выключэння часу выканання, гэта значыць якія адбываюцца падчас працы праграмы. Усе атрыманыя ў спадчыну ад яго класы з'яўляюцца пiсаць словы.

Часта встречаемые выключэння

У Java выключэння, спіс якіх прадстаўлены ніжэй, выкарыстоўваюцца найбольш часта, таму варта апісаць кожны з іх падрабязней:

  • ArithmeticException. Сюды ўваходзяць памылкі звязаныя з арыфметычнымі аперацыямі. Самы яскравы прыклад - дзяленне на нуль.
  • ArrayIndexOutOfBoundsException - зварот да нумара элемента масіва, які перавышае агульную яго даўжыню.
  • ArrayStoreException - спроба прысвоіць элементу масіва несумяшчальнага тыпу.
  • ClassCastException - спроба няправільнага прывядзення аднаго тыпу да іншага.
  • IllegalArgumentException - выкарыстанне няправільнага аргументу ў выкліку метаду.
  • NegativeArraySizeException - выключэнне пры стварэнні масіва адмоўнага памеру.
  • NullPointerException - няправільнае выкарыстанне спасылкі на null.
  • NumberFormatException - узнікае пры няправільным пераўтварэнні радкі ў лік.
  • UnsupportedOperationException - аперацыя не падтрымліваецца.

Дадзеныя прыклады ўяўляюць сабой Неправяральныя тыпы выключэнняў Java. А вось так выглядаюць правяраныя:

  • ClassNotFoundException - клас не знойдзены.
  • IllegalAcccessException - абмежаванне доступу да класа.
  • InterruptedException - перапыненне працы патоку.
  • NoSuchFieldException - не існуе патрабаванае поле.

інтэрпрэтацыя выключэнняў

Гаворачы аб часта сустракаемых выключэннях трэба адзначыць, што іх інтэрпрэтацыя ў ходзе распрацоўкі, можа быць успрынята няправільна. Далей ідзе невялікі спіс, які тлумачыць больш падрабязна, калі можа ўзнікнуць непрадбачаная сітуацыя.

NullPointerException. Самым першым выпадкам, калі ўзнікае выключэнне, з'яўляецца зварот да спасылцы на аб'ект, якая роўная null. Таксама гэта распаўсюджваецца на метады нулявога асобніка класа. NullPointerException можа быць кінуты і ў выпадку атрымання даўжыні масіва роўнай null. Пазбегнуць такіх сітуацый дапаможа перыядычная праверка аб'ектаў на null.

ArrayIndexOutOfBoundsException. Любая праграма не можа існаваць без выкарыстання масіваў. Адпаведна, часты зварот да іх можа спараджаць і памылкі. Узнікае выключэнне, калі распрацоўшчык спрабуе звярнуцца да элемента масіва, які адсутнічае ў спісе індэксаў. Напрыклад, запытваюцца значэнне вышэй даўжыні або менш за нуль. Вельмі часта з'яўляецца ў выніку таго, што лік у масіве пачынаецца з нуля.

высновы

Апрацоўка выключэнняў Java - магутны інструмент асяроддзя, які значна палягчае працу праграміста і дазваляе яму ствараць чысты і пазбаўлены памылак код. Ад таго, наколькі плаўна і стабільна функцыянуе прыкладанне, залежыць статус і рэпутацыя кампаніі-распрацоўніка.

Вядома, у больш ці менш простых праграмах адсачыць пазаштатныя сітуацыі значна прасцей. А вось у вялікіх аўтаматызаваных комплексах на некалькі сотняў тысяч радкоў такое магчыма толькі ў выніку правядзення працяглай адладкі і тэсціравання.

За Java выключэння, памылкі ад якіх узнікаюць у некаторых прыкладаннях, асобныя кампаніі прапануюць ўзнагароджанне пры іх знаходжанні энтузіястамі. Асабліва цэняцца тыя, якія выклікаюць парушэнне палітыкі бяспекі праграмнага комплексу.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 be.delachieve.com. Theme powered by WordPress.