Introduction

Les variables sont à la base de tous les langages de programmation. Comme leur nom l'indique, les variables font varier l'exécution et de fait lui donne un sens.

A retenir

  • Les variables sont toujours typées
  • Les identifiants de variables sont composés de caractère alpha-numérique sans espace1)
  • Les identifiants de variables commencent par une minuscule 2)
  • Les identifiants sont CamelCase par convention

Déclaration / initialisation

On utilise les variables dans les méthodes (et les constructeurs).

Elles n'ont pas besoin d'être déclarée au début des scripts comme en C. Cependant elles doivent être déclarée avant d'être utilisées dans les scripts.

La syntaxe pour déclarer une variable est toujours la même :

// Déclaration
Type identifiant;

// Affectation
identifiant = expression;

// Déclaration et affectation simultanée
Type identifiant = expression;

On peut également déclarer plusieurs variables d'un même type dans une même instruction en les séparants par des virgules :

int a, b, c;

// equivaut à
int a;
int b;
int c;

Cette syntaxe permet également d'affecter des valeurs :

int a=1, b, c=3.14;

// equivaut à
int a = 1;
int b;
int c = 3.14;

Dans les exemples précédents, toutes les variables sont de type int. Les variables sont toujours typées, parmi les types on distingue 2 grandes catégories de type : Les types simples3) et les "type objet"

Type de variable

Les types simples

Les types simples permettent de stoquer des valeurs. D'un point de vue machine, un espace dans la mémoire est réservé pour enregistrer la valeur au moment de l'affectation. Chaque affectation crée un nouvel espace mémoire, même si les valeurs sont identique :

int a = 3.14; // Un espace mémoire est créé pour enregistrer la valeur 3.14
int b = a; // Un autre espace est créé

Dans cet exemple, a et b on des espaces mémoires différents même si la façon dont ils sont affectés laisse à penser qu'il existe un lien physique (numérique) entre a et b, ainsi la modification de a n'a aucun impact sur b, et vice-versa :

int a = 3.14;
int b = a;
a = 0;

System.out.println(a); // affiche 3.14
System.out.println(b); // affiche 0

Les différents types simples

Parmis les types simples 4) on trouve les types liés à la manipulation des nombres.

Type d'entiers

D'abord les nombres entiers :

Types simple poid Détails
byte 1 octet 28 valeurs possibles soit un nombre entre -128 et 127
short 2 octet 28*2 valeurs possibles soit un nombre entre -32 768 et 32 767
int 4 octet 28*4 valeurs possibles soit un nombre entre -2 147 483 648 et 2 147 483 647
long 8 octet 28*8 valeurs possibles soit un nombre entre -9 223 372 036 854 775 808 et 9 223 372 036 854 775 807

Le type byte est particulièrement vicieux, en effet il est propice à l’amalgame byte / bit. Le byte est la plus petite unité adressable d'un ordinateur 5), à savoir l'octet (soit 8 bits)…

L'écriture des valeurs numériques peut être faites de façon traditionnelle (notre bonne vieille base 10).

Mais on peux également utiliser l'hexadécimale (base 16) en faisant précéder la valeur par 0x :

int redNumber = 0xF00;
System.out.println(redNumber); // affiche 3840

On peut également utiliser la notation en octale (base 8) en préfixant les valeurs avec un 0 :

int octalNumber = 037;
System.out.println(octalNumber); // affiche 31

Les types rééls

C'est les nombres à décimales

Types rééls poid Détails
float 4 octet 28*4 valeurs possibles, précision décimale à 7 chiffres
double 8 octet 28*8 valeurs possibles, précision décimale à 15 chiffres

Un petit exemple simple :

public class DifferenceDoubleFloat 
	{
	public static void main( String[] args )
		{
		// Exemple avec des floats
		float fa = 2, fb = 3, fc = fa / fb;
		System.out.println(fc); // Affiche 0.6666667
		
		// Idem avec des doubles
		double da = 2, db = 3, dc = da / db;
		System.out.println(dc); // Affiche 0.6666666666666666
		}
	}

Les booléens

Comme dans beaucoup d'autres langages, les Booleens sont des valeurs logiques : VRAI et FAUX. La valeur d'un booléen doit être affecté avec les mot clef true et false.

Les types Objet (Références)

Les types "objet" correspondent à des instances de classe. La mécanique d'affectation est très différente car les variables sont affectées par référence.

Prenons le code suivant :

public class VarReference 
	{
	public static void main( String[] args )
		{
		MaClasse monObjet = new MaClasse()
		MaClasse monAutreObjet = monObjet;
		}
	}

Dans cet exemple, la variable monObjet pointe vers un espace mémoire qui a une instance de MaClasse. Dans la ligne où monAutreObjet est affecté, l'instance de MaClasse n'est pas copié, au final la variable monObjet et monAutreObjet pointe vers le même espace mémoire, ils font référence au même objet.

Variable invariable !? Les constantes

Vous pouvez déclarer des variables en lui affectant une information qui ne devra pas changer, pour cela on utilise le mot-clef final :

public class DemoFinal
  {
  public static void main( String[] args )
    {
    int nombreDePersonne = 2;
    final int MAX_PERSONNE = 20;
    }
  }

Si par la suite vous chercher à modifier l'affectation de MAX_PERSONNE vous obtiendrez une erreur à la compilation :

public class DemoFinal
  {
  public static void main( String[] args )
    {
    int nombreDePersonne = 2;
    final int MAX_PERSONNE = 20;
    
    // Erreur à la compilation
    MAX_PERSONNE = 25;
    }
  }

Attention, le verrouillage se fait au moment de l'affectation, pas à la déclaration. Ainsi il est tout à fait possible d'écrire :

public class DemoFinal
  {
  public static void main( String[] args )
    {
    int nombreDePersonne = 2;
    int nombreDeGuide = 2
    final int MAX_PERSONNE;
    
    MAX_PERSONNE = 20 * nombreDeGuide;
    }
  }

1) la présence de caractères spéciaux est possible mais très mal vue
2) C'est une convention utilisée par la totalité des développeurs java
3) On parle également de type primitifs
4) ou type primitifs
5) Définition de wikipedia http://fr.wikipedia.org/wiki/Byte
java/java-variables.txt · Dernière modification: 2011/10/17 06:47 (modification externe)
 
Sauf mention contraire, le contenu de ce wiki est placé sous la licence suivante : CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki

Ce site contient des traces de XHTML et de CSS.