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-1281288 bits
short-327683276816 bits
int-214474836482144748364732 bits
long-9223372036854775808922337203685477580764 bits
Remarques
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

float1.4E-453.4028235E3832 bits (4 octets)
double4.9E-3241.7976931348623157E30864 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équenceSignification
\tTabulation
\bBackSpace
\nSaut de ligne
\rRetour chariot
\fSaut de page
\’Simple quote
\ »Double quote
\\Antislash
Remarque :
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

TypeValeur par défaut
byte0
short0
int0
long0
float0.0
double0.0
char\u0000
booleanfalse
Stringnull

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 baseClasse Wrapper équivalente
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean
charChar

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)

Les chaînes de caractères