<p>In Java (or any other language with checked exceptions), when creating your own exception class, how do you decide whether it should be checked or unchecked?</p>

<p>My instinct is to say that a checked exception would be called for in cases where the caller might be able to recover in some productive way, where as an unchecked exception would be more for unrecoverable cases, but I'd be interested in other's thoughts.</p>

From
A Java Learner
:
When an exception occurs, you have to
  either catch and handle the exception,
  or tell compiler that you can't handle
  it by declaring that your method
  throws that exception, then the code
  that uses your method will have to
  handle that exception (even it also
  may choose to declare that it throws
  the exception if it can't handle it).
Compiler will check that we have done
  one of the two things (catch, or
  declare).  So these are called Checked
  exceptions.   But Errors, and Runtime
  Exceptions are not checked for by
  compiler (even though you can choose
  to catch, or declare, it is not
  required).  So, these two are called
  Unchecked exceptions.
Errors are used to represent those
  conditions which occur outside the
  application, such as crash of the
  system.  Runtime exceptions are
  usually occur by fault in the
  application logic.  You can't do
  anything in these situations.  When
  runtime exception occur, you have to
  re-write your program code.  So, these
  are not  checked by compiler.  These
  runtime exceptions will uncover in
  development, and testing period.  Then
  we have to refactor our code to remove
  these errors.