4.4. Memória e âmbito das variáveis

Qualquer variável declarada num método diz-se local a esse método.

Por exemplo, a variável nota é local ao método main pois é nele que é declarada.

Uma variável local a um método não está acessível fora desse método.

Por exemplo, a variável nota não pode ser usada nos outros métodos declarados na classe NotasFinaisLegivel – se usássemos a variável nota em qualquer outro método que não o main, o compilador daria o erro “nota cannot be resolved to a variable”.

Os parâmetros de um método funcionam como variáveis locais do método pois, por um lado, guardam valores e, por outro lado, só podem ser usadas dentro desse método.

Este caráter local das variáveis faz com que seja possível ter uma variável ou parâmetro declarados num dado método com um nome igual a outra declarada noutro método; elas são entidades diferentes!

Voltando ao exemplo acima, se tivéssemos declarado uma variável ou parâmetro também chamado nota no método imprimeInformacao, por exemplo, o compilador já não daria erro quando nos referíssemos a ela. Esta variável não teria nada a ver com a variável de igual nome no método main, ou seja, seriam duas variáveis completamente independentes.

Sempre que um método é invocado, é reservado espaço em memória para os seus parâmetros e variáveis locais. Logo que o método termina a sua execução, esse espaço deixa de estar reservado; logo, esses parâmetros e variáveis deixam de estar acessíveis.

Se voltar à secção 4.1.1., e simular a execução do programa NotasFinaisLegivel, confirmará a existência destas variáveis/parâmetros locais (repare na separação das variáveis e parâmetros de cada método através do uso de “caixas”).

Vamos então supor que o programa NotasFinaisLegivel está em execução e que a instrução que está a ser executada é a primeira instrução do método imprimeInformacao aquando da sua primeira invocação (provocada pela instrução imprimeInformacao(12345,nota); no main).

As variáveis locais a cada um dos dois métodos em execução estão agrupadas em caixas diferentes, cada uma etiquetada com o nome do método (à direita do nome do método é representado o número da instrução no programa; o que nos interessa agora é o conteúdo das variáveis e o método a que pertencem).

Repare que os parâmetros nrAluno e notaAluno do método imprimeInformacao têm valores iguais aos usados na invocação, nomeadamente o literal 12345 e o valor da variável nota do main.

Andemos agora um pouco para a frente na execução, até à segunda instrução da função notaFinal aquando da sua segunda invocação (provocada por nota = notaFinal(12.0,14.2,10.0,10.5); no main).

Repare que, como a execução da função ainda não terminou, a variável nota do main ainda tem o valor que lhe foi atribuído anteriormente. Logo que a instrução return (int)(notaCalculada + 0.5); seja executada, a função termina e devolve o valor 12, que será então atribuído à variável nota do main.

Continuemos a execução:

 

 


 

Anterior: 4.3. Funções

Seguinte: 4.5. Documentação