Java throw and throws Keyword

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 previstas Errorclasse, 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.

Artigos interessantes...