This document discusses exceptions in programming. It defines an exception as an event that disrupts normal program flow, and explains that when an exception occurs the runtime system searches the call stack for an exception handler to catch the exception. There are two types of exceptions - checked exceptions which are checked at compile time, and unchecked exceptions which are checked at runtime. Examples of each type are given. Common scenarios where unchecked exceptions like NullPointerException, NumberFormatException, and ArrayIndexOutOfBoundsException can occur are also described.