Skelbimas
Kaip programavimo naujokas Kaip išmokti programavimo be stresoGalbūt nusprendėte užsiimti programavimu, nesvarbu, ar tai būtų karjera, ar tik pomėgis. Puiku! Bet galbūt jūs pradedate jaudintis. Ne taip puiku. Tai padės palengvinti jūsų kelionę. Skaityti daugiau , sąvoka išimties tvarkymas gali būti sunku apvynioti galvą. Ne tai, kad pati koncepcija yra sunki, bet dėl terminijos ji gali atrodyti labiau pažengusi nei yra. Tai yra tokia galinga savybė, kad gali būti piktnaudžiaujama ir piktnaudžiaujama.
Šiame straipsnyje sužinosite, kas yra išimtys, kodėl jos svarbios, kaip jas naudoti ir bendrų klaidų, kurių reikia išvengti. Labiausiai šiuolaikinės kalbos 6 lengviausios programavimo kalbos, kurias reikia išmokti pradedantiesiemsMokymasis programuoti yra ne tik tinkamos kalbos suradimas, bet ir redagavimo procesas. Čia yra šešios populiariausios programavimo kalbos pradedantiesiems. Skaityti daugiau turite tam tikrą išimčių tvarkymą, taigi, jei jūs kada nors pereiti iš „Java“ 7 naudingi patarimai, kaip įvaldyti naują programavimo kalbą Gerai būti priblokštam, kai moki koduoti. Tikriausiai pamiršite dalykus taip greitai, kaip juos išmoksite. Šie patarimai gali padėti geriau išsaugoti visą tą naują informaciją. Skaityti daugiau , daugumą šių patarimų galite pasiimti su savimi.
„Java“ išimčių supratimas
Java, an išimtis yra objektas, nurodantis, kad kažkas neįprasto (arba „išskirtinio“) įvyko jūsų programos vykdymo metu. Tokių išimčių yra mesti, o tai iš esmės reiškia, kad kuriamas išimties objektas (panašiai kaip klaidos „iškeliamos“).
Grožis yra tai, kad tu gali pagauti išmestos išimtys, leidžiančios susitvarkyti su nenormalia būkle ir leisti jūsų programai toliau veikti taip, lyg nieko blogo nepavyktų. Pvz., Nors nulinis žymiklis C gali sugadinti jūsų programą, „Java“ leidžia mesti ir pagauti „NullPointerException“
s prieš null kintamąjį turi galimybę sukelti avariją.
Atminkite, kad išimtis yra tik objektas, tačiau turi vieną svarbią savybę: ji turi būti išplėsta nuo Išimtis
klasė ar bet kuris poklasis Išimtis
. Nors „Java“ yra visų rūšių integruotų išimčių, jei norite, taip pat galite sukurti savo. Kai kurie iš dažniausios „Java“ išimtys apima:
„NullPointerException“
„NumberFormatException“
NelegalArgumentException
„RuntimeException“
NelegaliStateException
Taigi, kas nutinka, kai išmetate išimtį?
Pirmiausia „Java“ naudoja neatidėliotiną metodą, norėdama sužinoti, ar yra kodas, kuris tvarko jūsų išmestą išimtį. Jei prižiūrėtojo nėra, jis pažvelgs į metodą, kuris paskatino dabartinį metodą, norėdamas sužinoti, ar jame nėra rankenos. Jei ne, žiūrima į metodą, kuris paskambino kad metodas, o tada kitas metodas ir kt. Jei išimtis netaikoma, programa spausdina kamino pėdsaką ir sugenda. (Tiesą sakant, tai yra daugiau niuansų nei paprasčiausias gedimas, tačiau tai yra išplėstinė tema, kuri nepatenka į šio straipsnio taikymo sritį.)
A kamino pėdsakas yra visų metodų, kuriuos „Java“ aplenkė ieškant išimties tvarkytojo, sąrašas. Štai kaip atrodo krūvos pėdsakas:
Išimtis „java.lang“ gijoje. „NullPointerException“ svetainėje com.example.myproject. „Book.getTitle“ („Book.java“: 16) svetainėje com.example.myproject. „Author.getBookTitles“ (Author.java: 25) svetainėje com.example.myproject. „Bootstrap.main“ („Bootstrap.java“: 14)
Mes galime daug iš to pasiginčyti. Pirma, išmesta išimtis buvo a „NullPointerException“
. Tai įvyko getTitle ()
metodas „Book.java“ 16 eilutėje. Tas metodas buvo vadinamas nuo „getBookTitles“ ()
On.java 25 eilutėje. Tai metodas buvo iškviestas iš pagrindinis ()
„Bootstrap.java“ 14 eilutėje. Kaip matote, žinodami visa tai palengvina derinimo procesą.
Bet vėlgi, tikrasis išimčių pranašumas yra tas, kad jūs galite „sutvarkyti“ nenormalią būklę sugaudami išimtį, nustatydami reikalus teisingai ir atnaujindami programą nesugadindami.
„Java“ išimčių naudojimas kode
Tarkime, jūs turite someMethod ()
kuris užima sveiką skaičių ir vykdo logiką, kuri gali nutrūkti, jei sveikasis skaičius yra mažesnis nei 0 arba didesnis nei 100. Tai gali būti gera vieta išimtims išmesti:
public void someMethod (vidinė vertė) {if (reikšmė <0 || reikšmė> 100) {mesti naują NelegalArgumentException
(); } //... }
Norėdami sugauti šią išimtį, turite eiti kur someMethod ()
yra vadinamas ir naudokite „pabandykite pagauti“ blokas:
public void callMethod () {pabandykite {someMethod (200); someOtherMethod (); } pagauti (IllegalArgumentException e) {// čia tvarkyti išimtį} //... }
Viskas per bandyti blokas vykdys eilės tvarka, kol nebus išmesta išimtis. Kai tik išimama išimtis, visi paskesni teiginiai praleidžiami ir programos logika iškart pereina į pagauti blokuoti.
Mūsų pavyzdyje mes įeiname į bandymo bloką ir iškart paskambiname someMethod ()
. Kadangi 200 nėra 0–100, an NelegalArgumentException
yra mestas. Tai iškart baigiasi someMethod ()
, praleidžia likusią logiką bandymo bloke (someOtherMethod ()
niekada nėra vadinamas) ir atnaujina vykdymą sugavimo bloke.
Kas nutiktų, jei mums paskambintų „someMethod“ (50)
vietoj to? NelegalArgumentException
niekada nebus mestas. someMethod ()
vykdytų kaip įprasta. Bandymo blokas būtų vykdomas kaip įprasta, skambinant someOtherMethod ()
kai someMethod () užbaigiamas. Kada someOtherMethod ()
baigiasi, sugavimo blokas bus praleistas ir callMethod ()
tęstųsi.
Atminkite, kad viename bandymo bloke galite turėti kelis sugavimo blokus:
public void callMethod () {pabandykite {someMethod (200); someOtherMethod (); } pagauti (IllegalArgumentException e) {// tvarkyti čia pateiktą išimtį} pagauti (NullPointerException e) {// tvarkyti išimtį čia} //... }
Taip pat atkreipkite dėmesį, kad neprivaloma pagaliau blokas taip pat egzistuoja:
public void method () {pabandykite {//... } laimikis (išimtis e) {//... } pagaliau { //... } }
Kodas galutiniame bloke yra visada įvykdytas nesvarbu. Jei bandymo bloke turite grąžinimo pareiškimą, paskutinis blokas vykdomas prieš grįžtant iš metodo. Jei įmesite kitą išimtį į sugavimo bloką, paskutinis blokas įvykdomas prieš mesti išimtį.
Galutinį bloką turėtumėte naudoti, kai turite objektų, kuriuos reikia išvalyti iki metodo pabaigos. Pvz., Jei atidarėte failą bandymo bloke ir vėliau išmetėte išimtį, galutinis blokas leidžia uždaryti failą prieš išeinant iš metodo.
Atminkite, kad jūs galite turėti galutinį bloką be blokavimo bloko:
public void method () {pabandykite {//... } pagaliau { //... } }
Tai leidžia jums atlikti bet kokį būtiną valymą, tuo pačiu leidžiant naudoti išimtis, kad būtų galima išplėsti metodą pakvietimų kamino (t. y. nenorite čia tvarkyti išimties, bet vis tiek turite sutvarkyti Pirmas).
Patikrinta vs. Nepažymėtos „Java“ išimtys
Skirtingai nuo daugelio kalbų, „Java“ išskiria patikrintos išimtys ir nepatikrintos išimtys (pvz., C # turi tik nepatikrintas išimtis). Patikrinta išimtis privalo būti įtrauktas į metodą, kai išmetama išimtis arba kodas nebus sudaromas.
Norėdami sukurti pažymėtą išimtį, pratęskite nuo Išimtis
. Norėdami sukurti nepažymėtą išimtį, pratęskite nuo „RuntimeException“
.
Bet koks metodas, kuriuo atliekama patikrinta išimtis, turi būti pažymėtas metodo parašu naudojant meta raktinis žodis. Nuo „Java“ įdiegimo IOException
yra patikrinta išimtis, šis kodas nebus sukompiliuotas:
public void wontCompile () {//... if (someCondition) {mesti naują IOException (); } //... }
Pirmiausia turite pareikšti, kad tai patikrinta išimtis:
public void willCompile () išmeta IOException {//... if (someCondition) {mesti naują IOException (); } //... }
Atminkite, kad metodas gali būti deklaruojamas kaip išmetimo išmetimas, tačiau iš tikrųjų niekada neišmeskite išimties. Vis dėlto išimtį vis tiek reikės sugriebti, kitaip kodas nebus sudarytas.
Kada turėtumėte naudoti pažymėtas ar nepažymėtas išimtis?
Oficialioje „Java“ dokumentacijoje yra: puslapis šiuo klausimu. Skirtumą apibendrina glausta nykščio taisyklė: „Jei pagrįstai galima tikėtis, kad klientas pasveiks po išimties, padarykite tai patikrinta išimtimi. Jei klientas nieko negali padaryti, kad susigrąžintų išimtį, padarykite tai nepatikrinta išimtimi “.
Tačiau šios gairės gali būti pasenusios. Viena vertus, tai daro patikrintos išimtys rezultatas yra patikimesnis kodas 10 patarimų, kaip rašyti švaresnį ir geresnį kodąParašyti švarų kodą atrodo lengviau, nei yra iš tikrųjų, tačiau privalumai to verti. Štai kaip šiandien galite pradėti rašyti švaresnį kodą. Skaityti daugiau . Kita vertus, jokia kita kalba nepatikrino išimčių tokiu pačiu būdu kaip „Java“ - tai rodo du dalykus: viena, ši funkcija nėra pakankamai naudinga, kad ją pavogtų kitos kalbos, ir, antra, jūs galite visiškai be jos gyventi juos. Be to, pažymėtos išimtys nėra gražios, naudodamos „Java 8“ įvestas lambda išraiškas.
„Java“ išimčių naudojimo gairės
Išimtys yra naudingos, tačiau lengvai jomis piktnaudžiaujama. Čia yra keletas patarimų ir geriausios praktikos pavyzdžių, kurie padės jums išvengti jų netvarkos.
-
Pirmenybę teikite konkrečioms išimtims, o ne bendroms išimtims. Naudokite
„NumberFormatException“
perNelegalArgumentException
jei įmanoma, naudokite kitaipNelegalArgumentException
per„RuntimeException“
kai įmanoma. -
Niekada neimk
Išmetama
!Išimtis
klasė iš tikrųjų plečiasiIšmetama
, o sugavimo blokas iš tikrųjų veikiaIšmetama
ar bet kuri klasė, kuri tęsiasi. TačiauKlaida
klasė taip pat plečiasiIšmetama
, ir jūs niekada nenorite pagautiKlaida
nesKlaida
s nurodo rimtas neatitaisomas problemas. -
Niekada neimk
Išimtis
!Pertraukta išimtis
pratęsiaIšimtis
, taigi bet koks blokas, kuris sugaunaIšimtis
taip pat pagausPertraukta išimtis
, ir tai yra labai svarbi išimtis, su kuria nesinori suklaidinti (ypač naudojant daugiaskiemenes programas), nebent jūs žinote, ką darote. Jei nežinote, kurią išimtį gaudyti, apsvarstykite galimybę nieko negauti. -
Norėdami palengvinti derinimo veiksmus, naudokite aprašomuosius pranešimus. Kai išmesite išimtį, galite pateikti a
Stygos
pranešimas kaip argumentas. Šį pranešimą galima pasiekti sugavimo bloke naudojant„Exception.getMessage“ ()
metodas, tačiau jei išimtis niekada nebus pagauta, pranešimas taip pat bus rodomas kaip krūvos pėdsakas. -
Stenkitės netraukti ir nekreipti dėmesio į išimtis. Norėdami išvengti nepatogumų, susijusių su patikrintomis išimtimis, daug naujokų ir tingių programuotojų sukurs sugavimo bloką, bet paliks jį tuščią. Blogai! Visada elkitės maloniai, bet jei negalite, bent jau atsispausdinkite krūvos pėdsaką, kad žinotumėte, jog išimtis buvo išmesta. Tai galite padaryti naudodami
Išimtis.printStackTrace ()
metodas. - Saugokitės perdėto išimčių taikymo. Kai turi plaktuką, viskas atrodo kaip vinis. Pirmą kartą sužinoję apie išimtis, galite jausti pareigą viską paversti išimtimi... iki taško, kur didžioji jūsų programos valdymo srauto dalis yra susijusi su išimčių tvarkymu. Atminkite, kad išimtys yra skirtos „išskirtiniams“ atvejams!
Dabar turėtumėte būti pakankamai patogūs su išimtimis, kad suprastumėte, kas jie yra, kodėl jie naudojami ir kaip įtraukti juos į savo kodą. Jei ne iki galo suprantate sąvoką, viskas gerai! Man prireikė šiek tiek laiko, kol „paspaudžiau“ mano galvoje, taigi nesijauti, kad tau reikia skubėti 6 požymiai, kad jums nesinori būti programuotojuNe visi suprantami kaip programuotojai. Jei nesate visiškai tikri, kad turite būti programuotoju, štai keli ženklai, kurie gali nukreipti jus teisinga linkme. Skaityti daugiau . Neskubėk.
Turite klausimų? Žinote kitų patarimų, susijusių su išimtimis, kurių praleidau? Dalykitės jomis komentaruose žemiau!
Joelis Lee turi B.S. Kompiuterijos mokslas ir daugiau nei šešerių metų profesinio rašymo patirtis. Jis yra „MakeUseOf“ vyriausiasis redaktorius.