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:
nota
do main
. Repare que o contexto de memória associado à função notaFinal
já não está representado pois a função já terminou:
Anterior: 4.3. Funções
Seguinte: 4.5. Documentação