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
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);
}
}
}
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.