Java exceptions allow programs to handle and recover from errors and unexpected conditions. Exceptions are thrown when something abnormal occurs and the normal flow of execution cannot continue. Code that may throw exceptions is wrapped in a try block. Catch blocks handle specific exception types. Finally blocks contain cleanup code that always executes regardless of exceptions. Common Java exceptions include IOException for I/O errors and NullPointerException for null reference errors. Exceptions bubble up the call stack until caught unless an uncaught exception causes thread termination.