/ / Lançamento de exceções verificadas - java, exceção, tratamento de exceções, exceções verificadas

Lançar exceções verificadas - java, exceção, tratamento de exceções, exceções verificadas

Alguns dos meus métodos em Java lançam exceções comocomo NoSuchElementException, IllegalArgumentException, etc. Mas ao usar esses métodos, essas exceções parecem estar desmarcadas. Em outras palavras, o chamador dos meus métodos não é necessário para tentar / capturar meus métodos que lançam essas exceções. Eu li em torno parece que exceções por padrão são "verificados" e apenas os erros são os "desmarcados". Mas de alguma forma, as exceções que eu tiro também são desmarcadas. Isso é estranho.

Como posso garantir que quando meu método lança uma exceção, o chamador deve capturar a exceção em tempo de compilação? Simplesmente disse, como posso jogar uma exceção verificada?

Obrigado!

Respostas:

6 para resposta № 1

Somente RuntimeException e suas subclasses estão desmarcadas. (Bem, Error e suas subclasses são assim, mas você não deve estar mexendo com Errors.) Tudo que você precisa fazer para lançar uma exceção verificada é garantir que ela não se estenda RuntimeException.


3 para resposta № 2

Se uma exceção está marcada ou não está marcada NÃO como você joga ou declara, é sódependendo se a exceção escolhida é derivada de RuntimeException ou não. Os que você lista acima, todos são derivados de RuntimeException e assim os clientes do seu método não precisam pegá-los.


3 para resposta № 3

Todas as subclasses de Throwable são verificadas, exceto as subclasses de Error e RuntimeException. (Você pode subclassificar Throwable diretamente)

O compilador verifica essas exceções, mas elas não têm um lugar especial no tempo de execução. ou seja, você pode lançar uma Exceção marcada sem que o compilador saiba e se comportará normalmente.

por exemplo.

public static void throwChecked(Throwable t) /* no throws clause */ {
Thread.currentThread().stop(t);
}

public static void main(String... args) /* no throws clause */ {
throwChecked(new Throwable());
}

Isso compila e imprime o Throwable como você poderia esperar.


1 para resposta № 4

Eu acho que você deveria dar um passo para trás e aprender a teoria por trás porque para lançar uma exceção verificada contra uma exceção não verificada. o Tutorial de Java exceções é um bom recurso.

Da página intitulada Exceções não verificadas - A controvérsia:

Exceções de tempo de execução representam problemas que são o resultado de um problema de programação e, como tal, o código do cliente da API não pode ser razoavelmente esperado para recuperar-se deles ou manipulá-los de qualquer maneira.


1 para resposta № 5

Veja isso hackear, pode ajudar (espero que não seja OT).

public class Test {

// No throws clause here
public static void main(String[] args) {
doThrow(new SQLException());
}

static void doThrow(Exception e) {
Test.<RuntimeException> doThrow0(e);
}

@SuppressWarnings("unchecked")
static <E extends Exception> void doThrow0(Exception e) throws E {
throw (E) e;
}
}

0 para a resposta № 6

Exceções que se estende RuntimeException não precisa ser declarado.

Você pode declarar o método: throws Exception ou até mesmo throws Throwable e isso terá que ser tratado (embora não seja recomendado).