Checked exceptions must be declared or handled at compile time (they extend `Exception` but not `RuntimeException`). Unchecked exceptions (`RuntimeException`) don’t require it and usually indicate programming errors or invalid state.