Java: изключение и обработката им

Всяка програма ще работи стабилно само ако нейният изходен код се коригира и няма условия, които могат да причинят непредвидени ситуации. Процесът на улавяне на възможни неуспехи се извършва на етапа на програмиране. За тази цел разработчикът взема предвид всички предвидими резултати и се опитва да ограничи грешката по такъв начин, че да не може да прекъсне програмата или да причини срив.

Когато може да се изисква обработка на изключения

В Java изключенията могат да бъдат причинени от неправилно въвеждане от потребителя, липса на ресурсен ресурс, необходим за работата на програмата, или внезапно спиране на мрежата. За удобното използване на създадената от разработчика програма е необходимо да се контролира появата на извънредни ситуации. Потребителят не трябва да изчаква изключването на програмата за завеса да приключи, да загуби данни в резултат на суровите изключения или просто да забележи, че нещо се е объркало.


Обработка на изключения на Java

Какво да се вземе предвид? Java езикът има своя собствена вградена функционалност за обработка на изключения. Разбира се, голям процент от грешките са уловени още на етапа на компилация, когато системата автоматично обявява, че не е възможно да се използва по-нататък. Но има и вид изключение, което се случва, когато програмата работи. Разработчикът трябва да може да предвижда това и да проектира кода по такъв начин, че да не причинява грешка, но да го обработва по специален начин или да предава управлението на друг.клон В Java този вид изключение се налага от компилатора, така че типичните проблеми са известни и имат своя собствена стандартна схема на изпълнение.

Типични изключения

Най-простият пример, при който може да се получи изключение, е разделянето. Въпреки цялата му простота, в израз, като делител може да бъде нула, което ще доведе до грешка. Е, ако външният му вид може да се предскаже и предотврати. Но тази опция не винаги е на разположение, така че трябва да се организира незабавно изключение, когато има "нулево разделение".


В Java механизмът за обработване на грешката изглежда така:
  • в отделението се създава обект на изключване, както и всеки друг;
  • естественият ход на програмата се прекъсва;
  • механизмът за изключване се опитва да намери алтернативен начин за разширяване на кода;
  • намиране на безопасното изпълнение на програмата в процесора, работата или ще бъде възстановено, или прилагането на изключение по специален начин.
  • Най-простият пример за грешка може да изглежда така: if (a == null) хвърля нов NullPointerException (); Тук променливата a се проверява за инициализация, т.е. не е равна на препратката към обекта null. Ако възникне такава ситуация и се изисква специална обработка, изключване се изхвърля с хвърляне на NullPointerException ().

    Някои подробности относно ключовите думи

    Когато се занимавате с изключения, често трябва да използвате ключови думи Java, за да обозначите действие. В този език за програмиране има пет:
  • Опитайте. Тази ключова дума вече е изпълнена и означава, че това е преход към кодова зона, която можегенерира изключение. Блокът е фигурни скоби {}.
  • Улов. Пресича необходимия тип изключение и го обработва съответно.
  • Накрая. Тази ключова дума е незадължителна и служи за изпълнение на всяка област на код, която е необходима във всеки случай, дори ако не се прекъсне изключение. Веднага след блока опитайте.
  • Throw - позволява ви да създавате изключване на Java на всяко място от кода.
  • Хвърля - ключът, който се поставя в подписа на метода. Това означава, че следният код може да хвърли изключение към определен тип Java. Този етикет служи като сигнал за разработчиците, което трябва да се има предвид - методът може да не работи така, както се очаква.
  • Взето с опит

    Изключение в Java, разбира се, предполага, че то ще бъде специално обработено. Това е най-удобно за това, ако областта на кода е блокирана в блок. Което може да съдържа изключение. Когато изпълнява такъв код, виртуалната машина ще намери непредвидена ситуация, ще разбере, че е в критичен блок и предава контрола на областта с обработването.
    Java кодът се опакова в специален блок try, в който може да се генерира изключение. По този начин той е поставил няколко непредвидени ситуации едновременно, които ще бъдат заловени на едно място, без да пробива кода. Най-типичният код с обработващия елемент изглежда така: try {//Това ще идентифицира кода, който може да генерира изключението} catch (Type_exclusion_1 identifier_1) {//Това обработване на изключението се извършва според неговия тип и условия; } catch (Exception type_2)identifier_2) {//Тук обработката на изключението се извършва в зависимост от нейния вид и условия; } Ключовата дума catch указва, че кодът на изключението трябва да бъде обработен, както е описано по-долу, при условие че съответства на неговия тип. Идентификационният номер може да се използва в блока за обработващ код като аргументи.

    Накрая

    Както стана ясно от предходната глава, изключенията от улова на улов на блок и обработването им. Но много често възниква ситуация, когато кодът трябва да премине, независимо дали грешките са заловени. За тази цел най-накрая има ключова дума. Той се използва за увеличаване на стойностите на различни броячи, затваряне на файлове или мрежови връзки.
    В този раздел има няколко блока на улов с фиктивни изключения за улов. Например, кодът, съдържащ се в try, генерира непредсказуем случай на студ. Тогава изразите "Хванат студ!" И "Това ли е нещо, за което да се развеселите?" Ще бъдат показани в конзолата. Това означава, че блокът най-накрая се изпълнява във всеки случай. Всъщност, накрая има начин да се избегне изстрелването. Свързано е с завършването на виртуалната машина. Намирането на начините за нейното прилагане може да бъде намерено в интернет.

    Хвърлям ключова дума

    Хвърлям генерира изключение. Синтаксисът изглежда така: хвърли нов NewException (); Това създава ново изключение с типа NewException (). Като тип вече може да се използва в стандартните класове Java библиотеки и предварително дефинирани от разработчика на собственото им производство. Такава конструкция е включена в описанието на всеки метод, чието предизвикателство трябва да възникне в рамките на опита, за да бъдевъзможност да го прихванем.

    Хвърляния по ключови думи

    Какво да правите, ако има някаква ситуация в процеса на проектиране, когато един метод може да генерира изключение, но не може да го обработи правилно. За тази цел в подписването на метода се посочват думите хвърляния и видът на възможното изключване. Този етикет е своеобразно ръководство за разработчиците на клиенти, че методът не е в състояние да обработи собственото си изключение. Освен това, ако типът грешка е проверен, компилаторът ще го принуди да я определи изрично.

    Опитайте с ресурси

    В Java 7 разработчиците са включили такова важно нововъведение като обработка на блока try с ресурси. Много от създадените обекти в Java, след тяхното използване трябва да бъдат затворени, за да пестят ресурси. По-рано трябваше да вземе това под внимание и да спре подобни случаи на ръка. Сега те имат интерфейс AutoClosable. Тя помага за автоматично затваряне на вече използвани обекти, разположени в блока try. Благодарение на този подход писането на код стана по-удобно, четимостта му се увеличи значително.

    Собствени класове изключения Java

    Създателите на описания програмен език са взели предвид много аспекти при проектирането на видове непредвидени обстоятелства. Въпреки това, всички варианти на резултата от събитията няма да попречат, така че Java има възможност да дефинира собствените си изключения, които отговарят точно на нуждите на определен код. Най-лесният начин за създаване е да се наследи от най-подходящия контекст на обекта.
    Налице е поредица от изключение, клас, използван за дефиниране на собствени изключения. MyException има два конструктора - един по подразбиране,втората с аргумент тип тип String. Тогава публичния клас FullConstructors изпълнява метода f, чийто подпис съдържа хвърлящия MyException. Тази ключова дума означава, че f може да хвърли изключение към типа MyException тип Java. Тогава в тялото на метода изведете текстовата информация към конзолата и самото поколение на MyException, с помощта на хвърляне. Вторият метод е малко по-различен от първия, когато при създаването на изключение, той предава низаен параметър, който ще бъде показан в конзолата на свирката. В главното е ясно, че f () и g () са поставени в блока try try и ключовата дума catch е конфигурирана за улов на MyException. Резултатът от обработката е изхода на съобщението за грешка в конзолата:
    Така че е възможно да се добави изключване на Java, създадено от вас.

    Архитектура на изключенията

    Както всички обекти в Java, изключенията също са наследени и имат йерархична структура. Коренният елемент на всички грешки, които се хвърлят в този език за програмиране, е класа java.lang.Throwable. От него наследяват два вида - Error и Exception.
    Грешка - предупреждава ви за критични грешки и не проверява за изключване на Java. Прихващането и обработката на такива данни в повечето случаи е в процес на разработване и не изисква въвеждане в кода на окончателната програма. Най-често използваният клас за създаване и анализ на изключения е Exception. Което от своя страна е разделено на няколко клона, включително RuntimeException. RuntimeException включва изключения по време на изпълнение, тоест, когато се изпълнява програмата. Всички класове, наследени от него, са ненависни.

    Често срещаниизключение

    В изключение Java, чийто списък е представен по-долу, се използва най-често, затова си заслужава да се опише подробно всеки от тях:
  • ArithmeticException. Това включва грешки, свързани с аритметични операции. Най-впечатляващият пример е делението на нула.
  • ArrayIndexOutOfBoundsException - Препратка към номер на елемент от масив, който надвишава неговата обща дължина.
  • ArrayStoreException - опит за присвояване на елемент от масив от несъвместим тип.
  • ClassCastException е опит за неправилно въвеждане на един тип в друг.
  • IllegalArgumentException - използвайте грешен аргумент при извикването на метода.
  • NegativeArraySizeException е изключение при създаването на масив от отрицателни измерения.
  • NullPointerException - Използването на препратка към нула е неправилно.
  • NumberFormatException - се появява, когато низът е неправилно преобразуван в число.
  • ​​
  • UnsupportedOperationException - операцията не се поддържа.
  • Тези примери не се проверяват за типове изключения на Java. Но това изглежда проверено:
  • ClassNotFoundException - класът не е намерен.
  • IllegalAcccessException - Ограничаване на достъпа до клас.
  • InterruptedException - прекъсва потока на нишката.
  • NoSuchFieldException - няма задължително поле.

    Тълкуване на изключенията

    Като се има предвид честите изключения, следва да се отбележи, че тяхното тълкуване в хода на развитието може да бъде разбрано погрешно. По-долу е представен малък списък, който обяснява по-подробно кога може да има непланирана ситуация.
    NullPointerException. Първото изключение, когато има изключение, е препратката към препратката към обекта, който е равен нанула. Това се отнася и за методите с нулева инстанция на клас. NullPointerException може да бъде хвърлен и в случай на получаване на дължината на масива е нула. Избягването на такива ситуации ще помогне периодично да сканира обекти за стойност null. ArrayIndexOutOfBoundsException. Всяка програма не може да съществува без използването на масиви. Съответно, честото третиране на тях може да доведе до грешки. Има изключение, когато разработчикът се опитва да осъществи достъп до елемент на масив, който не е в списъка с индекси. Например, исканата стойност е над дължината или по-малка от нула. Много често това е резултат от факта, че фактурата в масива започва от нулата.

    Заключения

    Обработка на изключенията Java - мощна среда за инструменти, която значително улеснява работата на програмиста и му позволява да създаде чист и безгрешен код. Състоянието и репутацията на компанията разработчик зависят от това колко гладко и стабилно функционират приложенията.
    Разбира се, в повече или по-малко прости програми е много по-лесно да се проследяват аутсорсинг ситуации. Но в големите автоматизирани комплекси за няколко стотици хиляди линии това е възможно само в резултат на продължителни дебъгване и тестване. За Java изключения, грешки, които възникват в някои приложения, отделните компании предлагат награди, когато са намерени от ентусиасти. Особено ценни са тези, които причиняват нарушение на политиката за сигурност на софтуерния пакет.
  • Свързани публикации