Checked e Unchecked exceptions

Uma coisa que eu ainda não entendi muito bem é o esquema de checked e unchecked exceptions. Tipo, como eu sei qual exception eh checked e qual nao eh, e como eu faco pra implementar tais exceptions. Por exemplo, como eu faria pra forcar o usuario a tratar determinada exeption, e da mesma maneira como dizer que tal metodo lanca tal excecao, porem sem obriga-lo a tratar a exception.

valeu
Rafael

Uma excecao eh Unchecked se ela tem, em sua linha genealogica, a classe java.lang.RuntimeException.

Uma RuntimeException eh uma excecao que voce pode lancar sem ter de colocar na clausula throws (mas se voce quiser, voce pode), e voce pode chamar um metodo que lanca esse tipo de excecao, sem fazer o bloco try (se voce quiser, pode fazer tambem).

Excecoes runtime sao geralmente um bug, como ArrayIndexOutOfBounds e NullPointer, sao coisas que nao deveriam acontecer se voce tomasse cuidado.

CheckedExceptions sao todas as outras que nao sao Runtime, e nao sao java.lang.Error. O Erro funciona MAIS OU MENOS como uma Runtime, ja que ela nao eh checked!

Oi,

Lina desenterrando tópico.

Estava lendo a Revista Java Magazine, edição 51, que fala: Checked Exceptions - As classes de exceções checadas são derivadas de Exception, mas não de RuntimeException. O código a seguir mostra um método declarando uma exceção checada (NumberFormatException é uma subclasse direta de Exception):

public int stringToInt(String value) throws NumberFormatException{...};

Eu fiquei pensando: Poxa vida, NumberFormatException é subclasse direta de Exception?! NumberFormatException não é então considerada uma Unchecked Exception?

Pergunta: Foi falha do autor ou eu estou ficando louca?

Tchauzin!

Abei de ler o artigo e encontrei essa afirmação:

Com certeza o autor equivocou-se, pois se você escrever o código abaixo verás que não será preciso lançar a exception no chamador:

package teste;


public class Teste {
	
    public int stringToInt(String value)  
    	       throws NumberFormatException{
    	return 0;
    }
	
	public void testeChecked(){
		System.out.println(stringToInt("2"));
	}
}

Mas para realmente provar que isso não é verdade é so verificar a hierarquia veja:

public
class NumberFormatException extends IllegalArgumentException {
...
public
class IllegalArgumentException extends RuntimeException {
...

Ou seja, NumberFormatException herda de IllegalArgumentException que herda de RuntimeException.

Oi,

Pois é, se equivocou. A não ser que em 2007 (ano da revista) a classe NumberFormatException era derivada de Exception e não de RuntimeException.

(o que eu acho ser muito difícil)

Tchauzin!

1 curtida