You now know how Java handles runtime errors through exceptions. You can catch them with try-catch, clean up resources with finally or try-with-resources, and throw your own exceptions when your methods detect invalid input.
The checked vs unchecked distinction drives your design. Checked exceptions force callers to handle predictable failures like missing files. Unchecked exceptions signal programming bugs that should be fixed, not caught. Custom exception classes let you carry specific error data up the call stack.
Next, you'll look at how Java organizes classes into packages and controls access between them.