Erro com try/catch/finally

5 respostas
R

eu sempre pensei que isso dava certo…

//tenta ler esse ultimo arquivo
        try
        { ContatoReader cr = new ContatoReader(ap.getLastFile());
           agenda = cr.getMap();
           
            }//try
        catch(Exception e)//se não conseguir, cria a agenda
        {   agenda = new HashMap(40, 40);
            }//catch
        finally
        { cr.finalize();
            }

mas ta dando esse erro:

Error(65,11): variable cr not found in class mypackage1.Agenda

alguem pode me explicar qual o problema?

5 Respostas

D

Meu caro, o problema eh que a variável cr foi declarada dentro do corpo do try e está sendo acessada de fora do escopo dela, no corpo do finally. Declare esta variável da seguinte forma:

//tenta ler esse ultimo arquivo 
        ContatoReader cr = null;
        try { 
           cr = new ContatoReader( ap.getLastFile() ); 
           agenda = cr.getMap(); 
            
        } //try 
        catch( Exception e ) { //se não conseguir, cria a agenda 
             agenda = new HashMap(40, 40); 
        } //catch 
        finally {
             if(cr != null) 
                 cr.finalize(); 
        }
Pois dessa forma cr estará acessível no corpo do finally.
R

teoricamente não deveria estar certo o meu jeito?
falaram que o finnaly serve justamente para isso, fechar conexões, etc que foram abertas pelo try {}…

F

qndo uma variavel eh declarada dentro de um bloco de codigo, ela nao pode ser acessada fora dele, o o try e o catch sao blocos de codigos diferentes…

M

nossa oq eu sofria com isso no começo :confused:

D

Isso mesmo Felipe… foi isso q tentei passar em minha resposta… mas vc foi mais direto. O problema reside justamente na declaração da variável em um bloco e uma tentativa de acesso em outro bloco. Como Felipe disse, os blocos do try, do catch e do finally são diferentes.
Outro exemplo, é a declaração de uma variável no cabeçalho do for que só pode ser acessada dentro do corpo deste for.

t+,

Criado 27 de novembro de 2004
Ultima resposta 28 de nov. de 2004
Respostas 5
Participantes 4