[Resolvido]Dúvida sobre exercício 11.20 Deitel (Exceções)

6 respostas
C

Bom dia a todos,

Estou tentando resolver a questão 11.20 do livro do Deitel (8ª ed.) sobre exceções e fiquei na dúvida se a minha resolução está correta.

Gostaria de pedir, por favor, que alguém me dissesse isso e, caso não esteja certo o meu resultado, o porquê disso e como seria o certo, se for possível.

Agradeço muito desde já.

11.20 (Falha de construtor) Escreva um programa que mostra um construtor que passa informações sobre a falha do construtor para um handler de exceção. Defina a classe SomeClass, que lança um Exception no construtor. O seu programa deve tentar criar um objeto do tipo SomeClass e capturar a exceção que é lanaçada do construtor.

O meu código:

package excecao30;
public class SomeClass 
{
    public SomeClass() throws Exception
    {
        throw new Exception("Falha do construtor!!!");
    }
    public void lancaExcecao()
    {
        try
        {
            System.out.println("Metodo lancaExcecao!!!");
        }
        catch(Exception e1)
        {
            System.err.println(e1);
        }
    }
}

package excecao30;
public class Excecao 
{
    public static void main(String[] args)
    {
        try
        {
            SomeClass someclass = new SomeClass();
            someclass.lancaExcecao();
        }
        catch(Exception e1)
        {
            System.err.println(e1);
        }
    }
}

run:
java.lang.Exception: Falha do construtor!!!
BUILD SUCCESSFUL (total time: 1 second)

6 Respostas

rsantik

Na minha opinião, está correto.

C

@rsantik,

Agradeço pela resposta, amigo!

Fique com Deus!!!

C

@wellington.nogueira,

Realmente, não precisava do método lancaExcecao. O programa funciona bem sem ele.

Quanto ao System.out estar dentro do bloco try-catch, eu vejo muito esse exemplo no livro do Deitel!

Agradeço pela resposta, amigo!!!

Posto novamente o código alterado, graças à boa dica do wellington.nogueira.

package excecao30b;
public class SomeClass 
{
    public SomeClass() throws Exception
    {
        throw new Exception("Falha do construtor!!!");
    }
}

package excecao30b;
public class Excecao 
{
    public static void main(String[] args)
    {
        try
        {
            SomeClass someclass = new SomeClass();
        }
        catch(Exception e1)
        {
            System.err.println(e1);
        }
    }
}

run:
java.lang.Exception: Falha do construtor!!!
BUILD SUCCESSFUL (total time: 1 second)
C

@wellington.nogueira,

Mais uma vez, agradeço pela resposta e explicação.

Ficou tudo mais bem claro agora!!!

WellingtonRamos

Eu não entendi a necessidade do método lancaExcecao e do porque o System.out estar dentro de um bloco try-catch.

Quanto ao construtor, está certo.

WellingtonRamos

cjbl:
@wellington.nogueira,

Realmente, não precisava do método lancaExcecao. O programa funciona bem sem ele.

Quanto ao System.out estar dentro do bloco try-catch, eu vejo muito esse exemplo no livro do Deitel!

Agradeço pela resposta, amigo!!!

Posto novamente o código alterado, graças à boa dica do wellington.nogueira.

Apenas para melhorar o entendimento, não é que o programa funciona bem sem o método, da forma como foi escrito, esse é um método que nunca será alcançado.
Se o construtor tivesse algo como:

public SomeClass() throws Exception{ if(System.currentTimeMillis() % 2) throw new Exception(); } geraria um “fator de dúvida” onde, em alguns casos seria lançada exceção e em outros casos, continuaria normalmente e o método seria alcançado.
Outra coisa é que o método lancaExcecao não faz o que se propõe. Ele não gera ou lança qualquer exceção. Mas sim, imprime informações sem fazer mais nada.

Tenho uma edição antiga do livro do Deitel (3ªEd) e não me lembro de um sysout envolvido em try-catch. Mas tudo bem (precisaria revisar o livro). O bloco try-catch só faz sentido se e somente se o código utilizado puder lançar exceções (mesmo que sejam do tipo RuntimeException) e não é o caso.
Mas com outros códigos, pode ser que seja válido.

Criado 11 de março de 2013
Ultima resposta 11 de mar. de 2013
Respostas 6
Participantes 3