expression ::= numeric_expression | testing_expression | logical_expression | string_expression | bit_expression | casting_expression | creating_expression | literal_expression | "null" | "super" | "this" | identifier | ( "(" expression ")" ) | ( expression ( ( "(" [ arglist ] ")" ) | ( "[" expression "]" ) | ( "." expression ) | ( "," expression ) | ( "instanceof" ( class_name | interface_name ) ) ) )
This rule is called by-> arglist -> bit_expression -> casting_expression -> creating_expression -> do_statement -> expression -> for_statement -> if_statement -> logical_expression -> numeric_expression -> statement -> string_expression -> switch_statement -> testing_expression -> variable_initializer -> while_statement
Les parenthèses servent également à donner les paramètres d'une méthode. Remarquons que si la méthode ne nécessite pas de paramètres, les parenthèses ne peuvent pas être omises.
Les crochets carrés servent à délimiter l'indice du tableau,
et à en choisir ainsi l'élément pertinent. Par exemple,
le troisième élément du tableau tab
sera
tab[2]
ou encode tab[1+2*1]
.
Pour des informations concernant l'utilisation de la virgule,
veuillez consulter la documentation sur la
boucle for
Les identificateurs spéciaux null
, super
et this
sont présents dans toutes les classes. Voici
leur signification :
null
null
. Cela signifie qu'à la déclaration d'un
objet, avant d'appeler le constructeur, l'objet vaut null
.
null
peut être utilisé en lieu et place de n'importe
quel objet. On peut par exemple faire appel à une méthode en fournissant
null
comme paramètre, même si le type de celui-ci est
formeCarre
.
super
super
permet de faire référence à l'objet dont est
dérivé l'objet courant. On l'utilise souvent pour faire appel
au constructeur de
la classe parente.
this
this
et la page expliquant
la visibilité des variables
donnera d'autres informations à ce sujet.
instanceof
instanceof
permet de tester l'appartenance d'un
objet à une classe, ou s'il est conforme à une interface.
L'exemple ci-dessous montre qu'il est possible de traiter de
manières différentes toutes sortes d'objets à partir d'une
seule procédure générique.
class formeCarre {
float largeur;
float longueur;
public formeCarre(float largeur,float longueur) {
this.largeur = largeur;
this.longueur = longueur;
}
}
class formeCercle {
float rayon;
public formeCercle(float rayon) {
this.rayon = rayon;
}
}
class exInstanceof {
public static float surface(Object forme) {
if (forme instanceof formeCarre)
return ((formeCarre)forme).largeur*((formeCarre)forme).longueur;
else if (forme instanceof formeCercle)
return (float)(Math.pow(((formeCercle)forme).rayon,2d)*Math.PI);
return 0;
}
public static void main(String args[]) {
formeCarre carre = new formeCarre(20f,20f);
formeCercle cercle = new formeCercle(20f);
System.out.println("la surface de l'objet "+carre+" vaut "+surface(carre));
System.out.println("la surface de l'objet "+cercle+" vaut "+surface(cercle));
}
}
la surface de l'objet formeCarre@5e300848 vaut 400
la surface de l'objet formeCercle@5e300860 vaut 1256.64