In a try-catch-finally structure, the code in the 'try' block is executed first. If an exception occurs, the 'catch' block for that specific exception executes. Regardless of whether an exception occurs, the 'finally' block executes after the 'try' and 'catch' blocks. This ensures that cleanup code runs.