Como capturar exceções em java

Sempre que você usar uma instrução que pode lançar uma exceção em Java, você deve escrever código especial para antecipar e capturar a exceção. Dessa forma, o programa não irá falhar se a exceção ocorre.

Você capturar uma exceção usando um experimentar declaração, que possui a forma geral:

experimentar{ declarações que podem lançar exceções}pegar (-Tipo excepção identificador) { declarações executado quando exceção é lançada}

Aqui, você coloca as declarações que pode lançar uma exceção dentro de um experimentar quadra. Então você capturar a exceção com um pegar quadra.

Aqui estão algumas coisas a notar sobre experimentar afirmações:

  • Você pode codificar mais de um pegar quadra. Dessa forma, se as declarações no experimentar bloco pode lançar mais de um tipo de exceção, você pode pegar cada tipo de exceção em um separado pegar quadra.

  • Para fins de escopo, o experimentar bloco é seu próprio bloco independente, separado do pegar quadra. Como resultado, todas as variáveis ​​que você declare na experimentar bloco não são visíveis para o pegar quadra. Se você quer que eles sejam, declará-los imediatamente antes do experimentar declaração.

  • Você também pode codificar um bloco especial (chamado de finalmente quadra) depois de toda a pegar blocos. Para mais informações sobre codificação finalmente blocos.

  • As várias classes de exceção na API Java são definidos em diferentes pacotes. Se você usar uma classe de exceção que não está definido no padrão java.lang pacote que está sempre disponível, você precisa fornecer um importar declaração para o pacote que define a classe de exceção.

Um exemplo simples

Para ilustrar como a prever uma excepção, aqui está um programa que divide dois números e utiliza um experimentar/pegar declaração para capturar uma exceção se o segundo número acaba por ser zero:

classe pública DivideByZero {public static void main (String [] args) {int a = 5-int b = 0- // você sabe que isso não vai worktry {int c = a / b- // mas você tentar de qualquer maneira} prendedor (ArithmeticException e) {System.out.println ("Opa, você não pode "+ "divida por zero.") -}}}

Aqui, a divisão ocorre dentro de um experimentar bloco, e um pegar alças de bloco ArithmeticException. ArithmethicException é definida pela java.lang, assim que um importar declaração de que não é necessário.

Quando você executar este programa, a seguinte é exibida no console:


Opa, você não pode dividir por zero.

Não há mais nada para ver aqui.

Outro exemplo

Aqui está um exemplo simples de um programa que usa um método para obter um número inteiro válido do usuário. Se o usuário digitar um valor que não é um número inteiro válido, o pegar bloco captura o erro e força o loop para repetir.

. Import java.util * - classe pública getInteger {sc Scanner estática = new Scanner (System.in) -public static void main (String [] args) {System.out.println ("Digite um inteiro: ") -int i = GetAnInteger () - System.out.printlnl ("você digitou " + I) -} public static int GetAnInteger () {while (true) {try {return sc.nextInt () -} catch (InputMismatchException e) {sc.next () - System.out.print ("Isso não é "+ "um inteiro. Tente novamente: ") -}}}}

Aqui, a declaração de que recebe a entrada do usuário e retorna para os métodos chamados é codificado dentro do experimentar quadra. Se o usuário digitar um número inteiro válido, esta afirmação é o único neste método que é executado.

Se o utilizador introduzir dados que não podem ser convertidos para um número inteiro, no entanto, o nextInt um método lança InputMismatchException. Em seguida, essa exceção é interceptado pela pegar bloco - que dispõe de entrada incorreta do usuário chamando o Próximo método, bem como ao exibir uma mensagem de erro. Então o enquanto ciclo repete.

Aqui está o que o console pode parecer para uma execução típica do programa:

Digite um inteiro: trêsIsso não é um inteiro. Tente de novo: 3.001That não é um inteiro. Tente de novo: 3You entrou 3

Aqui estão algumas outras coisas a notar sobre este programa:

Video: Aula 3 Termo - Tratamento de Exceções com Java

  • o importar Especifica declaração java.util. * para importar todas as classes da java.util pacote. Dessa forma, a InputMismatchException classe é importado.

  • o Próximo método deve ser chamado no pegar bloco de dispor de uma entrada inválida do usuário porque o nextInt método deixa o valor de entrada na Scanner‘S de fluxo de entrada se uma InputMismatchException é lançada. Se você omitir a instrução que chama Próximo, a enquanto laço mantém lê-lo, lança uma exceção, e exibe uma mensagem de erro em um loop infinito.

    Este erro foi encontrado a maneira dura. (A única maneira de fazê-lo parar é para fechar a janela do console.)


Publicações relacionadas