Start here. This is the direct spoken answer to practice first.
Overview
The language distinction is mechanical, while the design choice depends on what a caller can reasonably do with the failure.
A checked exception is an exception the compiler requires a method to catch or declare with throws. Exceptions under RuntimeException, and errors under Error, are unchecked and have no catch-or-declare requirement. Checked exceptions make a failure part of the method's compile-time contract. I consider them when a caller can reasonably anticipate and recover from a specific condition. I use unchecked exceptions for programming errors, violated preconditions, or failures that callers usually cannot handle meaningfully at each layer.