03 : Éléments de Base - Commentaires, Identificateurs et Types Primitifs
Commentaires en Java
Java supporte trois formes de commentaires qui permettent de documenter le code :
1. Commentaires de ligne simple : // …Texte…
Commence dès // et se termine à la fin de la ligne
Sur une seule ligne
À utiliser de préférence pour les commentaires généraux
2. Commentaires de bloc : /* …Texte… */
Le texte entre /* et */ est ignoré par le compilateur
Peuvent s'étendre sur plusieurs lignes
Ne peuvent pas être imbriqués
Peuvent être utiles pour désactiver temporairement une zone de code
3. Commentaires de documentation : /** …Texte… */
Commentaire de documentation (comme /* … */ mais avec fonction spéciale)
Interprétés par l'utilitaire javadoc pour créer une documentation au format HTML
Peuvent contenir des balises de documentation (@author, @param, …)
Peuvent contenir des balises HTML
Exemple complet de commentaires :
/** * Somme : Calcule une somme * * @author Marc Duchemin * @version 2.3 08.07.2014 */ public class Somme { /*--------------------------------------------------+ | Programme principal | +--------------------------------------------------*/ public static void main(String[] params) { //--- Initialisation des variables int a = 1; int b = 2; int total; // Totalisateur total = a + b; //--- Affichage du résultat de l'addition System.out.println("Résultat = " + total); } }
Identificateurs
Les identificateurs sont des noms symboliques permettant de référencer les éléments des programmes Java (variables, fonctions, ...).
Règles pour les identificateurs :
Doivent commencer par une lettre ou un souligné _ (ou, à éviter, un caractère monétaire $)
Suivi (éventuellement) d'un nombre quelconque de lettres, chiffres ou soulignés (ou, à éviter, de caractères monétaires)
Distinction entre les majuscules et les minuscules (case sensitive)
Utilisent le jeu de caractères Unicode (16 bits)
Les mots réservés du langage sont exclus
Attention : Éviter de créer des identificateurs qui ne se distinguent que par la casse. Selon les plates-formes, les caractères alphabétiques spéciaux (caractères accentués, lettres grecques, …) peuvent poser des problèmes ⇒ À éviter.
Exemples d'identificateurs valides :
maVariable _temp resultat2 MAX_VALUE $compteur// À éviter
Exemples d'identificateurs invalides :
2resultat// Commence par un chiffre ma-variable// Contient un tiret class// Mot réservé
Mots réservés (Keywords)
Mots réservés principaux
Mots réservés secondaires
Littéraux prédéfinis
abstract assert boolean break byte case catch char class const continue
default do double else enum extends final finally float for goto
true false null
if implements import instanceof int interface long native new package
private protected public return short static strictfp super switch synchronized
this throw throws transient try void volatile while
Notes :
const et goto : mots réservés mais non utilisés actuellement
assert : disponible depuis la version 1.4 du JDK
enum : disponible depuis la version 1.5 du JDK
Notion de Variable
Définition :
Une variable définit une case mémoire nommée et typée.
Le nom est représenté par un identificateur
Le type définit le genre d'informations qui sera enregistré ainsi que les opérations possibles
Il existe des types prédéfinis mais il est possible de créer ses propres types
Syntaxe de déclaration :
Type Identificateur; float note; Polygone triangle;
int unNombreEntier; // Type primitif int String motDePasse; // Classe String (prédéfinie) Point position; // Classe Point char[] voyelles; // Tableau de caractères Point[] nuage; // Tableau de Point(s)
Types Primitifs
Tableau des types primitifs :
Type
Contient
Taille
Valeurs
boolean
Booléen
[1 bit]
true, false
char
Caractère (entier non-signé)
16 bits
\u0000..\uFFFF
byte
Entier signé
8 bits
-128..127
short
Entier signé
16 bits
-215.. 215-1
int
Entier signé
32 bits
-231.. 231-1
long
Entier signé
64 bits
-263.. 263-1
float
Nombre en virgule flottante
32 bits
±3.4*1038
double
Nombre en virgule flottante
64 bits
±1.7*10308
Détails des types primitifs :
Booléen (boolean) :
Ne peuvent prendre que deux valeurs : true ou false
Ne peuvent pas être interprétés comme des valeurs numériques [0, 1]
Caractère (char) :
Caractères Unicode (codage normalisé sur 16 bits)
Peuvent être traités comme des entiers non-signés
Séquences d'échappement pour caractères spéciaux :
Valeurs littérales (int par défaut) : notation habituelle
Suffixe l ou L pour type long (L est préférable)
Préfixe 0 (zéro) pour valeur octale (base 8)
Préfixe 0b ou 0B pour valeur binaire (base 2) - Java 7+
Préfixe 0x ou 0X pour valeur hexadécimale (base 16)
0 // valeur de type int 123 // valeur de type int -56 // valeur de type int 0377 // 377 [octal] = 255 [décimal] 433L // valeur de type long 0b1011 // valeur binaire de type int 0xff // valeur hexadécimale de type int 0xA0B3L // valeur hexadécimale de type long
Valeurs littérales (double par défaut) : notation habituelle (n.m)
Suffixe f ou F pour type float
Suffixe d ou D pour type double (rarement nécessaire)
Notation exponentielle avec e ou E suivi de l'exposant
Valeurs spéciales : infini, -infini, zéro négatif, NaN (Not a Number)
Attention : Les nombres en virgule flottante sont des approximations de nombres réels (tous les nombres réels ne peuvent pas être représentés de manière exacte). Il faut en tenir compte dans les comparaisons.
Questions de Cours
Question 1: Types de commentaires
Quelle est la différence fondamentale entre les commentaires /* */ et /** */ en Java?
Réponse :
Les commentaires /* */ sont des commentaires de bloc standards, ignorés par le compilateur.
Les commentaires /** */ sont des commentaires de documentation interprétés par l'utilitaire javadoc pour générer automatiquement de la documentation HTML. Ils peuvent contenir des tags spéciaux comme @author, @param, @return, etc.
Question 2: Règles des identificateurs
Parmi les identificateurs suivants, lesquels sont valides en Java et pourquoi?
maVariable
2resultat
_temp
class
ma-variable
Réponse :
maVariable : Valide - commence par une lettre
2resultat : Invalide - commence par un chiffre
_temp : Valide - commence par un underscore
class : Invalide - mot réservé du langage
ma-variable : Invalide - contient un caractère spécial (-)
Question 3: Types primitifs entiers
Quelle est la plage de valeurs pour le type byte en Java et pourquoi cette plage est-elle limitée?
Réponse :
Le type byte a une plage de valeurs de -128 à 127.
Cette limitation vient du fait qu'un byte utilise 8 bits en mémoire. Avec 8 bits, on peut représenter 2⁸ = 256 valeurs différentes. Comme il s'agit d'un type signé, la plage est divisée entre valeurs négatives et positives : -128 à 127.
Question 4: Caractères et Unicode
Quelle est la différence entre 'A' et "A" en Java? Expliquez en termes de type de données.
Réponse :
'A' est un caractère de type char - il représente un seul caractère Unicode entre apostrophes.
"A" est une chaîne de caractères de type String - c'est un objet qui représente une séquence de caractères entre guillemets, même s'il n'y a qu'un seul caractère.
Question 5: Séquences d'échappement
Que produira l'instruction suivante et pourquoi?
System.out.println("Ligne1\nLigne2\tTabulation");
Réponse :
Cette instruction produira :
Ligne1 Ligne2 Tabulation
Explication :
\n : séquence d'échappement pour un saut de ligne
\t : séquence d'échappement pour une tabulation horizontale
Question 6: Notation des nombres
Quelles sont les valeurs décimales des littéraux suivants?