1. Въведение
Ключовата дума Java assert позволява на разработчиците бързо да проверят определени предположения или състояние на програма.
В тази статия ще разгледаме как да използваме ключовата дума Java assert .
2. История на твърденията на Java
Ключовата дума Java assert е въведена в Java 1.4, така че съществува от доста време. Въпреки това, тя остава малко известна ключова дума, която може драстично да намали образците и да направи нашия код по-четлив.
Например често пъти в нашия код трябва да проверяваме определени условия, които могат да попречат на приложението ни да работи правилно. Обикновено бихме написали нещо подобно:
Connection conn = getConnection(); if(conn == null) { throw new RuntimeException("Connection is null"); }
Използването твърдения можем да се премахне , ако и хвърлят отчет само с едно поддържали изявление.
3. Активиране на Java Assertions
Тъй като твърденията на Java използват ключовата дума assert , не са необходими библиотеки или пакети за импортиране.
Имайте предвид, че преди Java 1.4 беше напълно законно да се използва думата „assert“ за именуване на променливи, методи и т.н. Това потенциално създава сблъсък при именуване, когато се използва по-стар код с по-нови версии на JVM.
Следователно, за обратна съвместимост, JVM деактивира валидирането на твърдение по подразбиране . Те трябва да бъдат разрешени изрично, като се използва или аргументът на командния ред -enableassertions , или неговата стенограма -ea:
java -ea com.baeldung.assertion.Assertion
В този пример сме активирали твърдения за всички класове.
Също така можем да активираме твърдения за конкретни пакети и класове:
java -ea:com.baeldung.assertion... com.baeldung.assertion.Assertion
Тук сме активирали твърдения за всички класове в пакета com.baeldung.assertion .
По същия начин те могат да бъдат деактивирани за конкретни пакети и класове, като използват аргумента на командния ред -disableassertions или неговата стенограма -da . Също така можем да използваме всичките четири от тези аргументи заедно.
4. Използване на Java Assertions
За да добавите твърдения, просто използвайте ключовата дума assert и му дайте булево условие :
public void setup() { Connection conn = getConnection(); assert conn != null; }
Java също така предоставя втори синтаксис за твърдения, който приема низ, който ще се използва за конструиране на AssertionError, ако бъде хвърлен:
public void setup() { Connection conn = getConnection(); assert conn != null : "Connection is null"; }
И в двата случая кодът проверява дали връзката към външен ресурс връща ненулева стойност. Ако тази стойност е нула, JVM автоматично ще изведе AssertionError .
Във втория случай изключението ще има допълнителна подробност, която ще се покаже в трасировката на стека и може да помогне за отстраняване на грешки в проблема.
Нека да разгледаме резултата от изпълнението на нашия клас с активирани твърдения:
Exception in thread "main" java.lang.AssertionError: Connection is null at com.baeldung.assertion.Assertion.setup(Assertion.java:15) at com.baeldung.assertion.Assertion.main(Assertion.java:10)
5. Обработка на грешка AssertionError
Класът AssertionError разширява Error , който самият разширява Throwable . Това означава, че AssertionError е непроверено изключение.
Следователно методи, които използват твърдения, не се изискват, за да ги декларират, а по-нататъшният извикващ код не трябва да се опитва да ги хване.
AssertionErrors имат за цел да посочат невъзстановими условия в приложение, така че никога не се опитвайте да ги обработвате и не опитвайте възстановяване.
6. Най-добри практики
Най-важното нещо, което трябва да запомните за твърденията, е, че те могат да бъдат деактивирани, така че никога не предполагайте, че ще бъдат изпълнени .
Затова имайте предвид следните неща, когато използвате твърдения:
- Винаги проверявайте за нулеви стойности и празни опции, където е подходящо
- Избягвайте използването на твърдения, за да проверите входове в публичен метод и съответно да се използва нерегистриран изключение като IllegalArgumentException или NullPointerException
- Не извиквайте методи в условия на твърдение и вместо това присвоявайте резултата от метода на локална променлива и използвайте тази променлива с assert
- Твърденията са чудесни за места в кода, които никога няма да бъдат изпълнени, като например случая по подразбиране на оператор за превключване или след цикъл, който никога не завършва
7. Заключение
Ключовата дума Java assert е достъпна от много години, но остава малко известна характеристика на езика. Той може да помогне за премахването на много типови кодове, да направи кода по-четлив и да помогне за идентифицирането на грешки в началото на разработването на програмата.
Само не забравяйте, че твърденията не са активирани по подразбиране, така че никога не предполагайте, че те ще бъдат изпълнени, когато се използват в кода.
Както винаги, пълният изходен код е достъпен в GitHub.