Проверено изключение срещу изключение по време на работа
Изключение правят специални видове събития, които могат да нарушат нормалния програмен поток. Името изключение идва от „изключително събитие“. Хвърлянето на изключение е процесът на създаване на обект на изключение и предаването му на системата за изпълнение. Когато изпълняващата система получи обект за изключение, тя ще се опита да намери някой, който да се справи с него в стека на повикванията, като го обходи в обратен ред (в който методите бяха извикани). Системата за изпълнение е успешна, ако намери метод с манипулатор на изключения. Манипулаторът на изключения е блок от код, който може официално да обработи споменатото изключение. Ако изпълняващата система намери подходящ манипулатор, тя ще предаде обекта за изключение на манипулатора. Това се нарича улавяне на изключението. Ако обаче изключението не може да бъде обработено, програмата ще се прекрати. В Javaизключения наследяват от клас Throwable. Проверени изключения са изключения, при които обработката се налага от компилатора. Изключенията по време на изпълнение са вид изключения, които не се проверяват от компилатора.
Какво е отметка за изключение?
Проверените изключения са или обекти от класа java.lang.exception, или неговите подкласове (с изключение на java.lang. RuntimeException и неговите подкласове). Проверените изключения се „проверяват“по време на компилация. Това означава, че програмистът трябва или да хване или да хвърли тези изключения, или компилацията би се оплакала (причинявайки грешка на компилатора). Поради тази причина много проверени изключения са много добре познати на програмистите. Например IOException и неговите подкласове са проверени изключения и винаги, когато програмистът се занимава с достъп или модификация на файл, компилаторът проверява дали всички възможни IOExceptions се грижат от програмиста.
Какво е Runtime Exception?
Изключенията по време на изпълнение се състоят от java.lang. RuntimeException и всички негови подкласове. Теоретично казано, те служат на същата цел като проверените изключения и могат да бъдат хвърляни или обработвани като проверени изключения, но обработката на тях не се налага от компилатора. Следователно изключенията по време на изпълнение принадлежат към семейството на непроверени изключения. NullPointerException, NumberFormatEception, ClassCastException и ArrayIndexOutOfBoundsException са често срещани изключения по време на изпълнение в Java.
Каква е разликата между Checked Exception и Runtime Exception?
Въпреки че както проверените изключения, така и изключенията по време на изпълнение са нежелана поява по време на изпълнението на програма, те имат своите различия. Обработката на проверени изключения се налага от компилатора, но изключенията по време на изпълнение не са. Следователно проверените изключения трябва да бъдат хвърлени или обработени, за да се компилира кодът, но няма такова изискване по отношение на изключенията по време на изпълнение. Следователно, изключенията по време на изпълнение принадлежат към непроверена категория изключения, заедно с грешки.
Недостатък при проверени изключения е, че програмистът трябва да се справи с него, дори и да не знае как да го направи. Така че, ако програмистът просто изхвърли ново изключение, без да опакова оригинала, проследяването на стека, принадлежащо на оригиналното изключение, ще бъде загубено. Това е мястото, където изключенията по време на работа са полезни. Тъй като всички изключения по време на изпълнение могат да се обработват на едно място, така програмистите могат да напишат по-малко количество код. От друга страна, тъй като проверените изключения трябва да бъдат уловени, няма изненада за програмиста. Тя винаги ще знае кое проверено изключение може да бъде хвърлено по определен метод. Противно на това, различни изключения по време на изпълнение могат да бъдат хвърлени без знанието на програмиста.