Използване на Java Assertions

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.