"_"
, bien qu'il soit possible d'utiliser ce caractère. Lorsqu'un identificateur est composé de plusieurs mots, alors on met en majuscule la première lettre des mots qui le composent. Par exemple,
age_marin
n'est pas un identificateur conventionnel en Java, on écrira
ageMarin
. On appelle cette façon d'écrire les variables le
camel case
, du fait de l'aspect bosselé qu'elles prennent.
public class
. Elle doit être enregistrée dans un fichier qui porte le même nom qu'elle, et son nom commence en général par une majuscule, se différenciant en cela des identificateurs internes à une classe (champs et méthodes).
Voici un exemple de déclaration de classe.
Exemple 19. Exemple d'une classe publique
public class Marin { // doit être écrite dans le fichier Marin.java ! ... // code de la classe }
Exemple 20. Exemple d'une classe interne
public class Marin { // doit être écrite dans le fichier Marin.java ... // code de la classe } class Capitaine { // écrite dans le même fichier ... // code de la classe Capitaine }
Capitaine
est une classe interne. On peut avoir autant de classes internes qu'on le souhaite dans un fichier. Il est possible de ne pas avoir de classe publique dans un fichier, et uniquement des classes internes. Ce genre de bizarreries est évidemment à proscrire.
static
ou non,
final
ou non,
public
,
private
ou
protected
. Voici un exemple de déclaration d'une telle classe, tiré de la
classe
Character
de l'API standard (version 5).
Exemple 21. Classes membre de la classe
Character
public final class Character { // déclarée dans le fichier java/lang/Character ... // code de la classe Character public static class Subset { ... // code de la classe Subset } public static final class UnicodeBlock extends Subset { ... // code de la classe UnicodeBlock } }
Character
est déclarée comme étant
public final
, ce qui signifie qu'il n'est pas possible de l'étendre, tout comme la classe
String
. Elle contient une première classe membre :
Subset
, publique et statique, que l'on peut donc appeler
Character.SubSet
. Comme on le voit sur la classe
Character.UnicodeBlock
, une classe membre peut étendre une autre classe, ici une autre classe membre.
Exemple 22. Exemple d'une classe locale
public class Marin implements Comparable<Marin> {
private String nom, prenom ;
public int compareTo(Marin marin) {
class MarinComparator implements Comparator<Marin> {
public int compare(Marin m1, Marin m2) {
int order = m1.nom.compareTo(m2.nom) ;
return order != 0 ? order : m1.prenom.compareTo(m2.prenom) ;
}
}
return (new MarinComparator()).compare(this, marin) ;
}
}
MarinComparator
, nous pouvons déclarer une classe anonyme. Voyons ici un exemple de classe anonyme locale.
Exemple 23. Exemple d'une classe anonyme locale
public class Marin implements Comparable<Marin> {
private String nom, prenom ;
public int compareTo(Marin marin) {
Comparator<Marin> comparator =
new Comparator<Marin>() {
public int compare(Marin m1, Marin m2) {
int order = m1.nom.compareTo(m2.nom) ;
return order != 0 ? order : m1.prenom.compareTo(m2.prenom) ;
}
} ;
return comparator.compare(this, marin) ;
}
}
this
désigne en permanence l'objet dans lequel on se trouve. Il existe dès l'instant que l'on se trouve dans l'instance de quelque chose. En particulier, il n'est pas défini dans un élément statique. En général, ce mot-clé est utilisé pour lever l'ambigüité qui peut exister entre le champ d'une classe et un paramètre d'une méthode dans laquelle on se trouve, comme dans l'exemple qui suit.
Exemple 24. Utilisation de
this
pour lever l'ambiguïté entre un champ et un paramètre
public class Marin { // écrit dans le fichier Marin.java private String nom ; public Marin(String nom) { this.nom = nom ; // utilisation de this pour lever l'ambigüité // entre le paramètre et le champ } public void setNom(String nom) { this.nom = nom ; // utilisation de this pour lever l'ambigüité // entre le paramètre et le champ } public String getNom() { return this.nom ; // ici l'utilisation de this est facultative } }
est
indispensable dans le constructeur et dans la méthode
setNom()
, et facultative dans la méthode
getNom()
.
String
StringBuffer
et
StringBuilder