Yes, a precondition check is a check on a method's args, at the beginning of the method. A precondition can also involve checking the validity of the current class' state (which might depend of the state of other classes).
A postcondition check makes sure that the return value is valid, and that the current class' state is valid.
I can't think of any good reason to throw new AssertionError("Stress!");
As I said earlier, it's better to use the "assert" keyword. Then the JVM will throw the AssertionError automatically, if assertons have been enabled.
Stepping back and looking at the big picture, when should assertions be enabled. This relates to the issue of checked vs. runtime exceptions: some problems should never occur in commercial-grade code, while others (like IOExceptions) can't be avoided. Similarly, assertions are for checking for problems that should only come up during code development. Such bugs should be eliminated before the software is delivered. For example, a precondition failure in a private method means that somewhere in the class someone is calling the method in an inappropriate way. When this happens during code development, the program should stop running immediately so that the bug can be fixed.
Customers don't want to be exposed to the output from pre- and post-condition checks, and if a bug unfortunately gets shipped to them, they don't want the application to shut down, because they'll lose all their work. So they will run code with assertions disabled.
For more on all this assertions stuff, see Chapter 5 of the 5.0 rev of "Complete
Java 2 Certification".