Variables, constantes, énumérations
Variable d’instance
Variable déclarée au sein d’une classe et qui n’existe que si une instance de classe est disponible. Chaque instance possède son propre exemplaire de la variable.
Variable de classe
Variable déclarée avec le mot clé static à l’intérieur d’une classe. Elle est unique et accessible directement via le nom de la classe dans laquelle est est déclarée.
Variable locale
Variable déclarée à l’intérieure d’une fonction et qui doit être initialisée. Elle n’existe que pendant l’exécution de la fonction et n’est accessible que par le code de celle-ci.
De plus, les paramètres de fonction sont considérés comme des variables locales. La seule différence réside dans l’initialisation de la variable qui est effectuée lors de l’appel de la fonction.
Types de variables
Entiers signés
| byte | -128 | 128 | 8 bits |
| short | -32768 | 32768 | 16 bits |
| int | -21447483648 | 21447483647 | 32 bits |
| long | -9223372036854775808 | 9223372036854775807 | 64 bits |
Il faut bien choisir le type d’un entier en tenant compte de ses limites. Par exemple, Il est inutile de choisir un type long si la valeur ne dépasse pas 50 (un type byte fera l’affaire)
Il est possible de travailler avec les types non signés en utilisant respectivement des méthodes statiques suivantes appartenant aux « Wrapper classes » comme Byte, Short, Integer, Long :
Byte.parseUnsignedByte
Short.parseUnsignedShort
Integer.parseUnsignedInt // Ceci permet d’étendre la valeur maximale de chacun de ces types par exemple pour un type int, ont peut aller jusqu’à 4294967296.
Long.parseUnsignedLong
Et pour afficher la valeur de type non signé, on utilise la méthode parseUnsignedString
Exemple :
int quantite = Integer.parseUnsignedInt(« 4000000000 »);
System.out.println(« Quantité en int non signé : » + Integer.parseUnsignedString(quantite));
Décimaux signés
| float | 1.4E-45 | 3.4028235E38 | 32 bits (4 octets) |
| double | 4.9E-324 | 1.7976931348623157E308 | 64 bits (8 octets) |
Caractères
Le type char est utilisé pour représenter un caractère unique et utilise 2 octets (16 bits) pour stocker le code Unicode du caractère.
les 128 premiers caractères du jeu unicode sont identiques au jeu de caractères du code ASCII. Les caractères suivants (255) sont des caractères spéciaux càd, les caractères accentués et le reste est utilisés pour les symboles et d’autres alphabets.
| Séquence | Signification |
| \t | Tabulation |
| \b | BackSpace |
| \n | Saut de ligne |
| \r | Retour chariot |
| \f | Saut de page |
| \’ | Simple quote |
| \ » | Double quote |
| \\ | Antislash |
Pour stocker des chaînes de caractères, il faut utiliser le type String et ses nombreuses fonctions permettant de manipuler les les chaînes.
Le type booléen
Une variable de type booléen peut prendre comme valeur true ou false.
Il n’est pas possible d’affecter une autre valeur à une variable de type booléen.
Valeurs par défaut
| Type | Valeur par défaut |
| byte | 0 |
| short | 0 |
| int | 0 |
| long | 0 |
| float | 0.0 |
| double | 0.0 |
| char | \u0000 |
| boolean | false |
| String | null |
Valeurs littérales
On peut représenter les valeurs entières numériques en octal, hexadécimal, ou binaire.
Exemple :
int i;
i = 243;
i = 0363;
i = 0xF3;
i = 0b11110011;
Notation décimale ou scientifique :
float surface;
surface = 2356.8f;
surface = 2356.8e3f;
Utilisation du caractère underscore _ pour faciliter la lecture :
int prix;
// Syntaxe équivalente pour les deux lignes suivantes :
prix = 1234876567;
prix = 1_234_876_567;
Conversion de types
Les conversions peuvent se faire vers un type supérieur ou vers un type inférieur.
Dans le cas d’une conversion vers un type inférieur, il y a un risque de perte d’information (Exemple: double vers long avec perte de la partie décimale).
C’est pourquoi, le compilateur exige de préciser explicitement le type que l’on veut utiliser :
Exemple :
float surface;
surface = 2356.8; // Erreur de type car c’est considéré par défaut comme un double
surface = 2356.8f; // OK ou F en majuscule
Int approximation;
approximation = (int) surface; // Perte de la partie décimale
Conversion de types vers une chaîne de caractères
on utilise la méthode statique valueOf(type_a_convertir) de la classe String pour convertir tout type en une chaine.
Exemple :
double prixHT = 152;
String recap = « Le montant de la commande est : » + String.valueOf(prixHT * 1.196);
Conversion d’une chaîne de caractères représentant une valeur numérique vers un type numérique
Il arrive fréquemment de devoir convertir un chiffre saisi par un utilisateur dans un formulaire (type String) en type numérique entier ou réel par exemple et afin de pouvoir être manipulé par l’application. Ce type de conversion peut se faire grâce aux classes wrapper qui sont équivalentes aux types de base.
| Type de base | Classe Wrapper équivalente |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| boolean | Boolean |
| char | Char |
Pour utiliser une classe Wrapper, il faut créer une instance de celle-ci.
Exemple :
Integer entier = new Integer(10); // appel du constructeur de la classe Integer et initialiser la variable entier à 10;
Integer entier = 10; // affectation d’un entier de manière implicite via le mécanisme auto-boxing du compilateur
Il existe un mécanisme inverse unboxing qui permet de convertir automatiquement un type wrapper vers un type de base :
Integer entier = 10; // type wrapper
int x = entier; // conversion de type Integer en type int
Remarque :
On a vu précédemment deux méthodes statique de la classe Wrapper : parseUnsignedInt et parseUnsignedString, … afin de travailler avec des entiers non signés.
Ici, on a une autre méthode statique pour convertir une chaine numérique en type numérique.
Exemple :
Integer quantite = Integer.parseInt(« 1235 »);
Pour les autres types de conversions, on y applique le même principe que pour Integer :
Byte : Byte.parseByte(« 12 »)
Long : Long.parseLong(« 145632 »)
Ect. …
Visibilité des variables du plus stricte au moins stricte
private : La variable n’est accessible que depuis la classe dans laquelle elle est définie.
protected : La variables est accessible depuis la classe où elle est déclarée et depuis les sous-classes de cette classe.
public : La variable est accessible depuis n’importe quelle classe indépendamment du package
aucun modificateur : La variable est accessible de toutes les classes faisant partie du même package.
static : Variable de classe accessible n’importe où et directement sans passer par une variable d’instance.
Remarque sur la durée de vie d’une variable :
La durée de vie correspond à la durée d’exécution du programme et pendant laquelle la valeur d’une variable sera disponible.
Si la variable est déclarée dans une fonction ou procédure, sa durée de vie dépendrait de la durée d’exécution de cette fonction ou de cette procédure. En fin d’exécution, elle sera éliminée de la mémoire et sera recrée lors d’un prochain appel de cette fonction ou procédure.
La durée de vie d’une variable d’instance dépend de la disponibilité d’une instance de classe dans laquelle cette variable est définie.
la variable « static » est accessible pendant toute la durée de l’application.
Les constantes
Une variable dont la valeur doit être initialisée à sa déclaration et qui ne peut pas être modifiée.
Sa déclaration se fait via le mot clé « final« .
Sa durée de vie et sa portée est la même que celles des variables.
Exemple :
public final float TVA = 1.196 f; // ou public static final float TVA pour un accès direct et de partout
Enumérations
C’est un ensemble de constantes liées entre elles et se déclare de cette manière :
public enum Couleurs {
BLEU,
BLANC,
ROUGE
}
<span style="text-decoration: underline;">Remarque</span>:
La première valeur de l'enum est initialisée à 0, puis chaque valeur suivant est incrémenté de 1
La déclaration précédente aurait donc pu s'écrire de cette façon :
public class Couleur {
public static final int BLEU = 0;
public static final int BLANC = 1;
public static final int ROUGE = 2;
}Langage du code : PHP (php)
Une énumération peut être soit un attribut normal d’une classe, soit une classe en elle-même. Elle ne peut pas être déclarée dans une fonction ou procédure
La classe java.lang.Enum
Comme n’importe quelle classe, elle comporte des attributs, un constructeur, des méthodes
Exemple :
public enum Daltons {
// Instances
<em>JOE</em>(1.40f, 52.30f),
<em>WILLIAM</em>(1.68f, 72.10f),
<em>JACK</em>(1.93f, 83.20f),
<em>AVERELL</em>(2.13f, 89.50f);
// Attributs
private final float taille;
private final float poids;
// Constructeur
Daltons(float t, float p) {
this.taille = t;
this.poids = p;
}
// Méthodes
public float getTaille() {
return taille;
}
public float getPoids(){
return this.poids;
}
public float imc() {
return this.poids / this.taille * 2;
}
}Langage du code : PHP (php)
Principales méthodes de la classe Enum
toString() : retourne une chaine de caractères représentant le nom d’un élément de l’Enum
valueOf(« nom-element ») : opération inverse et qui retourne un élément en passant le nom de l’élément en paramètre de la fonction
values() : retourne tous les éléments
// toString()
Daltons d1 = Daltons.<em>JOE</em>;
System.<em>out</em>.println(d1.toString()); // JOE
// valueOf()
Daltons d2 = Daltons.<em>valueOf</em>("JACK");
System.<em>out</em>.println(d2.toString() + " taille = " + d2.getTaille() + "m, Poids = " + d2.getPoids() + "kg"); // JACK
// values()
System.<em>out</em>.println("\nLes frères Daltons :");
for (Daltons d : Daltons.<em>values</em>()) {
System.<em>out</em>.println(d.toString());
}Langage du code : HTML, XML (xml)
Tableaux
La manipulation d’un tableau est décomposée en 3 étapes:
– déclaration d’une variable permettant de manipuler le tableau
– création du tableau(allocation mémoire)
– stockage et manipulation des éléments du tableau.
// Déclaration
int[] entiers;
// Création(allocation mémoire)
entiers = new int[5];
// Manipulation des éléments du tableau
entiers[0] = 5;
entiers[1] = 25;
entiers[2] = 895;
entiers[3] = -55;Langage du code : JavaScript (javascript)
Tableau à plusieurs dimensions
int[][] matrice;
matrice = new int[2][5]; // Initialisation(2 lignes / 5 colonnes)
matrice[0][0] = 20;
// Autre syntaxe équivalente
int[][] matrice = {{15, 20, 30, 50, 100}, {96, -66, 85, 96, 785}};Langage du code : JavaScript (javascript)
Manipulations courantes des éléments avec java.util.Arrays
System.<em>out</em>.println("\nTaille du tableau: " + matrice.length); // 2Langage du code : HTML, XML (xml)
Soit un tableau entiers avant tri:
<code>entiers[0] = 5; entiers[1] = 25; entiers[2] = 895; entiers[3] = -55;</code>
Arrays.sort(entiers); // trier
for (int i=0; i<entiers.length; i++) {
System.<em>out</em>.println("position[" + i + "] = " + entiers[i]);
}
// Résultats
// position[0] = -55
// position[1] = 0
// position[2] = 5
// position[3] = 25
// position[4] = 895
// Existe également Arrays.parrallelSort() pour le tri utilisant un algorithm exploitant les capacités
// d'une machine multi-processeur Langage du code : PHP (php)
// binarySearch ne marche que si le tableau est préalablement trié avec sort
<strong>int position = Arrays.<em>binarySearch</em>(entiers, 25);
System.<em>out</em>.println("élément trouvé à la position: " + position);</strong> // élément trouvé à la position: 3Langage du code : HTML, XML (xml)
System.<em>out</em>.println(Arrays.<em>toString</em>(entiers)); // [-55, 0, 5, 25, 895]
// Avec la méthode deepToString
System.<em>out</em>.println(Arrays.<em>deepToString</em>(matrice)); // [[15, 20, 30, 50, 100], [96, -66, 85, 96, 785]]Langage du code : HTML, XML (xml)
// Arrays.copyOf: copier un tableau en précisant le nombre d'éléments à copier
int[] temp = new int[entiers.length];
temp = Arrays.<em>copyOf</em>(entiers, entiers.length-1);
System.<em>out</em>.println("\n Nouveau tableau : " + Arrays.<em>toString</em>(temp));
// Arrays.copyOfRange: copier une partie d'un tableau
temp = Arrays.<em>copyOf</em>(entiers, 2, 4);
// Arrays.fill
Arrays.<em>fill</em>(temp, 8);
System.<em>out</em>.println("\n Fill: " + Arrays.<em>toString</em>(temp));
// Astuce pour augmenter dynamiquement la taille d'un tableau avec System.<em>arraycopy</em>
public static int[] resizeTab(int[] arrayToCopy, int lengthToAdd) {
int[] temp = new int[arrayToCopy.length + lengthToAdd];
System.<em>arraycopy</em>(arrayToCopy, 0, temp, 0, arrayToCopy.length);
return temp;
}
int[] entiersBis = <em>resizeTab</em>(entiers, 4);
System.<em>out</em>.println(Arrays.<em>toString</em>(entiersBis));
Langage du code : HTML, XML (xml)