Страхувайте се от грешки, но не ги пишете на Java! Вероятно вече знаете някои неща за изключенията в Java . Днес поне повърхностните познания ще ви бъдат от полза. Ще анализираме класа Error и специален тип изключение, което плаши много хора, когато се появи в техните следи на стека.
На върха на йерархията на изключенията на Java е класът Throwable , който има два наследника:
- Изключение , което е отговорно за грешките във вашата програма.
- И нашият герой за днес — Error , който е отговорен за грешките в JVM.
Струва си да се спомене, че това вероятно дори не са грешки в codeирането, а по-скоро проблеми, които обикновено не зависят от разработчика.
Какво да правим с грешка
Когато улавяте "грешки", не можете да извършвате ниHowви действия в catch блока, освен регистриране , тъй като говорим за проблеми в самата JVM.
Регистрирането е добро: когато получите грешка по време на изпълнение, можете да погледнете регистрационните файлове, да видите причината и да знаете Howво да поправите.
Тъй като не знаете Howъв вид грешка може да получите, когато пишете своя code, няма смисъл да пишете конкретен тип в блока catch . Използването на самия клас Error също не е най-доброто решение, тъй като в този случай ще уловите само грешки.
Съответно, по-добре е да използвате класа Throwable , който може да прихваща Howто Error , така и Exception . Как изглежда това на практика?
Не е добре да пишете code по този начин: |
---|
|
Писането на code като този също не е добре: |
---|
|
Но code като този е ОК: |
---|
|
Втората опция за обработка на грешки е да ги хвърлите по-високо, след като декларирате клауза за хвърляния на метода. Тази техника се използва, когато вашият code теоретично може да изведе грешка и искате да предупредите всички, които биха могли да използват вашия code, така че да могат да се справят правилно с грешката.
Често срещани грешки
Някои от най-популярните грешки са класовете OutOfMemoryError и StackOverflowError .
OutOfMemoryError често се появява, когато програмата няма достатъчно памет за създаване на обекти и събирачът на отпадъци не може да се справи. Резултатът е OutOfMemoryError .
Java не ви позволява ръчно да изтривате обекти, за да предотвратите изтичане на памет, но можете да избегнете изхвърлянето, за да не претоварвате събирача на отпадъци и да не претрупвате купчината.
Например code като този ще създаде много боклук в паметта:
while (true) {
new Object();
}
Втората грешка, за която искам да ви кажа, е StackOverflowError , която се хвърля, когато стекът препълва. Тъй като стекът съхранява главно локални променливи, параметри и извиквания на методи, рекурсията (or рекурсивно извикване на метод) е много честа причина за тази грешка:
public void foo() {
foo();
}
За да избегнат проблеми по време на изпълнение на програмата, съвременните IDE често предупреждават за рекурсивно извикване на методи.
Не можете да коригирате програма, която извежда грешки , но можете да напишете code, който няма да изведе грешка и да счупи вашата програма. Гледайте Howво правите с паметта, създавайте обекти внимателно и извиквайте методите правилно. Ако направите това, тогава ще имате по-малко проблеми във вашия code.
Разлика между типовете грешка и изключение
Грешка | Изключение |
---|---|
Не може да се коригира в catch block | Може да се обработва в блок за улавяне |
Не се появява по време на компorране | Може да бъде уловен по време на компorране |
Проблеми в JVM | Проблеми в логиката на codeа |
Всички грешки не са отметнати | проверени и непроверени |
Не можете да избегнете изключенията в Java, но не трябва да се страхувате от тях. Просто трябва да разберете Howво представлява всеки тип и да знаете How да боравите с него. Това е всичко за днес! Ще се видим!
GO TO FULL VERSION