Boa tarde a todos,
Estou estudando Java pelo livro do Deitel e li que uma nova classe de exceção típica contém somente quatro construtores:
1) Um que não recebe nenhum argumento e passa mensagem de erro padrão String para o construtor de superclasse;
2) Um que recebe uma mensagem de erro personalizada como uma String e passa-a para o construtor de superclasse;
3) Um que recebe uma mensagem de erro personalizada como uma String e um Throwable (exceções encadeadas) e passa ambos para o construtor de superclasse;
4) Um que recebe um Throwable (exceções encadeadas) e passa-o para o construtor de superclasse;
Gostaria de pedir, por favor, se alguém poderia me esclarecer as seguintes dúvidas:
a) Por que são precisos esses quatros construtores?
b) Com que finalidade esse construtor passa dados para o construtor da superclasse?
c) Como posteriormente esses dados passados para o construtor da superclasse poderiam ser acessados?
Eu tentei também fazer o seguinte código exemplo, mas não sei se a sua lógica faz sentido.
package excecao25;
public class TratamentoNovo extends Exception
{
int valor;
public TratamentoNovo()
{
super();
}
public TratamentoNovo(final String msg)
{
super(msg);
}
public TratamentoNovo(final Throwable t)
{
super(t);
}
public TratamentoNovo(final String msg, final Throwable t)
{
super(msg,t);
}
public TratamentoNovo(int valor)
{
this.valor = valor;
}
@Override
public String toString()
{
return "Excecao: o denominador eh " + valor;
}
}
package excecao25;
public class Teste
{
public static void Metodo(int valor) throws TratamentoNovo
{
try
{
Calcula(valor);
}
catch(TratamentoNovo t1)
{
System.err.println(t1);
}
}
public static void Calcula(int valor) throws TratamentoNovo
{
Throwable t = null;
if (valor == 1)
throw new TratamentoNovo();
if (valor == 2)
throw new TratamentoNovo("Que valor");
if (valor == 3)
throw new TratamentoNovo(t);
if (valor == 4)
throw new TratamentoNovo("Que valor",t);
if (valor == 5)
throw new TratamentoNovo(valor);
}
}
package excecao25;
public class Excecao
{
public static void main(String[] args)
{
try
{
Teste.Metodo(3);
}
catch(Exception e1)
{
System.err.println(e1);
}
}
}
Se alguém puder me ajudar com as dúvidas acima e com a análise deste código, eu agradeceria muito!