A finally block executes regardless of how the try block exits (exception or normal completion). Control flow statements like break, continue, and return cause the finally block to execute before the transfer occurs, but they cannot appear inside the finally block itself.