Exceptions provide a powerful mechanism for handling error conditions in Java programs. However, many developers don't spend enough time thinking about exceptions during the design process; instead, they let the development process drive the program's use of exceptions. In this series, Brian Goetz reviews some best practices for using exceptions effectively. In Part 1, he offers guidelines on properly incorporating error handling into classes at design time. (1,800 words)