Todas as exceções têm um try-catch obrigatório?

Uma pergunta simples e não consigo encontrar a resposta para isso. É necessário que todas as exceções em Java usem um try-catch? Ou é apenas para o FileNotFoundException?

Muitas exceções (IndexOutOfBoundException, ArithmeticException, IlligalArgumentException, NullPointerException) estão dizendo que elas não precisam de uma exceção, mas FileNotFoundException faz) … e eu não consigo encontrar a resposta que fazer e que não precisa de try-catch .

Não é absolutamente necessário ter um bloco try/catch para suas exceções. Em vez disso, você pode throw los para alguém que seja capaz de lidar com a exceção corretamente.

Existem dois tipos de exceções: Verificado e Desmarcado. Uma exceção marcada pode ser considerada uma que é encontrada pelo compilador, e o compilador sabe que tem uma chance de ocorrer, então você precisa catch ou throw lo. Por exemplo, abrindo um arquivo. Ele tem a chance de falhar, e o compilador sabe disso, então você é forçado a catch ou throw a possível IOException .

Uma exceção não verificada pode ser considerada uma que tenha uma chance de ocorrer, mas com base em seu código, o compilador não sabe. Em outras palavras, é um erro de programação . Por exemplo, se você está digitando o usuário e espera um número, e o usuário insere algo que você não esperava, como uma string, seu programa lançaria uma NumberFormatException . Você pode prever esses cenários e colocar try/catch para tentar evitá-los antes que eles ocorram. Muito raramente se vê uma pessoa adicionando throws NullPointerException ou throws NumberFormatException (ou lançando qualquer outra exceção Unchecked). É permitido, mas criar explicitamente essa exceção é estranho e a maioria das pessoas diria que é um estilo ruim de codificação.

Observe que todas as sugestões marcadas devem ser capturadas ou lançadas para algo que possa lidar com isso; se você não fizer isso, seu programa não será compilado. Se você jogá-lo para algo que não pode lidar com isso, então seu programa provavelmente irá falhar se ocorrer.

Observe também que uma Exceção não verificada (por exemplo: uma que ocorre durante o tempo de execução, geralmente por meio de uma input incorreta do usuário ou algo assim) também geralmente trava o seu programa. Assim, geralmente é uma boa idéia usar try/catch quando algo pode dar errado, mas você não precisa fazê-lo .

Também é interessante notar que, enquanto exceções verificadas são subclasss de exceções e exceções não-verificadas são subclasss de RuntimeException, RuntimeException em si é uma subclass de exceção. Isso significa que, se você realmente quisesse, uma única try {} catch (Exception e) {} pegaria todas as exceções que seu programa pudesse lançar. Concedido, isso é considerado uma maneira horrível de lidar com exceções, e você deve pegar cada um separadamente para que você possa lidar com eles separadamente. Por favor, tente não usá-lo.

Não, nem todas as exceções exigem uma tentativa de captura. Cada exceção verificada requer um try catch. Por exemplo, um NullPointerException é uma exceção não verificada, portanto, não requer um try-catch, enquanto um FileNotFoundException é verificado, por isso requer um. Você também pode adicionar “throws” à assinatura do método e, assim, evitar a necessidade de um try-catch.

Leia: https://docs.oracle.com/javase/tutorial/essential/exceptions/

Basicamente verificado Exceções precisam ser tratadas ou lançadas Exceções não verificadas e erros podem ser manipulados ou lançados (embora a manipulação de erros seja, em geral, considerada uma prática ruim).

Exceção verificada é tudo o que herda de java.lang.Exception

Exceção não verificada é tudo o que herda de java.lang.RuntimeException

Erro é tudo o que herda de java.lang.Error

Apenas Exceção explícita Exigida necessidade de pegá-lo, para outro todo tipo de exceção você pode usar “throws” para a assinatura do método.

Quando um método para o qual você chama explicitamente lança uma exceção, você deve usar try....catch loop. Mas no caso da lista que você deu são todas exceções de tempo de execução. Eles são lançados quando, às vezes, um programa tem inputs que não eram esperadas ou o programa foi usado de alguma forma que não foi planejado. Isso não exigiria um loop try....catch .

Sim, mas se você não quiser lidar com isso em seu método, você pode passar a exceção para o chamador do método com a palavra-chave throws . Exemplo:

 void execption() throws Exception { throw new Exception(); } void caller() { try { execption(); } catch (Exception e) { e.printStackTrace(); } } 

Edit: Estou um pouco enferrujado no meu java, como Josh disse que você pode ter exceções não verificadas que não precisam de uma tentativa / captura como NullPointerException , mas você pode adicionar um, se você acha que uma exceção não verificada pode ser lançada. Exemplo:

 Object obj = null; obj.hashCode();// if you think a NPE will be thrown you can use a try/catch here