Assertion is a feature of Java that enables to have contract compatibility controls and assumption tests which can be simply enabled in any time for problem tracking in code. Assertions can be simply implemented and makes easy to find the cause of problems, if it is properly used in error prone points of code.
Purposely, java.lang.AssertionError is subclass of java.lang.Error and it is not an exception. Because, assertion exception might be caught and dismissed by mistake and the cause of problem cannot be detected, otherwise. I think that as opposed to declaring an IllegalArgumentException in a method, assertions with clear expressions is the only strict way of finding bugs in critical code blocks.