Java Uncathed Exceptions <r /> Antes de aprender a lidar com exceções em um programa, é benéfico ver o que acontece se você não lidar com elas. O applet a seguir inclui uma expressão que deliberadamente causa um erro dividido em zero.
classe Exc0 {public static void main (string args []) {int d = 0;
Quando o sistema de tempo de execução do Java verifica a situação dividida por zero, ele constrói um novo objeto de exceção e lança a exceção. Isso faz com que a execução do EXC0 pare, porque uma vez que uma exceção é lançada, ela deve ser capturada por um manipulador de exceção e processada imediatamente. Neste exemplo, não fornecemos nenhum de nossos próprios manipuladores de exceção; portanto, a exceção é capturada pelo manipulador padrão do sistema de tempo de execução do Java. Qualquer exceção que não seja capturada pelo seu programa será tratada pelo manipulador padrão. O manipulador padrão exibe uma string descrevendo a exceção, imprime o rastreamento da pilha onde a exceção ocorre e encerra o programa.
Aqui está a saída gerada pelo intérprete de tempo de execução Javajdk padrão para executar o programa:
java.lang.arithmeticexception: / por zero em Exc0.main (Exc0.java:4)
Observe como o nome da classe Exc0, nome do método principal, nome do arquivo Exc0.java e linha número 4 estão incluídos em uma faixa de uso de pilha simples. Além disso, observe que o tipo de exceção jogado é uma subclasse de exceção chamada arithmeticexception, que descreve mais claramente que tipo de método de erro. Discuta mais adiante neste capítulo, o Java fornece vários tipos de exceção interno que correspondem a diferentes tipos de erros de tempo de execução que podem ser gerados.
A faixa da pilha exibirá a sequência de chamadas de método que resultaram no erro. Por exemplo, aqui está outra versão do programa anterior que introduz o mesmo erro, mas o erro é gerado em outro método que não seja o método principal ():
classe Exc1 {Subrutina Void estática () {int d = 0;
Os resultados da pilha da pilha do manipulador de exceção padrão mostram como a pilha de chamadas inteira é exibida:
java.lang.arithmeticexception: / por zero em exc1.subroutine (exc1.java:4) em exc1.main (exc1.java:7)
Como você pode ver, a parte inferior da pilha é a linha 7 do Main, que chama o método Sub -rotina (). Este método causa uma exceção na linha 4. A pilha de chamadas é importante para a depuração, pois identifica as etapas exatas que levam ao erro.
Aninhamento de declarações de tentativa de Java
Experimente as declarações podem ser aninhadas. Ou seja, uma declaração de tentativa pode estar dentro de outro bloco de tentativa. Toda vez que você entra em uma declaração de tentativa, a exceção é antes e depois dos relacionamentos serão empurrados para a pilha. Se uma instrução TRY interna não contiver um manipulador de captura com exceções especiais, a pilha será exibida e o manipulador de captura da próxima instrução TRY verificará se ela corresponde a ela. Esse processo continuará até que uma declaração de captura corresponda com sucesso ou até que todas as declarações de tentativa aninhadas estejam esgotadas. Se nenhuma declaração de captura corresponder, o sistema de tempo de execução do Java lidará com essa exceção. Aqui está um exemplo de uso de declarações de tentativa aninhada:
// Um exemplo de declarações de tentativa aninhada.Class Nesttry {public static void main (string args []) {try {int a = args.length; Divide -By-Zero Exception. Divide -By-Zero Exception será gerado pelo seguinte código. OU T -OF Exceção. e) {System.out.println ("Índice de Array fora dos limites:" + e);
Como você pode ver, o programa ninho em outro bloco de tentativa em um bloco de tentativa. O programa funciona da seguinte forma: Quando você executa o programa sem parâmetros da linha de comando, o bloco de tentativa externo gerará uma exceção dividida por zero. O programa é executado sob uma condição de parâmetro da linha de comando e um erro dividido por um bloco de tentativa aninhado resulta em um erro divisível. Como o bloco interno não corresponde a essa exceção, ele passará a exceção ao bloco de tentativa externa, onde a exceção é processada. Se você executar o programa com dois parâmetros da linha de comando, uma exceção de limite de matriz será gerada pelo bloco de tentativa interno. Os seguintes resultados ilustram cada caso:
C:/> Java NesttryDivida por 0: java.lang.arithmeticexception:/por zeroc:/> java ninho onea = 1divida por 0: java.lang.arithmeticexcept OF-BOUNDS: java.lang.arrayIndexoutOfBoundSexception
Quando há uma chamada de método, o ninho das declarações de tentativa pode acontecer muito secretamente. Por exemplo, você pode ligar para um método em um bloco de tentativa. Dentro deste método, há outra declaração de tentativa. Nesse caso, a tentativa dentro do método ainda está aninhada no bloco de tentativa que chama o método externamente. A seguir, é apresentada uma modificação do exemplo anterior, e os blocos de tentativa aninhados são movidos para o interior do método Nesttry ():
/* Tente as instruções podem ser implicitamente aninhadas por meio de chamadas para métodos. -Exceção zero será gerada pelo código a seguir. F- Exceção de limites. .out .println ("índice de matriz fora dos limites:" + e); Presente, a seguinte declaração gerará uma exceção de divisão por zero. ) {System.
A saída deste programa é a mesma do exemplo anterior.