Cláusula Catch

Eu esperava que o programa abaixo capturasse as duas exceções simultaneamente,mas isso não acontece.Quando a = zero captura o primeiro catch e naõ captura o segundo.Se a=1(um) o segundo catch faz a captura corretamente.Na documentação não encontrei nada sobre isso.Será que estou cometendo algum erro .

class DoisCatch { public static void main String args[]) { try { int a=args.length; System.out.println( a + "argumentos"); int b=23/a; //se não digitar nada na linha de comando a=0 int arrayA={1}; arrayA[3]=134 //Espero uma exceção aqui } catch(ArithmeticException e) { System.out.println(" Divisão por zero " +e); } catch(ArrayIndexOutOfBoundsException e) { System.out.println ("ArrayOOBounds "+e); } } }

Voce nunca vai conseguir capturar as duas excecoes de uma vez, pq o codigo é desviado para o catch sempre que uma excecao acontece. A menos que vc use dois blocos try/catch separados, mas aí é outra história :smiley:

pra capturara as 2 simuntanamente vc tem que fazer isso

class DoisCatch { 
        public static void main String args[]) { 
          try { 
            int a=args.length; 
            System.out.println( a + "argumentos"); 
            int b=23/a; //se não digitar nada na linha de comando a=0 
          } 
          catch(ArithmeticException e) { 
             System.out.println(" Divisão por zero " +e); 
          } 
          try { 
            int arrayA={1}; 
            arrayA[3]=134  //Espero uma exceção aqui 
          }
          catch(ArrayIndexOutOfBoundsException e) { 
                System.out.println ("ArrayOOBounds "+e); 
          } 
        } 
} 

Agradeço a atençao dispensada.RBarcia

disponha
o que não falta aqui é viciados pra responder suas duvidas :vamp:

Quando é gerada uma exceção um objeto contendo os detalhes do erro é retornado e pela regra de Classes e SubClasses no primeiro catch que este objeto retornado se encaixar o bloco será executado.
Por isso o comando catch(Exception e) deve ser declarado por último. Senão ele pegaria quase todos os erros e os outros catchs seriam declarados em vão.

Neste caso não seria melhor usar um if para checar os argumentos passados?

É melhor mesmo fazer um if ou esperar atirar uma exceção?

if(i==0) { Erro }

catch(){Erro}

Também gostaria de saber.
Pq eu acho que não se perde muito tempo de processamento colocando try e catch.

A desvantagem que eu acho, é que as mensagens de erro em um try/catch, são mais genericas.