Java Tente e capturar o uso <r />, embora o manipulador de exceção padrão fornecido pelo sistema de tempo de execução Java seja útil para depuração, você geralmente deseja lidar com exceções. Existem dois benefícios em fazer isso. Primeiro, ele permite corrigir erros. Segundo, impede que o programa termine automaticamente. A maioria dos usuários está chateada (para dizer o mínimo) sobre a impressão de faixas da pilha quando o programa termina e sempre que ocorre um erro. Felizmente, isso é fácil de evitar.
Para evitar e lidar com um erro de tempo de execução, você só precisa colocar o código que deseja monitorar em um bloco de tentativa. Seguindo o bloco de tentativa, incluindo uma cláusula de captura que especifica o tipo de erro que você deseja capturar. É muito simples de concluir esta tarefa.
classe Exc2 {public static void main (string args []) {int d, a; impresso. ");} Catch (arithmeticexception e) {// Catch divide-by-zero error System.out.println (" Divisão por zero. ");} System.out.println (" After C ATCH Declarent ") ; O programa sai da seguinte maneira:
Divisão por zero. Após a declaração de captura.
Observe que a chamada para println () no bloco de tentativa nunca é executada. Depois que a exceção é aumentada, o controle do programa é transferido do bloco de tentativa para o bloco de captura. A execução nunca "retorna" do bloco de captura para o bloco de tentativa. Então, "isso não será impresso".
Não será exibido. Depois que a declaração de captura é executada, o controle do programa continua a partir da linha a seguir de todo o mecanismo de tentativa/captura.
Uma tentativa e sua declaração de captura formam uma unidade. O escopo da cláusula de captura é limitado à declaração definida antes da declaração de tentativa. Uma declaração de captura não pode capturar a exceção levantada por outra declaração de tentativa (a menos que seja um caso de declaração de tentativa aninhado).
As declarações protegidas por tentativas devem estar dentro de uma chave (ou seja, elas devem estar em um bloco). Você não pode usar tente sozinho.
O objetivo de construir uma cláusula de captura é resolver exceções e continuar a funcionar como se o erro não tivesse ocorrido. Por exemplo, no programa a seguir, cada um para o loop é repetido para obter dois números inteiros aleatórios. Esses dois números inteiros são divididos pela outra parte, respectivamente, e o resultado é usado para dividir 12345. O resultado final existe em a. Se uma operação de divisão resultar em um erro de divisão zero, ela será capturada, o valor de A será definido como zero e o programa continuará sendo executado.
// lidera uma exceção e mova -se em.import java.util.random; classe handleerror {public static void main (string args []) {int a = 0, b = 0, c = 0; ); {System.out.println ("Divisão por zero.");Mostre uma descrição de exceção
Sobrecarretas de arremesso do método ToString () (definido pelo objeto), por isso retorna uma string que contém a descrição da exceção. Você pode exibir a descrição da exceção passando um parâmetro para a exceção em println (). Por exemplo, o bloco de captura do programa anterior pode ser reescrito como
Catch (arithmeticexception e) {System.out.println ("Exceção:" + e); Quando esta versão substitui a versão no programa original, o programa é executado sob o intérprete Javajdk padrão, e cada erro é dividido por zero exibe a seguinte mensagem:
Exceção: java.lang.arithmeticexception: / por zero
Embora não haja valores especiais no contexto, a capacidade de exibir uma descrição de exceção é valiosa em outros casos - especialmente quando você experimenta e depura uma exceção.
Uso da instrução Java Multiple Catch <r /> Em alguns casos, várias exceções podem ser causadas por um único segmento de código. Para lidar com essa situação, você pode definir duas ou mais cláusulas de captura, cada uma das quais captura uma exceção de um tipo. Quando uma exceção é aumentada, cada cláusula de captura é verificada na sequência e a primeira cláusula correspondente ao tipo de exceção é executada. Quando uma declaração de captura é executada, outras cláusulas são ignoradas e a execução continua a partir do código após o bloco de tentativa/captura. O exemplo a seguir projeta dois tipos de exceção diferentes:
// Demonstrar múltiplos instruções de captura.class multicatch {public static void main (string args []) {try {int a = args.length; ; out .println ("índice de matriz oob:" + e);O programa é executado na condição de partida sem os parâmetros da linha de comando, resultando em uma exceção dividida em zero porque A é 0. Se você fornecer um parâmetro de linha de comando, ele sobreviverá, definindo um valor maior que zero. Mas isso causará a exceção do ArrayIndexoutfException porque a matriz inteira C tem 1 comprimento e o programa tenta atribuir um valor a C [42].
Aqui está a saída do programa em execução em duas situações diferentes:
C:/> java multicatcha = 0Divida por 0: java.lang.arithmeticexception:/por zero após tentar/capturar blocos.c:/> java multicatch testarga = 1array Índice oob: j ava.lang.arrayIndexoutOfboundSexception Após a tentativa/captura de blocos.
Quando você usa uma instrução de várias capturas, é importante lembrar que as subclasses de exceção devem ser usadas antes de qualquer uma das classes pais. Isso ocorre porque o uso da declaração de captura da classe pai captura exceções para o tipo e todos os seus tipos de subclasse. Dessa forma, se a subclasse estiver por trás da classe pai, a subclasse nunca chegará. Além disso, o código que não pode ser alcançado em Java é um erro. Por exemplo, considere o seguinte procedimento:
/* Este programa contém um erro. Uma subclasse deve vir antes de sua superclasse em uma série de instruções de captura. args []) {tente {int a = 0; rithmeticexception é uma subclasse da exceção.Se você tentar compilar o programa, receberá uma mensagem de erro de que a segunda declaração de captura não chegará porque a exceção foi capturada. Como o arithmeticexception é uma subclasse de exceção, a primeira declaração de captura lidará com todos os erros orientados a exceção, incluindo a aritmeticexception. Isso significa que a segunda declaração de captura nunca será executada. Para modificar o programa, reverta a ordem das duas instruções de captura.