No tratamento de exceções em Java, o uso de blocos try-catch-finally é uma prática essencial para lidar com cenários inesperados durante a execução de programas. Considere as seguintes afirmativas sobre o funcionamento desses blocos:
I. O bloco try deve obrigatoriamente conter código que pode lançar uma exceção.
II. O bloco catch é opcional e pode ser omitido desde que o bloco finally esteja presente.
III. O bloco finally, se presente, será executado independentemente de uma exceção ter sido lançada ou não.
Assinale a alternativa correta.