Olá Pessoal!
Continuando o artigo sobre Tratamento de Exceções, hoje veremos os casos de uso e os erros de compilações na prática. No artigo, teremos o código e logo a seguir uma breve explicação da situação (em algumas classes o próprio comentário será a explicação).
Procurei apresentar os casos mais comuns sobre o assunto. Espero que gostem do post.
Let’s go…
Artigo Relacionado:
Tratamento de Exceções em Java
Code 1:
public class RutExc {
public static void main(String[] args) {
try{
int[] array = new int[-2];
}catch(ArrayIndexOutOfBoundsException e){
e.printStackTrace();
}}}Explicação: O código acima compila e executa, mas, será exibida uma mensagem Exception in thread “main” java.lang.NegativeArraySizeException já que não é permitido o uso de valor negativo na declaração do tamanho do array. O código compila porque não há nada de errado na estrutura do código, o que aconteceu foi apenas uma falha do programador. Na clausula catch{} o programador pede para mostrar o caminho de onde vem a exceção, mas, o recomendado seria o tratamento para esse tipo de exceção.
Regras a serem seguidas:
- as exceções mais específicas (subclasses) devem estar acima da sua superclasse na clausula catch{} (em caso de dúvida sobre a hierarquia consulte a imagem hierárquica no post anterior ).
Code 2:
public class EspExc {
public static void main(String[] args) {
try{}
catch(RuntimeException e){}
/* valido o codigo compila RuntimeException é sub de Exception, clausula catch válida
*/
catch(Exception e){}
}}
Code 3
public class NoCom {
public static void main(String[] args) {
try{}
catch(Exception e){}
catch(RuntimeException e){}
/* código aqui nem compila
* clausula catch errada, tenho uma catch com super e outro com sub, que jamais sera alcançada
*/}}Code 4:
- todo método que lançar uma exceção verificada deve declarar (throws) ou tratar (catch{}). Senão o código não compila.
public class Trat {
static void met(){
suta();
}
static void suta(){
throw new Exception();
}
/* o codigo nao compila
* o metodo suta() lança uma exceção verificada, é requisito tratar ou declarar.
*/
public static void main(String[] args) {
met();
}}Exception in thread “main” java.lang.Error: Unresolved compilation problem:
Code 5
public class VAlid {
void val() throws Exception{
//metodo perigoso lanca uma exceção
try{
valid();
}catch(Exception e){}}
//informa que o método lanca uma exceção do tipo Exception
void valid() throws Exception{
throw new Exception();
}
/* codigo compila normal ja que tratei a excecao que o metodo pode lancar
*/
public static void main(String[] args) { }
}Vou ficando por aqui. Um forte abraço a todos e até a próxima!







