Assertions in Java: which single guideline is correct and reflects best practice?

Difficulty: Easy

Correct Answer: Assertion expressions should not contain side effects.

Explanation:


Introduction / Context:
The assert statement is a tool for verifying developer assumptions. Because assertions can be disabled at runtime, code inside assertion expressions should not alter program state in ways the application depends on.


Given Data / Assumptions:

  • Assertions may be disabled with JVM flags, causing both the condition and the optional detail expression to be skipped.
  • Public API argument validation should be implemented with explicit checks and exceptions, not assertions.
  • AssertionError indicates a bug, not a recoverable condition.


Concept / Approach:
Assess each option against widely accepted guidelines: no side effects, not for public preconditions, and no requirement to “handle” AssertionError.


Step-by-Step Solution:
A: True. If an assertion has side effects, disabling assertions removes those effects, changing program behavior—an anti-pattern. Keep assertions free of side effects.B: False. The main boolean expression must be boolean; the detail expression after the colon can be any expression, but that is not what “assertion expression values can be any primitive type” suggests.C: False. Public preconditions should not rely on assertions because they may be disabled; use exceptions (e.g., IllegalArgumentException).D: False. You normally do not catch AssertionError; it signals a programming error.


Verification / Alternative check:
Disable assertions with -da and confirm that any side effects placed inside assertions do not occur; this demonstrates why they are dangerous.


Why Other Options Are Wrong:
They either misstate typing rules or recommend misuses for public contracts and exception handling.


Common Pitfalls:
Putting logging, counters, or state changes inside assertions; validating user input with assert; catching AssertionError to continue.


Final Answer:
Assertion expressions should not contain side effects.

More Questions from Assertions

Discussion & Comments

No comments yet. Be the first to comment!
Join Discussion