Dev (Back & Front)ARTIGO

Tratamento de exceções na prática

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!

é Bacharel em Sistemas de Informação e Especialista em Gestão e Estratégia de Negócios. Trabalha com TI desde 2003 e possui as certificações SCJP 5 e SCM. Trabalhou na IBM Brasil como Analista Programador Java, passou pelo laboratório da Enterprise Computing Lab (ECL) HP como Software Engineer, Ci&T como Engenheiro de Software em projeto JEE. Tem experiência internacional em Índia, Dubai e Londres. Atualmente é cofundador da ITSLabs (www.itslabs.com.br), uma start-up focada na criação de produtos web e mobile para start-ups. Também é autor dos livros "Guia do Exame SCJP", "Guia Prático JEE com Frameworks" e "TDD na prática".

Ver perfil