Controle do Fluxo

Olá Pessoal,

Estou não estou conseguindo resolver os erros deste código abaixo:

public class TestExceptions {
        
    public static void main(String[] args) {
        String test = "no";
        try
        {
        	System.out.println("start try");
        	doRisky(test);
        	System.out.println("end try");
        }
        catch (ScaryException se)
        {
        	System.out.println("finally");
        }
        System.out.println("end of main");
    }
    
    static void doRisky(String test) throws  ScaryException 
    {
    	System.out.println("start risky");
    	if ("yes".equals(test))
    	{
    		throw  new ScaryException();
    	}
    	System.out.println("end risky");
    	return;
    }
}

Os erros gerados:

C:\Use a Cabeça\Capitulo 11\TestExceptions.java:18: cannot find symbol
symbol : class ScaryException
location: class TestExceptions
static void doRisky(String test) throws ScaryException
^
C:\Use a Cabeça\Capitulo 11\TestExceptions.java:11: cannot find symbol
symbol : class ScaryException
location: class TestExceptions
catch (ScaryException se)
^
C:\Use a Cabeça\Capitulo 11\TestExceptions.java:23: cannot find symbol
symbol : class ScaryException
location: class TestExceptions
throw new ScaryException();
^
3 errors

Process completed.

Alguém pode me dar uma luz??

Abraços

Provavelmente a classe ScaryException simplesmente não existe…

Alquem poderia me explicar qual é o papel de “throws”?

throws lança uma exceção, lança um ERRO.

vc importou a class ScaryException e extendeu a ela? pelo visto ela nao faz de uma excecao nao verificada…

quando vc usa o throws vc diz que ali lanca uma excecao do tipo …

throws tipo_da_excecao

flw!

Estou lendo o livro Use a Cabeça e no Capítulo 11 que se trata da manipulação de exceções na pagina 234 tem esse código que eu postei.

Então quer dizer que o método “doRisky()” esta lançando uma exceção da classe ScaryException, Certo?
E no caso terei que criar esta classe? Pensei que esta classe existia.

Alguém ja leu o livro, poderia me da uma força para esse código compilar?

extenda a class ScaryException

class suaclass extends ScaryException

flw!

a class ScaryException simplesmente não existe…
crie ela…
exemplo

[code]public class ScaryException extends Exception{

}[/code]

ou ainda…

[code]public class ScaryException extends Exception{

public ScaryException(){
	super("ScaryException Lançada!");
}

}[/code]

ai você pode sobrescrever os métodos da class Exception a vontade…:smiley:

expero que tenha ajudado…

[]´s

ah… e com relação a throws

a palavra reservada throws pode ser usada apenas em métodos, e indica que este método pode lançar uma exceção, do tipo da(s) exceção(ões) declaradas.

[code]public void method()throws IOException,Exception,SQLException{

}[/code]

e a cláusula throw lança uma exceção. Ela deve ser sempre seguida de um objeto que extenda a classe Throwable.

mais um detalhe sobre exceptions. Todas as exceptions devem ser tratadas(exceptions checked) ( bloco try-catch ) ou relançadas ( adicionando a cláusula throws no método), exceto as exceptions que são subclasses da class RuntimeException(exceptions unchecked), que são exceções durante a execução da classe, como por exemplo as famosas exceptions ArrayIndexOutOfBounds e NullPointerException.

a hierarquia básica é

                              Throwable
                              ____|____
                             |               |
                          Error       Exception
                                              |
                                     RuntimeException

qualquer dúvida sobre quais exceptions são obrigatórias ser tratadas, dá uma olhada na hierarquia das exceptions… :wink:

dica: nunca trate exceptions que são filhas da classe Error, pois são erros gravíssimos, e praticamente impossível de se recuperar… sendo necessário reinicar a aplicação.

[]´s