Erinevus erandi ja vea vahel

Erinevus erandi ja vea vahel
Erinevus erandi ja vea vahel

Video: Erinevus erandi ja vea vahel

Video: Erinevus erandi ja vea vahel
Video: Фартук на кухне своими руками. Все этапы. ПЕРЕДЕЛКА ХРУЩЕВКИ от А до Я #30 2024, Juuli
Anonim

Erand vs viga

Programmi töötamise ajal ilmneb kindlasti ootamatu käitumine. See võib olla tingitud eranditest või vigadest. Erandiks on sündmused, mis võivad häirida tavapärast programmi kulgu. Vead on tingimused, mida võib pidada parandamatuks. Erandid on enamasti seotud rakenduse endaga, vead aga süsteemiga, milles programm töötab.

Mis on erand?

Erand on sündmus, mis võib häirida tavapärast saatevoogu. Nime erand pärineb "erakorralisest sündmusest". Erandi loomine on erandiobjekti loomise ja selle käitussüsteemile üleandmise protsess. Erandi objekt luuakse meetodil, milles erand toimus. Erandobjekt sisaldab kasulikku teavet, nagu erandi tüüp ja kirjeldus. Kui käitussüsteem võtab vastu erandiobjekti, proovib see leida kedagi, kes seda kõnepakist käsitleks, läbides selle vastupidises järjekorras (milles meetodid kutsuti). Kõnede pinu on järjestatud loend meetoditest, mis kutsuti välja enne meetodit, milles erand toimus. Käitusaegne süsteem on edukas, kui see leiab erandikäsitlejaga meetodi. Erandi töötleja on koodiplokk, mis saab nimetatud erandit ametlikult käsitleda. Kui käitussüsteem leiab sobiva töötleja (st erandi tüüp ühtib käsitletava tüübiga), edastab see erandiobjekti käitlejale. Seda nimetatakse erandi tabamiseks. Kui aga erandit ei saa käsitleda, siis programm lõpetatakse. Java puhul pärivad erandid klassist „Throwable class”. NullPointerException ja ArrayIndexOutOfBoundsException on Javas kaks levinumat erandit.

Mis on viga?

Viga on seisund, mida võib pidada parandamatuks, näiteks programm, mis nõuab saadaolevast suuremat mälumahtu. Neid vigu ei saa käitusajal käsitleda. Kui ilmneb tõrge, programm lõpetab töö. Javas pärivad vead klassist Throwable. Vead tähistavad tavaliselt tõsiseid probleeme, mida programmeerija (või rakendus) ei peaks püüdma tabada. Vead on lihts alt ebanormaalsed tingimused, mille tekkimist tavatingimustes kunagi ei eeldata ja seetõttu pole neid ette näha. Näiteks OutOfMemoryError, StackOverflowError ja ThreadDead on sellised vead. Meetoditel ei tohiks kunagi olla vigade töötlejaid.

Mis vahe on erandil ja veal?

Nii vead kui ka erandid on programmi täitmise ajal soovimatud esinemised. Siiski on neil peamised erinevused. Programmeerija võib ette näha erandeid, samas kui viga on raske ette näha. Erandeid saab märkida või märkimata jätta. Kuid vead on alati kontrollimata. Erandid näitavad tavaliselt programmeerija põhjustatud viga. Siiski tekivad vead süsteemivea või ressursi sobimatu kasutamise tõttu. Seetõttu tuleks erandeid käsitleda rakenduse tasemel, vigade eest aga süsteemi tasandil (ainult võimalusel). Pärast erandi käsitlemist naasete kindlasti tavapärase programmivoo juurde. Kuid isegi kui viga tabatakse, ei pruugi programmeerija üldse teada, kuidas sellega toime tulla. Erinev alt traditsioonilisest veakäsitlusest võimaldavad erandid eraldada veakäsitluse koodi tavalisest koodist.

Soovitan: