Java >> Java tutorial >  >> Tag >> assert

Brug af Java Assertions

1. Introduktion

Java påstand søgeord giver udviklere mulighed for hurtigt at verificere visse antagelser eller tilstand af et program.

I denne artikel skal vi se på, hvordan du bruger Java assert søgeord.

2. Historien om Java-påstande

Java påstand søgeord blev introduceret i Java 1.4, så det har eksisteret i et stykke tid. Det er dog stadig et lidet kendt søgeord, der drastisk kan reducere kedelpladen og gøre vores kode mere læsbar.

For eksempel er vi ofte i vores kode nødt til at bekræfte visse forhold, der kan forhindre vores applikation i at fungere korrekt. Typisk ville vi skrive noget som dette:

Connection conn = getConnection();
if(conn == null) {
    throw new RuntimeException("Connection is null");
}

Ved at bruge påstande kan vi fjerne hvis og kast udsagn med en enkelt påstand erklæring.

3. Aktivering af Java Assertions

Fordi Java-påstande bruger assert søgeord, er der ingen nødvendige biblioteker eller pakker at importere.

Bemærk, at før Java 1.4 var det helt lovligt at bruge ordet "assert" til at navngive variabler, metoder osv. Dette skaber potentielt et navnesammenstød, når man bruger en ældre kode med nyere JVM-versioner.

Af hensyn til bagudkompatibilitet deaktiverer JVM derfor påstandsvalidering som standard . De skal udtrykkeligt aktiveres ved at bruge enten -enableassertions kommandolinjeargument eller dets stenografi -ea:

java -ea com.baeldung.assertion.Assertion

I dette eksempel har vi aktiveret påstande for alle klasser.

Vi kan også aktivere påstande for specifikke pakker og klasser:

java -ea:com.baeldung.assertion... com.baeldung.assertion.Assertion

Her har vi aktiveret påstande for alle klasserne i com.baeldung.assertion pakke.

Ligeledes kan de deaktiveres for specifikke pakker og klasser ved hjælp af -disableassertions kommandolinjeargument eller dets stenografi -da . Vi kan også bruge alle disse fire argumenter sammen.

4. Brug af Java Assertions

For at tilføje påstande skal du bruge påstand søgeord og give det en boolesk tilstand :

public void setup() {
    Connection conn = getConnection();
    assert conn != null;
}

Java giver også en anden syntaks for påstande, der tager en streng, som vil blive brugt til at konstruere AssertionError hvis man bliver smidt:

public void setup() {
    Connection conn = getConnection();
    assert conn != null : "Connection is null";
}

I begge tilfælde kontrollerer koden, at en forbindelse til en ekstern ressource returnerer en ikke-nul værdi. Hvis denne værdi er null, JVM'en vil automatisk kaste en AssertionError .

I det andet tilfælde vil undtagelsen have de yderligere detaljer, der vises i stack-sporingen og kan hjælpe med at fejlfinde problemet.

Lad os se på resultatet af at køre vores klasse med påstande aktiveret:

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. Håndtering af en AssertionError

Klassen AssertionError udvider Fejl , som i sig selv udvider Throwable . Det betyder, at AssertionError er en umarkeret undtagelse.

Derfor er metoder, der bruger påstande, ikke påkrævet for at erklære dem, og yderligere opkaldskode bør ikke forsøge at fange dem.

AssertionErrors er beregnet til at indikere uoprettelige forhold i en applikation, så prøv aldrig at håndtere dem eller forsøg at gendanne dem.

6. Bedste praksis

Det vigtigste at huske om påstande er, at de kan deaktiveres, såforudsæt aldrig, at de bliver udført .

Hold derfor følgende ting i tankerne, når du bruger påstande:

  • Kontroller altid for null-værdier og tomme Valgmuligheder hvor det er relevant
  • Undgå at bruge påstande til at kontrollere input til en offentlig metode, og brug i stedet en umarkeret undtagelse såsom IllegalArgumentException eller NullPointerException
  • Kald ikke metoder under påstandsbetingelser, og tildel i stedet resultatet af metoden til en lokal variabel, og brug denne variabel med assert
  • Påstande er gode til steder i koden, der aldrig vil blive udført, såsom standard tilfælde af en switch statement eller efter en loop, der aldrig slutter

7. Konklusion

Java påstand søgeordet har været tilgængeligt i mange år, men er stadig et lidet kendt træk ved sproget. Det kan hjælpe med at fjerne masser af standardkode, gøre koden mere læsbar og hjælpe med at identificere fejl tidligt i programudviklingen.

Bare husk, at påstande ikke er aktiveret som standard, så antag aldrig, at de vil blive udført, når de bruges i koden.

Som altid er den fulde kildekode tilgængelig på GitHub.


Java tag