Exceptions in Java occur when unexpected or abnormal conditions arise during program execution. There are two main types of exceptions: Exceptions, which can be caught and handled by the program, and Errors, which usually indicate serious problems and cannot be caught. When an exception occurs, an object is thrown which can either be handled within the method or passed to the calling method. Exceptions are typically generated by the Java runtime system but can also be manually thrown in code. Finally blocks ensure code is executed whether or not an exception occurs, such as closing open files or network connections.