Bas de page
Page précédente Sommaire Page suivante
Bas de page

III) ELEMENTS DE PROGRAMMATION

3) Structures de contrôle et expressions

Les mêmes qu'en C et C++ (if, switch, for, while, do while, ++, +=, &&, &, <<, ?: ) + blocs labelisés
+ <<< (décalage droite sans extension de signe) + instanceof + exceptions - goto.

3-1) Les blocs labelisés

C’est un peu comme en C, si vous lisez le K & R du C vous y trouverez au chapitre sur les labels une réflexion
qui s’apparente à : « Existe mais ne pas utiliser ». Cette remarque vielle de trente ans reste valable même pour
Java. Toutefois s’il existe quelques irréductibles codeurs qui souhaitent brouiller la lisibilité de leur code et
augmenter les risques d’erreurs et d’effets de bords désastreux voici un petit exemple qui fonctionne très bien.

un: while ( ...)
{
deux: for(...)
{
trois: while (...)
{
if (...)
continue un; // Reprend sur la premiere boucle while
if (...) break deux; // Quitte la boucle for
continue; //Reprend sur deuxieme boucle while (trois)
}
}
}


3-2) L'opérateur instanceof

L'opérateur instanceof peut être utilisé pour vérifier la classe d'un objet dynamiquement.
Boolean test;
String str = "toto";
test = (str instanceof String); // true


3-3) Les exceptions

Le mécanisme d'exception permet de séparer le flot de contrôle classique (retour de fonction avec valeur) du flot
de contrôle lié à un comportement exceptionnel (erreurs, ...). Java est conçu de sorte que la gestion d’erreur soit
simple et dénuée de toute ambiguïté (pas comme en C++ où chacun à sa propre « recette de cuisine »).
Une exception est une instance d'une classe dérivant de la classe java.lang.Exception.
Une levée d'exception est due à un appel à la primitive throw ou à une méthode ayant elle-même levé
l'exception :

throw new Exception();

La levée d'une exception provoque une remontée dans l'appel des méthodes jusqu'à ce qu'une méthode possédant
un bloc try/catch récupérant cette classe d'exception soit trouvée.
try
{
// code pouvant provoquer des IOException, FileNotFoundException ou des
SecurityException
}
catch(IOException e)
{
// Gestion des IOExceptions et de
//ses sous classes (FileNotFoundException, ...)
}
catch(SecuritytException e)
{
// Gestion des SecurityException
}
finally
{
//code exécuté quel que soit la nature de l'exception
}


L'appel à une méthode pouvant lever une exception doit :
??soit être contenu dans un bloc try/catch ;
??soit être situé dans une méthode propageant (throws) cette classe d'exception.

public static void main(String argv[]) throws Exception

Un bloc (optionnel) finally peut être posé à la suite des catch. Son contenu est exécuté quelle que soit la
façon dont s'exécute le bloc try.

Figure 4 : schéma du flot de contrôle lié aux exceptions

3-4) Les variables

Les variables en Java peuvent être de "trois" sortes de types :
_primitifs ;
_référence à un objet ;
_référence à un tableau.
Toute variable locale doit être initialisée explicitement avant de pouvoir utiliser sa valeur (vérification statique
par le compilateur).
Les variables peuvent être déclarées n'importe où dans un bloc ({...}).
Deux variables « locales » (locales et paramètres) de deux blocs imbriqués l'un dans l'autre ne peuvent pas avoir
le même nom.
Il n'existe pas de pointeur en Java.

3-5) Les types primitifs

Tableau 2 : les types primitifs de Java

Tous les types numériques (byte inclus) sont signés.
Il n'existe pas de transtypage (cast) implicite avec perte d'information pour les types primitifs, afin d’éviter des
bugs, le compilateur génère une erreur à la compilation :

int i = 130;
long l = i; // ok
byte b = 130; // erreur
byte b = i; // erreur
byte b = (byte) i; // ok mais b = -126


Le calcul en réels sécurisé :

double b;
double c=1;
b=(1-c)/(1-c);
System.out.println(""+ b ); // NaN
b=-1/(1-c);
System.out.println(""+ b ); // -Infinity
b=Double.MAX_VALUE*Double.MAX_VALUE/(1-c);
System.out.println(""+ b ); // Infinity


Les paramètres de types primitifs ne sont pas des objets. Il existe des classes enveloppes associées aux types
primitifs (Boolean, Byte, Character, Short, Integer, Long, Float et Double) pour permettre de
manipuler les nombres comme des objets. Toutes ces classes ont des méthodes *Value décrites dans la classe
Number permettant de récupérer la valeur dans le type primitif * correspondant.
Integer i = new Integer(1);
int j = i.intValue();


L'ensemble des fonctions de la bibliothèque mathématique sont disponibles dans le package java.lang.Math
: random, abs, sin, co, tan, sqrt, min, max, log, exp...

3-6) Les références

Variable permettant de stocker la référence à un objet.
Circle c;

L'affectation (Circle cercle=c) ne fait pas une copie de l'objet : cercle et c font référence au même objet.
Contrairement au C++ aucun objet n'est créé lors de la déclaration. Le nom de la classe est le type de la référence
pas celui de l'objet. Le type de la référence sert lors des vérifications de type du compilateur. Il n'existe pas de
transtypage implicite avec perte d'informations. Un transtypage forcé peut lever une ClassCastException.
Haut de page
Page précédente Sommaire Page suivante
Haut de page
Contactez-nous
Conditions d'utilisation
Qui sommes nous?
© 2001 IsepFAQtory Tous droits réservés