Base documentaire - partie web Le langage Java Marie-Noëlle Terrasse, Joël Savelli, Eric Leclercq, Marinette Savonnet Département IEM, Université de Bourgogne Cette présentation du langage Java doit vous servir de référence mis les différents éléments du langage dont vous avez besoin seront présentés au fur et à mesure. Le langage Java (lancé par Sun au milieu des années 90, voir http ://java.sun.com) est actuellement représenté par la version Java 2. Java est essentiellement utilisé soit sous forme de programmes (exécutés au niveau système, soit directement sur le système d’exploitation soit sur une machine virtuelle java) soit sous forme d’applets incluses dans du code HTML (s’exécutant sur la machine virtuelle d’un navigateur internet). Java est un langage orienté objet dans lequel le programmeur définit des classes (regroupement d’attributs et d’opérations). L’appel d’une opération d’une classe lorsqu’elle est exécutée par un objet de cette classe prend la forme : objet.operation(paramètres) 1 Les bases Nous allons donner rapidement les composants principaux d’un programme Java. Les types de base sont les booléens pour les expressions logiques (boolean), les caractères (char codage Unicode sur deux octets, par exemple ’A’), les différents format d’entiers relatifs (sur un octet byte, sur deux octets short, sur quatre octets int, sur huit octets long), les réels (sur quatre octets float, sur huit octets double). Les noms de variables peuvent être construits avec des lettres minuscules ou majuscules, des tirets, des chiffres. La déclaration d’une variable comprend le type et le nom de la variable. Par exemple pour définir une variable x de type long, on écrira : long x ; Il est possible de modifier le type d’une valeur en indiquant, avant la valeur et entre paranthèses, le type résultat. Par exemple pour transtyper en entier sur 4 octet le contenu de la variable x on écrira : (int) x . Attention : le transtypage peut modifier la valeur de façon importante (voire lui faire perdre toute signification). Il existe un certain nombre de caratères spéciaux : \n \f \b \t \" \’ \\ \xxx \uxxxx saut de ligne saut de page retour arrière tabulation guillemet apostrophe back slash caractère Latin 1 caractère Unicode Il existe en Java une classe qui permet de manipuler les chaînes de caractères : c’est la classe String. Pour pouvoir utiliser cette classe, il faut importer le package correspondant, i.e., mettre avant la définition de la classe, l’instruction : import java.lang.String ; 1 2 Une variable de type chaînes est déclarée par String ch1 ;. Dans les exemples ci-dessous on suppose que l’on a (en plus de ch1) : String ch2 ; char cc ; Les chaînes de caractères en Java sont délimitées par des guillemets ("). Une valeur de type chaîne est par exemple "AZERTY". Les principales opérations disponibles sur les chaînes sont : opération length + ou concat equals equalsIgnoreCase() valueof toUpperCase toLowerCase replace trim toString() parseByte() parseShort() parseInt() parseLong() parseFloat() parseDouble() effet calcul de la longueur concaténation test d’égalité test d’égalité sans distinguer minuscules/majuscules traduction de char en String traduction en majuscules traduction en minuscules remplacement d’un caractère par un autre suppression des espaces (début et fin de chaine) conversion d’un numérique en string conversion d’un Byte en String conversion d’un Short en String conversion d’un Int en String conversion d’un Float en String conversion d’un Double en String traduction d’une chaine en numérique numérique de type Byte numérique de type Short numérique de type Int numérique de type Long numérique de type Float numérique de type Double exemple ch1.length ch1 + ch2 ou ch1.concat(ch2) ch1.equals(ch2) ch1.equalsIgnoreCase(ch2) String.valueof(cc) ch1.toUpperCase() ch1.toLowerCase() ch1.replace(cc,’*’) ; ch1.trim() ch1=toString(num) ; ch1=Byte.toString(num) ; ch1=Short.toString(num) ; ch1=Int.toString(num) ; ch1=Float.toString(num) ; ch1=Double.toString(num) ; Byte.parseByte(ch1) ; Short.parseShort(ch1) ; Integer.parseInt(ch1) ; Long.parseLong(ch1) ; Float.parseFloat(ch1) ; Double.parseDouble(ch1) ; Les opérateurs de base Pour manipuler les valeurs numériques on dispose des opérateurs arithmétiques + - * / et % pour la division entière) ainsi que ++ et - - pour incrémenter (de 1). Les comparaisons s’écrivent < <= > >= ainsi que == pour l’égalité et != pour la différence. Les opérateurs & (et), | (ou), ! (non) ainsi que ˆ (xor, ou exclusif) permettent d’écrire des conditions complexes. Les instructions de base – L’affectation est notée =. – Pour afficher sur écran on utilise l’instruction System.out.println(xxx) ; dans laquelle xxx est une succession de commentaires (chaînes de caractères) et de variables séparées par des +. – La conditionnelle simple s’écrit : if (condition ) { partie alors} else {partie sinon} La partie else est facultative. On peut donc écrire : if ( x==5 ) System.out.println("La valeur de " + x + "n’est pas nulle"); ou if ( x==5 ) System.out.println("La valeur de x (" + x + ") est cinq"); else System.out.println("Valeur de x non conforme"); – La conditionnelle à cas s’écrit : 3 switch (expression) { case valeur : action;break; case valeur : action;break; ... case valeur : action;break; default : action; } L’expression doit être de type char, byte, short ou int. Attention chaque action doit être terminée par break ; (sauf la dernière action du switch). La partie default est facultative. – La boucle for s’écrit : for (initialisation; condition de continuation; incrementation) { action } Par exemple pour afficher les carrés des entiers de 1 à 5 on écrira : for (i=1; i<=5; i++) { System.out.println(i + "a pour carre : ",i*i); } – L’itération conditionnelle (while) s’écrit : while ( condition de continuation) { action } Par exemple pour afficher les carrés des entiers de 1 à 5 on écrira : i=1; while (i<=5) { System.out.println(i + "a pour carre : ",i*i); i++; } On peut aussi utiliser la forme avec test de la condition de continuation en fin d’itération : do { action } while ( condition de continuation) Par exemple pour afficher les carrés des entiers de 1 à 5 on écrira : i=1; do { System.out.println(i + "a pour carre : ",i*i); i++; } while (i <=5); – Les classes sont la base de structuration des programmes en Java. Une classe a un nom. Son code source (en java) est stocké dans un fichier ayant le même nom que la classe et comme extension .java. Une fois compilé on obtient un fichier de même nom et d’extension .class qui peut être interprété par une machine virtuelle Java. Une classe est définie de la façon suivante : class nom { static void main() { déclaration des variables instructions } définition des opérations 4 } Les opérations (sauf main) sont optionnelles. Elles peuvent renvoyer un résultat (de type char, byte, short, int, long, float, double) ou non (type void). Elles sont définies par : static type_resultat nom (type parametre, type parametre, ...) { déclaration des variables instructions } } 2 Les exceptions Lors de la définition d’une opération, il est possible en java d’indiquer un déroulement anormal en déclanchant une exception (on utilise throw ). Pendant l’exécution d’un bloc d’action il est possible de détecter (lever) les exceptions et de lancer un traitement spécifique à cette exception. On utilise : try { action } catch (exception) { traitement de l’exception } catch (exception) { traitement de l’exception } ... catch (exception) { traitement de l’exception } finally {action terminale} La clause finally est optionnelle, si elle existe, l’action "finally" est exécutée dans tous les cas (avec ou sans traitement d’exceptions). 3 Compléments divers La définition des constantes se fait par le mot-clé final : final char FIN=’F’ ; En pratique nous allons souvent déclarer et initialiser la variable en une seule fois (ce qui permet d’éviter le problème de variable non initialisées) puis l’utiliser. 4 Liens Vous pouvez trouver des cours plus détaillés : – "Introduction à la programmation Java", Jacques Bapst, URL=www.eif.ch/ jbapst/pr1/. – Java in a nutshell, David Flanagan, Ed. O’Reilly, traduction française.