Neste tutorial, aprenderemos a usar as palavras-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 ao executar-time.For exemplo:
ArithmeticException,NullPointerException,ArrayIndexOutOfBoundsException, excepções previstasErrorclasse, etc. - Exceções verificadas: elas são verificadas 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 exceções não verificadas ocorrem devido a erros de programação. E é uma boa prática corrigi-los em vez de manipulá-los.
Este tutorial agora se concentrará em como lidar com exceções verificadas usando throwe throws.
Java throws palavra-chave
Usamos a throwspalavra - chave na declaração do método para declarar o tipo de exceções que podem ocorrer dentro dele.
Sua sintaxe é:
accessModifier returnType methodName() throws ExceptionType1, ExceptionType2… ( // code )
Como você pode ver na sintaxe acima, podemos usar throwspara 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); ) ) )
Resultado
java.io.FileNotFoundException: test.txt (nenhum arquivo ou diretório)
Quando executamos este programa, se o arquivo test.txtnão existe, FileInputStreamlança um FileNotFoundExceptionque estende a IOExceptionclasse.
Se um método não manipular exceções, o tipo de exceções que podem ocorrer dentro dele deve ser especificado na throwscláusula para que os métodos mais acima na pilha de chamadas possam manipulá-los ou especificá-los usando as throwspróprias palavras-chave.
O findFile()método especifica que um IOExceptionpode ser lançado. O main()método chama esse método e trata a exceção se ela for lançada.
Lançando várias exceções
Veja como podemos lançar várias exceções usando a throwspalavra - 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()método especifica que ele pode jogar NullPointerException, IOExceptione, InvalidClassExceptionem sua throwscláusula.
Observe que não tratamos do NullPointerException. Isso ocorre porque é uma exceção não verificada. Não é necessário especificá-lo na throwscláusula e tratá-lo.
lança Vs palavra-chave. tente … pegue … finalmente
Pode haver vários métodos que podem causar exceções. Escrever try… catchpara 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 no método atual.
Java throw palavra-chave
A throwpalavra-chave é usada para lançar explicitamente uma única exceção.
Quando uma exceção é lançada, o fluxo de execução do programa é transferido de um trybloco para outro catch. Usamos a throwpalavra - chave dentro de um método.
Sua sintaxe é:
throw throwableObject;
Um objeto que pode ser jogado é uma instância de classe Throwableou subclasse da Throwableclasse.
Exemplo 2: Java throw palavra-chave
class Main ( public static void divideByZero() ( throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) )
Resultado
Exceção no thread "main" java.lang.ArithmeticException: Tentando dividir por 0 em Main.divideByZero (Main.java:3) em Main.main (Main.java:7) status de saída 1
Neste exemplo, estamos jogando explicitamente um ArithmeticException.
Nota: 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()); ) ) )
Resultado
Arquivo não encontrado
O findFile()método lança um IOExceptioncom a mensagem que passamos para seu construtor.
Observe que, como é uma exceção verificada, devemos especificá-la na throwscláusula.
Os métodos que chamam esse findFile()método precisam tratar essa exceção ou especificá-la usando a throwsprópria palavra-chave.
Tratamos essa exceção no main()método. O fluxo de execução do programa é transferido de trybloco para catchbloco quando uma exceção é lançada. Portanto, o resto do código no trybloco é ignorado e as instruções no catchbloco são executadas.








