Les programmes sont peuplés de noms servant à désigner diverses entités : paquets, types, variables, fonctions, etc. Les noms sont soumis à des contraintes lexicales :
_
,
considéré comme une lettre, est parfois utilisé) ;
Voici une liste partielle de mots-clés, qui ne peuvent donc pas être employés comme des noms : package, import, interface, class, implements, extends, static, public, private, protected, final, this, super, new, instanceof, boolean, byte, short, char, int, long, float, double, void, if, else, switch, case, default, while, for, do, break, continue, return, assert, throw, throws, try, catch, finally.
La portée d'une déclaration d'un nom est la région du programme dans laquelle ce nom est connu et désigne la même entité. La portée de la déclaration :
C'est pourquoi deux paquets distincts peuvent définir des classes de même nom ; deux classes distinctes peuvent définir des fonctions de même nom ; deux fonctions distinctes peuvent déclarer des paramètres de même nom.
La définition de la portée d'une déclaration n'interdit cependant pas d'accéder à l'entité désignée par le nom hors de sa portée. Ainsi, on peut accéder à la fonction sommerEntiers définie dans la classe Sommes en l'invoquant sous la forme Sommes.sommerEntiers(10) à partir d'une autre classe.