catch

Propaganda
Java:
Tratamento de Exceções
Alcides Calsavara
1
Definição
 Exceções
são acontencimentos fora do
comportamento normal ou desejado para um
programa. O gerenciamento de exeções
permite o controle sobre erros e
possivelmente uma solução de contorno.
 Exemplos: entrada em formato inválido,
arquivo corrompido, conexão de rede não
disponível, índice inválido para vetor, ...
2
Exemplo de código frágil
class TestNullP
{ static String s = null;
public static void main(String args[ ])
{
char c1 = s.charAt(2);
// java.lang.NullPointerException (programa pára)
s = new String("Curitiba");
char c2 = s.charAt(2);
// c2 = 'r'
char c3 = s.charAt(8);
// java.lang.StringIndexOutOfBoundsException (programa
pára)
}
} // fim
3
Exemplo modificado com ifs
class TestNullP
{ static String s = null;
public static void main(String args[ ])
{
if (s != null && s.length( ) > 2)
char c1 = s.charAt(2);
s = new String("Curitiba");
if (s != null && s.length( ) > 2)
char c2 = s.charAt(2);
// c2 = 'r'
if (s != null && s.length( ) > 8)
char c3 = s.charAt(8);
} } // fim
4
Exemplo modificado com
tratamento de exceções
class TestNullP
{ static String s = null;
public static void main(String args[])
{
try
{
char c1 = s.charAt(2);
}
catch (Exception e)
{
System.out.println("Exceção " + e);
// Exceção: java.lang.NullPointerException
}
// continua
5
Exemplo modificado com
tratamento de exceções
(cont.)
s = new String("Curitiba");
try
{
char c2 = s.charAt(2);
// c2 = 'r'
}
catch (Exception e)
{
System.out.println("Exceção " + e);
}
// continua
6
Exemplo modificado com
tratamento de exceções
(cont.)
try
{
char c3 = s.charAt(8);
}
catch (Exception e)
{
System.out.println("Exceção " + e);
// Exceção:
java.lang.StringIndexOutOfBoundsException
}
}
} // fim
7
Hierarquia de exceções
Throwable
Error
Exception
...
RuntimeException
IOException
...
...
...
8
Tratando exceções não
relacionadas por herança
class TestNullP
{ static String s = null;
public static void main(String args[ ])
{
try
{
char c1 = s.charAt(2);
}
catch (Exception e)
{
System.out.println("Exceção " + e);
}
catch (Error e)
{
System.out.println("Erro " + e);
}
} // fim
9
A cláusula finally
class TestNullP
{ static String s = null;
public static void main(String args[ ])
{
try
{ char c1 = s.charAt(2); }
catch (Exception e)
{ System.out.println("Exceção " + e); }
catch (Error e)
{ System.out.println("Erro " + e); }
finally
{ System.out.println("Adios, amigos"); } // executado
sempre
}
}
10
A cláusula throws
class TestNullP
{ static String s = null;
static void work( ) throws Throwable
{
try
{ char c1 = s.charAt(2); }
catch (Exception e)
{ System.out.println("Exceção"); throw(e); }
catch (Error e)
{ System.out.println("Erro"); throw(e); }
finally
{ System.out.println("Adios, amigos");}
}
// continua
11
A cláusula throws (cont.)
public static void main(String args[ ])
{
try
{ work( ); }
catch(Throwable t)
{ System.out.println("Erro ou Exceção " + t); }
finally
{ System.out.println("Adios, amigos II");}
}
} // fim
12
Definindo suas próprias
exceções
class ProblemaEmWork extends Exception
{
public ProblemaEmWork( ) { }
public ProblemaEmWork(String msg) { super(msg); }
}
// continua
13
Definindo suas próprias
exceções (cont.)
class TestNullP
{ static String s = null;
static void work( ) throws ProblemaEmWork
{
try
{ char c1 = s.charAt(2); }
catch (Exception e)
{ throw(new ProblemaEmWork("Exceção em work " + e)); }
catch (Error e)
{ throw(new ProblemaEmWork("Erro em work " + e)); }
finally
{ System.out.println("Adios, amigos");}
}
// continua
14
Definindo suas próprias
exceções (cont.)
public static void main(String args[ ])
{
try
{ work(); }
catch(ProblemaEmWork p)
{ System.out.println(p); }
finally
{ System.out.println("Adios, amigos II");}
}
} // fim
15
Download