Exception handling in Java allows programs to handle errors and unexpected conditions gracefully. There are three main types of exceptions: checked exceptions which must be declared, unchecked exceptions which do not need to be declared, and errors which are usually unrecoverable. The try/catch block is used to catch exceptions, with catch blocks handling specific exception types. Finally blocks contain cleanup code and are always executed regardless of exceptions. Methods can declare exceptions they may throw using the throws keyword. Programmers can also create custom exception classes.