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ê pega uma exceção usando um experimentar declaração, que possui a forma geral:

experimentar{declarações que podem lançar exceções}pegar (-Tipo de exceçã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 declaraçõ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 separada pegar quadra.

  • Para fins de escopo, o experimentar bloco é o seu próprio bloco de auto-contido, separado do pegar quadra. Como resultado, todas as variáveis ​​você declarar 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 todo o 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 na norma 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 usa 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} catch (ArithmeticException e) {System.out.println ( "Opa, você não pode" + "divisão por zero".) -}}}

Aqui, a divisão ocorre dentro de um experimentar bloco, e uma 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 inserir 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.println ( "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 número inteiro Tente de novo:.") -}}}}

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 método lança um 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, exibindo uma mensagem de erro. Então o enquanto ciclo se 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 número inteiro. Tente de novo: 3.001That não é um número inteiro. Tente de novo: 3You entrou 3

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

  • o importar Especifica declaração java.util. * para importar todas as classes da java.util pacote. Dessa forma, o 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 ScannerDe 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, gera 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.)

    image0.jpg

menu