Duvida de compilação

3 respostas
P

Olá pessoal ,

estou com uma duvida sobre a classe abaixo pq não compila e dá o erro na linha onde está
catch (NumberFormatException e) o erro é :

Unreachable catch block for NumberFormatException.It is already handled by catch block for RuntimeException

Se alguém puder me ajudar agradeceria …

abs

class Number1 {
	    public static void main(String [] args) {
	      try {
       	             System.out.print(Integer.parseInt("forty "));
	      } catch (RuntimeException r) {
	        System.out.print("runtime ");
	      } 
	      catch (NumberFormatException e) {
	        System.out.print("number ");
	      }
	   
	      
	   }
 }

3 Respostas

Mantu

O problema é que uma NumberFormatException é, antes de mais nada, uma RuntimeException (é filha de RuntimeException).
Se o seu bloco try lançar uma RuntimeException, o primeiro bloco catch assume o controle. Só que se o bloco try lançar uma NumberFormatException, o primeiro bloco catch também assume o controle por que, segundo a relação de herança entre as duas exceções, NumberFormatException é uma RuntimeException.

Se vc fez isso por que tem certeza que pode ocorrer uma NumberFormatException e também tem certeza que pode ocorrer uma outra RuntimeException qualquer, uma alternativa seria fazer assim:

class Number1 {
	public static void main(String [] args) {
		try {
			System.out.print(Integer.parseInt("forty "));
		}catch (RuntimeException r) {
			if(r instanceof NumberFormatException)
				System.out.print("number ");
			else
				System.out.print("runtime ");
		}
	}
}
T

Só fazendo um pequeno reparo. Não use instanceof aqui; é suficiente reordenar as cláusulas catch.

class Number1 {
	public static void main(String [] args) {
		try {
			System.out.print(Integer.parseInt("forty "));
                } catch (NumberFormatException ex) {
                        ex.printStackTrace(); // melhor que imprimir só "number"
                } catch (RuntimeException ex) {
                        ex.printStackTrace(); // 
                }
	}
}
Mantu

É vero!!! Muito melhor!

Criado 24 de abril de 2006
Ultima resposta 24 de abr. de 2006
Respostas 3
Participantes 3