De façon générale, une déclaration établit une correspondance entre un nom et une construction nommable (variable, méthode, mais aussi constante camouflée en variable). Les déclarations de variable sont de la forme suivante :
Les modifiers sont des
mots-clés (static
, spécification de visibilité
private
etc., et final
pour les
constantes), le type est un type (genre int
,
int[]
ou String
) et name est un nom de
variable.
Une bonne pratique est d’initialiser les variables dès leur
déclaration, ça évite bien des oublis. Pour ce faire :
Où expression est une expression du bon type. Par exemple, voici trois déclarations de variables, de types respectifs « entier », chaîne et tableau de chaîne :
Les déclarations de « variable » sont en fait de trois sortes :
static
définit une
variable (un champ) de la classe.
static
définit une
variable d’instance des objets de la classe.
final
est
autorisé.
Ces trois sortes de « variables » sont toutes des cases nommées mais leurs comportements sont différents, voire très différents : les variables locales sont autonomes, et leurs noms obéissent à la portée lexicale (voir “structure de bloc” dans B.3.4), les deux autres « variables » existent comme sous-parties respectivement d’une classe et d’un objet ; elles sont normalement désignées comme C.x et o.x, où C et o sont respectivement une classe et un objet.
Sur une note plus mineure, les variables de classe et d’objet non-initialisées
explicitement contiennent en fait une valeur par défaut
qui est fonction de leur type — zéro pour les types d’entiers et de
flottants (et pour char
), false
pour les boolean
,
et null
pour les objets.
En revanche, comme le compilateur Java refuse l’accès à une variable
locale quand celle-ci n’a pas été initialisée explicitement, ou
affectée avant lecture, il n’y a pas lieu de parler
d’initialisation par défaut des variables locales.
Les déclarations de méthode ne peuvent se situer qu’au niveau des classes et suivent la forme générale suivante :
Les modifiers peuvent être, static (méthode de classe),
une spécification de visibilité,
final (redéfinition interdite),
synchronized (accès en exclusion mutuelle, voir le cours
suivant) et native (méthode écrite dans un autre langage que
Java). La partie type est le type du résultat de la méthode
(void
si il n’y en a pas), name est le nom de la méthode et
args sont les déclarations des arguments de la méthode qui
sont de bêtes déclarations de variables (sans le « ; » final)
séparées par des virgules
« ,
». L’ensemble de ces informations constitue la
signature de la méthode.
Suit ensuite le corps de la méthode, entre accolades
« {
» et « }
».
Il est notable que les déclarations d’arguments sont des déclarations
de variables ordinaires. En fait on peut voir
les arguments d’une méthode comme des variables
locales presque normales.
À ceci près qu’il n’y a pas lieu d’initialiser les
arguments ce qui d’ailleurs n’aurait aucun sens puisque les arguments
sont initialisés à chaque appel de méthode.