Les programmes sont peuplés de noms servant à désigner diverses entités : paquets, types, membres et variables. La portée d'une déclaration d'un nom est la région du programme dans laquelle ce nom est connu. Elle est déterminée par les règles suivantes :
Cette dernière clause concerne le masquage d'une déclaration par une autre : une déclaration d'un nom masque toute autre déclaration de ce nom qui lui est externe. Par exemple, dans
int n = 3; // n est un champ int f(int x) { // x paramètre int n=2; // n est une variable locale return x+n ; }
la déclaration locale de n masque la déclaration du champ n : la valeur de f(0) est 2. Le masquage d'un nom est à éviter.
On voit donc qu'un même nom peut apparaître à plusieurs endroits dans un programme : on parle des occurrences de ce nom. Il y a des occurrences d'utilisation et des occurrences de déclaration. Par exemple, dans
int n = 4;
l'occurrence de n est une déclaration, tandis que dans
return x+n;
l'occurrence de n est une utilisation. Quand on voit une occurrence d'utilisation d'un nom, il faut pouvoir remonter à sa déclaration.