static détermine si un attribut est une variable d'instance (appartient à l'objet), où une variable de classe (appartient à la classe).
class MaClasse {
static int nombreInstance=0;
int x,y;
}
La variable nombreInstance est une variable de la classe MaClasse, alors que les variables x et y appartiennent aux objets, instances de la classe MaClasse. Par défaut, la variable est d'instance.
class AutreClasse {
int ni = MaClasse.nombreInstance;
MaClasse monObjet = new MaClasse();
int xx = monObjet.x;
}
static détermine si une opération (une méthode) est une méthode d'instance (appartient à l'objet), où une méthode de classe (appartient à la classe).
class MaClasse {
static int nombreInstance=0;
int x,y;
static int dernièreInstance(){return nombreInstance;}
int périmetre(){return 2*(x+y);}
}
L'opération dernièreInstance() est une méthode de la classe MaClasse, alors que l'opération périmetre() est applicable aux objets, instances de la classe MaClasse. Par défaut, une méthode est d'instance.
class AutreClasse {
int ni = MaClasse.dernièreInstance();
MaClasse monObjet = new MaClasse();
int p = monObjet.périmetre();
}
En Java, les pointeurs n'existent pas. En fait, à l'exception des types primitifs (boolean, char, byte, short, int, long, float, double), tout est implémenté avec des pointeurs.
MaClasse monObjet;ne fait que créer une variable
monObjet qui permettra de référencer un objet de type MaClasse. L'instruction
monObjet.perimetre();provoquera une erreur.
MaClasse monObjet = new MaClasse();crée une variable
monObjet qui référence un objet de type MaClasse. L'instruction
monObjet.perimetre();ne provoquera pas d'erreur.