JavaRush /Blogue Java /Random-PT /As 10 principais perguntas sobre exceções em Java
raynn
Nível 31
Нижний Новгород

As 10 principais perguntas sobre exceções em Java

Publicado no grupo Random-PT
O artigo descreve as 10 perguntas mais frequentes sobre exceções em Java. As 10 principais perguntas sobre exceções em Java - 1

1. Verificável e não verificável

Resumindo, as exceções verificadas devem ser capturadas explicitamente no corpo do método ou declaradas na seção throws do método. Exceções não verificadas são causadas por problemas que não podem ser resolvidos, como divisão por 0, ponteiro nulo, etc. As exceções verificadas são especialmente importantes porque você espera que outros desenvolvedores que usam sua API saibam como lidar com exceções. Por exemplo, IOException é uma exceção verificada comumente usada, enquanto RuntimeException é uma exceção não verificada. Antes de continuar lendo, verifique Diagrama de exceção hierárquica em Java .

2. Melhor forma de lidar com exceções

Se a exceção puder ser tratada corretamente, ela deverá ser capturada, caso contrário, deverá ser encaminhada.

3. Por que as variáveis ​​definidas em try não podem ser usadas em catch ou finalmente?

No trecho de código a seguir, as linhas declaradas em um bloco try não podem ser usadas em um bloco catch. Este código não será compilado.
try {
	File file = new File("path");
	FileInputStream fis = new FileInputStream(file);
	String s = "inside";
} catch (FileNotFoundException e) {
	e.printStackTrace();
	System.out.println(s);
}
A razão é que não se sabe exatamente onde no bloco try a exceção pode ter sido lançada. É possível que a exceção tenha sido lançada antes do objeto ser declarado. E isso é verdade para este exemplo.

4. Por que Double.parseDouble(null) e Integer.parseInt(null) lançam exceções diferentes?

É isso mesmo, eles levantam diferentes exceções. Este é um problema do JDK. Eles foram simplesmente projetados por pessoas diferentes e você não deve se preocupar muito com isso.
Integer.parseInt(null);
// вызывает java.lang.NumberFormatException: null

Double.parseDouble(null);
// вызывает java.lang.NullPointerException

5. Exceções básicas de tempo de execução em Java

Aqui estão alguns deles:
IllegalArgumentException
ArrayIndexOutOfBoundsException
Eles podem ser usados ​​em uma instrução if quando a condição não for atendida, como aqui:
if (obj == null) {
   throw new IllegalArgumentException("obj не может быть равно null");

6. É possível capturar múltiplas exceções em um bloco catch?

A resposta é sim. Contanto que as classes dessas exceções possam ser rastreadas na hierarquia de herança de classe até a mesma superclasse, somente essa superclasse poderá ser usada.

7. Um construtor pode lançar exceções?

A resposta é sim. Um construtor é apenas um tipo especial de método. Aqui está um exemplo de código.

8. Lançamento de exceções no bloco final

Em princípio, você pode fazer isso legalmente:
public static void main(String[] args) {
	File file1 = new File("path1");
	File file2 = new File("path2");
	try {

		FileInputStream fis = new FileInputStream(file1);
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} finally {
		try {
			FileInputStream fis = new FileInputStream(file2);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
}
Mas para manter a legibilidade do código, você precisa declarar o bloco aninhado try-catchcomo um novo método e inserir uma chamada para esse método no bloco finally.
public static void main(String[] args) {
	File file1 = new File("path1");
	File file2 = new File("path2");
	try {

		FileInputStream fis = new FileInputStream(file1);
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} finally {
		methodThrowException();
	}
}

9. É possível usar return em um bloco final?

Sim você pode.

10. Por que os desenvolvedores lidam com exceções silenciosamente?

Por exemplo, esses trechos de código aparecem frequentemente. Se o tratamento adequado de exceções é tão importante, por que os desenvolvedores continuam a escrevê-lo dessa maneira?
try {
     ...
} catch(Exception e) {
     e.printStackTrace();
}
É mais fácil ignorar. Mas mesmo que isso seja feito com frequência, não significa que seja correto. Links:
  1. Exceções não verificadas em Java
  2. A raiz de uma árvore de exceções hierárquica em Java
  3. Dúvidas sobre exceções no stackoverflow
Artigo original
O que mais ler:

Exceções em Java

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION