Geschiedenis van de vraag:
Het assert-mechanisme werd toegevoegd in Java 1.4 voor het diagnosticeren van logische fouten en veronderstellingen van de ontwikkelaar binnen de code. Assert maakte het mogelijk om tijdens runtime inconsistenties tussen verwachte en werkelijke waarden te ontdekken zonder expliciete thrown-excepties, en kwam niet in de uiteindelijke versie van de applicatie terecht wanneer de assert-ondersteuning was uitgeschakeld.
Probleem:
Misbruik van assert in plaats van normale foutcontroles (bijvoorbeeld controles van gebruikersinvoer), evenals onbegrip van de uitschakelbaarheid op een productie server, kan leiden tot gemiste fouten.
Oplossing:
Assert wordt alleen toegepast voor logische invarianties die niet geschonden kunnen worden bij correcte werking van het programma, maar als ze worden geschonden, gedraagt de applicatie zich onmiskenbaar onjuist.
Voorbeeldcode:
public int divide(int a, int b) { assert b != 0 : "Divider mag niet nul zijn!"; return a / b; }
Belangrijkste kenmerken:
Werkt assert standaard bij het uitvoeren van een Java-programma?
Antwoord: Nee, assert is standaard uitgeschakeld. Het moet expliciet worden ingeschakeld met de vlag -ea (enable assertions).
Kan assert worden gebruikt in productiecode?
Antwoord: Niet aanbevolen, omdat AssertionError gewoon kan worden genegeerd. Het gebruik van assert is alleen mogelijk voor invarianties en in testcode.
Wat is het verschil tussen assert en het gooien van een uitzondering?
Antwoord:
Een programmeur gebruikt assert voor het controleren van invoergegevens van een webapplicatie, waardoor een gebruiker een kritieke fout kan veroorzaken met onjuiste waarden.
Voordelen:
Nadelen:
Assert wordt alleen toegepast voor interne invarianties in het algoritme, voor de gebruiker worden alle controles uitgevoerd via reguliere uitzonderingen.
Voordelen:
Nadelen: