Java joga e joga
Java arremessos e arremessos
Neste tutorial, aprenderemos a usar a palavra-chave throw e throws para tratamento de exceções com a ajuda de exemplos.
Em Java, as exceções podem ser categorizadas em dois tipos:
- Exceções não verificadas: Eles não são verificados em tempo de compilação, mas em tempo de execução. Por exemplo:
ArithmeticException
,NullPointerException
,ArrayIndexOutOfBoundsException
, exceções emError
aula etc. - Exceções verificadas: Eles são verificados em tempo de compilação. Por exemplo,
IOException
,InterruptedException
, etc.
Consulte Exceções Java para aprender em detalhes sobre exceções marcadas e não verificadas.
Normalmente, não precisamos lidar com exceções não verificadas. É porque as exceções não verificadas ocorrem devido a erros de programação. E é uma boa prática corrigi-los em vez de manuseá-los.
Este tutorial agora se concentrará em como lidar com exceções verificadas usando
throw
e throws
. Java lança palavra-chave
Usamos o
throws
palavra-chave na declaração do método para declarar o tipo de exceção que pode ocorrer dentro dele. Sua sintaxe é:
accessModifier returnType methodName() throws ExceptionType1, ExceptionType2 … {
// code
}
Como você pode ver na sintaxe acima, podemos usar
throws
para declarar várias exceções. Exemplo 1:Java lança palavra-chave
import java.io.*;
class Main {
public static void findFile() throws IOException {
// code that may produce IOException
File newFile=new File("test.txt");
FileInputStream stream=new FileInputStream(newFile);
}
public static void main(String[] args) {
try{
findFile();
} catch(IOException e){
System.out.println(e);
}
}
}
Saída
java.io.FileNotFoundException: test.txt (No such file or directory)
Quando executamos este programa, se o arquivo
test.txt
não existe, FileInputStream
lança um FileNotFoundException
que estende o IOException
classe. Se um método não trata exceções, o tipo de exceção que pode ocorrer dentro dele deve ser especificado no
throws
cláusula para que os métodos mais acima na pilha de chamadas possam tratá-los ou especificá-los usando throws
palavra-chave em si. O
findFile()
especifica que um IOException
pode ser jogado. O main()
O método chama esse método e trata a exceção se for lançada. Lançando várias exceções
Veja como podemos lançar várias exceções usando o
throws
palavra-chave.
import java.io.*;
class Main {
public static void findFile() throws NullPointerException, IOException, InvalidClassException {
// code that may produce NullPointerException
… … …
// code that may produce IOException
… … …
// code that may produce InvalidClassException
… … …
}
public static void main(String[] args) {
try{
findFile();
} catch(IOException e1){
System.out.println(e1.getMessage());
} catch(InvalidClassException e2){
System.out.println(e2.getMessage());
}
}
}
Aqui, o
findFile()
especifica que ele pode lançar NullPointerException
, IOException
e InvalidClassException
em seu throws
cláusula. Observe que não lidamos com o
NullPointerException
. Isso ocorre porque é uma exceção não verificada. Não é necessário especificá-lo no throws
cláusula e tratá-la. lança palavras-chave vs. tente...pegue...finalmente
Pode haver vários métodos que podem causar exceções. Escrevendo
try...catch
pois cada método será tedioso e o código se tornará longo e menos legível. throws
também é útil quando você verificou a exceção (uma exceção que deve ser tratada) que não deseja capturar em seu método atual. Palavra-chave de lançamento Java
O
throw
palavra-chave é usada para lançar explicitamente uma única exceção. Quando uma exceção é lançada, o fluxo de execução do programa é transferido do
try
bloco para o catch
quadra. Usamos o throw
palavra-chave dentro de um método. Sua sintaxe é:
throw throwableObject;
Um objeto throwable é uma instância da classe
Throwable
ou subclasse do Throwable
classe. Exemplo 2:palavra-chave de lançamento Java
class Main {
public static void divideByZero() {
throw new ArithmeticException("Trying to divide by 0");
}
public static void main(String[] args) {
divideByZero();
}
}
Saída
Exception in thread "main" java.lang.ArithmeticException: Trying to divide by 0 at Main.divideByZero(Main.java:3) at Main.main(Main.java:7) exit status 1
Neste exemplo, estamos lançando explicitamente um
ArithmeticException.
Observação:
ArithmeticException
é uma exceção não verificada. Geralmente não é necessário lidar com exceções não verificadas. Exemplo 3:lançando exceção verificada
import java.io.*;
class Main {
public static void findFile() throws IOException {
throw new IOException("File not found");
}
public static void main(String[] args) {
try {
findFile();
System.out.println("Rest of code in try block");
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
Saída
File not found
O
findFile()
método lança um IOException
com a mensagem que passamos para seu construtor. Observe que, como é uma exceção verificada, devemos especificá-la no
throws
cláusula. Os métodos que chamam este
findFile()
precisa lidar com essa exceção ou especificá-la usando throws
palavra-chave em si. Tratamos essa exceção no
main
()
método. O fluxo de execução do programa é transferido do try
bloquear para catch
bloco quando uma exceção é lançada. Então, o resto do código no try
bloco é ignorado e instruções no catch
bloco são executados. Java
- Variáveis e literais Java
- Entrada e Saída Java Basic
- Expressões, instruções e blocos Java
- Classe e objetos Java
- Classe abstrata Java e métodos abstratos
- Java aninhado e classe interna
- Java captura múltiplas exceções
- Autoboxing e unboxing Java
- Java String replace(), replaceAll() e método replaceFirst()
- Métodos Java String toLowercase() e toUpperCase()