Les classes sont tout d'abord des types. Ainsi, si une classe Point a été définie afin de modéliser les points du plan, il est possible de déclarer un nom dont le type est Point :
Point p;
Cette déclaration de p, qui ne crée aucun objet, dit simplement que le nom p pourra désormais être employé pour désigner des objets de classe Point (mais pas, par exemple, pour désigner des chaînes de caractères). Les objets sont créés par instanciation, en utilisant l'opérateur new , l'un des constructeurs de la classe, et une liste d'arguments. Par exemple, l'expression new Point(2, 3) permet de créer un objet de classe Point, de coordonnées (2,3) ; la valeur de cette expression est une référence à l'objet créé et cette valeur est non nulle, c'est-à-dire différente de la valeur null. Après l'affectation
p = new Point(2, 3);
le nom p désignera l'objet nouvellement créé (figure 1.5). La déclaration d'un nom d'objet peut aussi comporter la création d'un objet ; les définitions suivantes de p et o introduisent ces noms et font en sorte qu'ils désignent des objets de la classe Point :
Point p = new Point(2, 3); Point o = new Point();
Un constructeur d'une classe a le même nom que la classe, et une liste de paramètres. Il peut y avoir plusieurs constructeurs, qui sont distingués par le nombre et le type de leurs paramètres. L'opérateur new, appliqué à un constructeur d'une classe, a pour effet de créer un objet de cette classe et retourne une référence vers cet objet. C'est cette référence qui est affectée, comme valeur initiale, aux noms p et o. Une référence n'est pas un objet, c'est plutôt un numéro d'identification unique, qui est géré de façon interne par la Machine Virtuelle Java, alors que les noms sont choisis et gérés par le programmeur. L'unicité signifie que chaque invocation d'un constructeur retourne une référence à un objet différent. Malgré les apparences, les deux points suivants sont différents, et le test d'égalité p1 == p2 aura pour valeur false :
Point p1 = new Point(2, 3); Point p2 = new Point(2, 3);
Il est préférable de dire que p << désigne >> un point, ou << réfère >> à tel point, plutôt que de dire qu'il << est >> un point. D'ailleurs, l'opération d'affectation permet de remplacer le point désigné par un autre. Après l'affectation suivante, les deux noms p1 et p2 désigneront le même point, celui référé par p1 (figure 1.6):
p2 = p1;