Dúvida tratamento de erros InterruptedException

2 respostas
M

Pessoal sou novo no GUJ, não sei se aqui é o melhor lugar para eu postar dúvida sobre tratamento de erros e uma questão em particular. Se não for podem me indicar o local correto!

Estou querendo tentar a certificação para SCJP 6 em inglês.

Mas já vai minha questão retirada do ExamLab.

public class Tratamento {

public static void main() { 
	
	int i=4;
	
		try{
			
			i=i/0;

		}catch(InterruptedException){
			System.out.print("aioob ");	
		}catch(ArrayIndexOutOfBoundsException e){
			System.out.print("aioob ");
		}catch(RuntimeException e){
			System.out.print("re ");
		}catch(Exception e){
			System.out.print("e ");
		}

}

}

Este código apresenta erro de compilador porque a excessão InterruptedException deve ser levantada(throws) dentro do bloco Try. Procurei aqui no material que possuo e ainda ficou subentendido pra mim.
Classes que extendem de Throwable/Exception/MeusTratamentos devem ser levantadas. No caso como sei que a classe InterruptedException descende de uma dessas classes?
Errei a questão porque achei que InterruptedException não descendia diretamente de uma das citadas. Por causa do Exception não da pra identificar porque ArrayIndexOutofBoundsEXCEPTION não precisa ser tratada ou levantada.

Existe uma regra vinculada com o nome da exception ou é na decoreba mesmo!?

Espero que não esteja nebulosa minha dúvida.

2 Respostas

sobreira

Em primeiro lugar está faltando um “e” na seguinte linha do seu código:

... } catch(InterruptedException) { System.out.print("aioob "); ...

Você não pode capturar uma excessão checada que nunca é lançada num bloco try…catch. InterruptedException é uma excessão checada e jamais será lançada no bloco try. O compilador sabe disso e vai reclamar.

ArrayIndexOutOfBoundsException e RuntimeException não causam problemas em ser capturadas porque não são excessões checadas, isto é, elas descendem de RuntimeException e não podem ser previstas. Estas excessões em geral são bugs no código.

Exception é abrangente demais e o compilador deixa passar porque isto inclui RuntimeException e suas descendentes. Em geral é má prática capturar Exception.

Você precisa conhecer no mínimo as classes de excessão mais básicas e saber quais são checadas ou não. Certifique-se de entender claramente estes conceitos e pratique bastante.

M

Obrigado, entendi porque o compilador não se importa quando a exception é colocada apesar dela ser checked.

Criado 16 de agosto de 2009
Ultima resposta 17 de ago. de 2009
Respostas 2
Participantes 2