370 likes | 498 Views
J100 (JSB). Java : Syntaxe de Base. Les variables système. CLASSPATH=c:Rep_JDKlibclasses.zip;. Indique le chemin des bibliothèques de classes, aussi bien pour la compilation que l ’exécution. Le path PATH=$PATH:$Rep_JDKbin Indique la situation de java et javac
E N D
J100 (JSB) Java : Syntaxe de Base ~ Brigitte Groléas ~
Les variables système • CLASSPATH=c:\Rep_JDK\lib\classes.zip;. Indique le chemin des bibliothèques de classes, aussi bien pour la compilation que l ’exécution. • Le path PATH=$PATH:$Rep_JDK\bin Indique la situation de java et javac • La documentation de sun en api java.sun.com/j2se/1.5.0/docs/api/index.html • JAVA_HOME doit indiquer la racine de Java ~ Brigitte Groléas ~
Historique • En 1990James Gosling : langage « Oak » pour faciliter l’implémentation de logiciels pour l’électronique grand publique • 1994 : explosion du Web sur l’Internet • 1995 : Gosling présente la version Bêta de HotJava • 1996 : Sun rend publique la première version Bêta du JDK (Java Development Kit) • 1997 : Sun sort la version 1.1 du JDK qui reprend l’intégralité des API du JDK 1.0 • 2005 : java 1.5 dernière version ~ Brigitte Groléas ~
Présentation du langage Java • Simple et orienté objet • Robuste, fiable et sûr • Efficace et riche • Interprété, indépendant de l’architecture et rapide • Portable • Multitâche (multithread) • Réparti • Dynamique et distribué ~ Brigitte Groléas ~
Structure d’une application Java public class Essai { public static void main( String argv[] ) { System.out.print( "coucou\n" ); } } Fichier source une seule classe publique nom du fichier = nom de la classe publique .java javac Essai.java Le code est exécuté sur la machine virtuelle java (JVM pour Java Virtual Machine). java Essai ~ Brigitte Groléas ~
Programmation modulaire : les packages Lepackage « java.lang » est automatiquement importé dans tous les sources Java. Répertoire : toto/titi/tata Nom du package : toto.titi.tata import toto.titi.tata.essai; import toto.titi.tata.*; java.applet Classes pour implémenter les applets. java.awt Classes pour les graphiques (GUI) . java.awt.image Classes pour le traitement des Images java.awt.peer Interfaces avec les environnements natifs java.io Classes pour les entrées/sorties java.lang Classes de base du langage. java.net Classespour la communication réseaux. java.util Classes d’utilitaires. ~ Brigitte Groléas ~
Les variables • Peuvent être de 2 natures : • primitive • référence à un objet ou à un tableau • Toute variable locale doit être initialisée explicitement avant de pouvoir utiliser sa valeur • Ce n'est pas le cas des variables d'instance ~ Brigitte Groléas ~
Les packages • L'instruction package indique à quel package appartient la classe du fichier. • C'est la première instruction du fichier • Par défaut une classe appartient au paquetage anonyme • L'instruction import permet de référencer des classes sans les préfixer du nom de leur package. ~ Brigitte Groléas ~
Types gérés par valeur : types primitifs type valeur par défaut char caractère unicode \u0000 boolean valeur booléenne false byte entier signé 8 bits 0 short entier signé 16 bits 0 int entier signé 32 bits 0 long entier signé 64 bits 0 float flottant 32 bits 0.0 f double flottant 64 bits 0.0 ~ Brigitte Groléas ~
Des classes associées • Des classes sont Boolean, Character, Integer, Long, Float et Double. Elles permettent de définir des constantes et des méthodes utiles. short et byte ne sont que des types de stockage • Pour créer des objets à partir de type primitifs • Integer.parserInt("123"); • MIN_VALUE Integer i = new Integer(1); int j = i.intValue(); ~ Brigitte Groléas ~
Types gérés par références : Les objets • Instanciation et destruction des objets • ClassName x; //Crée la référence • x = new ClassName(); //Crée l’objet et le référence par x • 2 variables différentes peuvent désigner le même objet • ClassName x = new ClassName(); • ClassName y = x; //x et y désignent tous deux le même objet ! ref obj Tas ~ Brigitte Groléas ~
Copier un objet : la méthode « clone() » si elle est implémentée par la classe en question (Classes implémentant l’interface « Cloneable » ). • ClassName x = new ClassName(); • ClassName y = x.clone(); • Tester l’égalité entre 2 objets : une méthode spécialement conçue pour comparer les objets. En java, un certain nombre de classes redéfinissent la méthode « equal() » de la classe « Object ». ~ Brigitte Groléas ~
Les Tableaux • Les références int tab1[]; ou int [] tab1; ClassName tab2[]; ou ClassName [] tab; • Instanciation de tableaux • tab1= new int[100]; • tab2= new ClassName[10]; • int tab[] = { 1, 2, 3, 4, 5}; • String dico[]= { "hiboux", "choux", "genoux" }; La création d’un tableau ne crée pas les objets contenus dans le tableau Un tableau est considéré comme un objet. Il est manipulé via une référence ~ Brigitte Groléas ~
À vous … (sur le papier) • Réservez une référence velo sur un tableau d’entiers • Sur la référence velo, intanciez un tableau de 10 entiers • Réserver un entier i, initialisé à 0 • Tant que i est plus petit que 10 • Mettre 12 dans la ième case de velo • Augmenter i de 1 • Fin de la boucle ~ Brigitte Groléas ~
int[] velo; • velo = new int[10]; • int i = 0; • while( i < velo.length ) { • velo[i] = 12; • i = i +1; • } ~ Brigitte Groléas ~
int[] velo; • velo = new int[10]; • for(int i = 0; i < velo.length; i = i +1) { • velo[i] = 12; • } ~ Brigitte Groléas ~
Tableaux multidimensionnels int tab[][][] = new int[5][4][3]; • int tab[][] = new int[3][]; • 3 références sur des int[] • tab[0] = new int[2]; • 1er s/s tableau : 2 cases • tab[1] = new int[3]; • 2eme s/s tableau : 3 cases • tab[2] = new int[4]; • 3eme s/s tableau : 4 cases Il n’est pas obligatoire de stipuler le nombre d’éléments contenus pour chaque dimension (seule la première est obligatoire) int tab[][] = { { 1, 2}, { 3, 4, 5 }, { 6, 7, 8, 9 } }; ~ Brigitte Groléas ~
À vous … • Créer une référence titi sur un tab à 2 dimensions d’entiers • Sur la référence titi créer un tableau de 5 tableaux d’entiers • Chacune des cases de titi contiendra la référence d’un tableau d’entiers • Dans titi[0] créez un tab de 1 entier • Dans titi[1] créez un tab de 2 entiers • Dans titi[2] créez un tab de 3 entiers • Dans titi[3] créez un tab de 4 entiers • Dans titi[4] créez un tab de 5 entiers ~ Brigitte Groléas ~
Accès aux éléments et aux dimensions int tab[][]= new int[10][20]; System.out.println( tab.length ); // imprime 10 System.out.println( tab[0].length ); // imprime 20 Tous les accès aux tableaux sont contrôlés. Une erreur (Exception) de type : ArrayIndexOutOfBoundsException est générée en cas de débordement. ~ Brigitte Groléas ~
Les Chaînes de caractères : String java.lang.String • String s = "Bonjour"; • String s = "Coucou"; • StringBuffer buf = new StringBuffer( s ); • buf.append( " me revoilou" ); • System.out.println( buf ); • l’opérateur « + » int i = 5; System.out.println( "i = " + i ); Si une opérande n’est pas de type String, elle est convertie en une chaîne pour les types primitifs ou via la méthode « toString() » pour les types non-primitifs. ~ Brigitte Groléas ~
Les Opérateurs 1 PREC NOM OPERANDE ASSOCIATIVITE 1 ++, --, +, - numérique D ~ entier D ! booleen D new, (type) tout type D 2 *, /, % numérique G 3 +, - numérique G + String G 4 >>, <<, >>> entier G 5 >, >=, <, <= numérique G instanceof objet G ~ Brigitte Groléas ~
Les Opérateurs 2 PREC NOM OPERANDE ASSOCIATIVITE 6 ==, != primitif,référence G 7 & entier ou booleen G 8 ^ entier ou booleen G 9 | entier ou booleen G 10 && booleen G 11 || booleen G 12 ? : booleen,exp,exp D 13 =, +=, -=, *=, /=, %=, variable, exp D <<=, >>=,>>>=, &=, |=, ^= ~ Brigitte Groléas ~
Sens d'évaluation La flèche « --> » indique que les opérateurs sont évalués de la gauche vers la droite. C'est le cas de la majorité des opérateurs. La flèche « <-- » indique que Les opérateurs sont évalués de la droite vers la gauche. C'est le cas des opérateurs unaires et des opérateurs d'affectations 3 + 4 - 7 + 6 - 5 <==> (((3 + 4) - 7) + 6) - 5 3 + 12 * 5 / 3 <==> 3 + ( (12 * 5) / 3 ) x < 2 || x > 5 && x < 7 <==> (x<2) || ((x>5) && (x<7)) x = y = z = 5 <==> x = ( y = (z = 5) ) x = y = z++ * -a <==> x = (y = ((z++) * (-a))) x = y > 7 <==> x = ( y > 7 ) ~ Brigitte Groléas ~
Opérateurs Arithmétiques - Moins unaire -X - Division X / Y - Multiplication X * Y - Modulo X % Y - Addition X + Y - Soustraction X - Y Le modulo (reste de la division entière) ne peut s'employer que sur des types entiers Division. est entière lorsque les 2 termes de l'expression sont entiers. Si 1 des termes est « float » ou « double », elle sera réelle. ~ Brigitte Groléas ~
Opérateurs binaires X = 0 0 1 1 0 0 1 1 ----------------- ~X = 1 1 0 0 1 1 0 0 Complément binaire Et binaire Ou inclusif binaire Ou exclusif binaire X = 1 1 0 0 1 0 1 1 Y = 1 1 1 0 0 0 1 1 ----------------- X & Y = 1 1 0 0 0 0 1 1 X = 1 1 0 0 1 0 1 1 Y = 1 1 1 1 0 0 0 1 ------------------------ X | Y = 1 1 1 1 1 0 1 1 X = 1 1 0 0 1 0 1 1 Y = 1 1 1 1 0 0 0 1 ------------------------ X ^ Y = 0 0 1 1 1 0 1 0 ~ Brigitte Groléas ~
Exemples Exemple: Isoler les 3 derniers bits d'un mot. X = b7 b6 b5 b4 b3 b2 b1 b0 7 = 0 0 0 0 0 1 1 1 ------------------------- X & 7 = 0 0 0 0 0 b2 b1 b0 Exemple: tester si le bit « b3 » du mot « X » est à « 1 ». X = b7 b6 b5 b4 b3 b2 b1 b0 8 = 0 0 0 0 1 0 0 0 ------------------------- X & 8 = 0 0 0 0 b3 0 0 0 ~ Brigitte Groléas ~
Décalage Décalage à droite Décalage à gauche 5 = 0 0 0 0 0 1 0 1 ------------------------ 5 >> 1 = 0 0 0 0 0 0 1 0 = 5/2 = 2 (division entière) 5 = 0 0 0 0 0 1 0 1 ---------------- 5 << 3 = 0 0 1 0 1 0 0 0 = 5 * 8 = 40 ~ Brigitte Groléas ~
Opérateurs d'Inc/Décrémentation • - pré-incrémentation ++X • - post-incrémentation X++ • - pré-décrémentation --X • - post-décrémentation X-- « X = Y++; » revient à faire: Tmp = Y; Y = Y + 1; X = Tmp; « X = ++Y; » revient à faire: Y = Y + 1; X = Y; ~ Brigitte Groléas ~
Opérateur Conditionnel <condition> ? <expression1> : <expression2> a = ( a < b ) ? a + b : a - b; équivaut à a += ( a < b ) ? b : -b; équivaut à if( a < b ) a = a + b; else a = a - b; ~ Brigitte Groléas ~
À vous … vrai ou faux • char c; déclare un caractère sur 8 bits • boolean b; déclare une valeur booléenne • short i; déclare un entier signé 8 bits • int j; déclare un entier signé 32 bits • ClassName x; déclare une instance x de la classe ClassName. • tab1= new int[100]; déclare un tableau de 100 entiers • int tab[][] = new int[10][10]; déclare un tableau à 2 dimensions de 100 entiers • String dico[]= { "hiboux", "choux", "genoux" }; déclare un tableau de 3 Strings initialisées ~ Brigitte Groléas ~
À vous … vrai ou faux Identifier les lignes correctes pour utiliser la classe InputStream du package java.io • import java.io.*; • import java.io.InputStream; • import io.*; • import java.*; • aucun import n'est nécessaire, ce package est importé par défaut ~ Brigitte Groléas ~
À vous … vrai ou faux Pour créer un fichier Dessin.class : • Le programme source doit s'appeler Dessin.javac • Une classe du fichier source doit porter le nom de Dessin • Une fonction main (et une seule) doit être incluse dans n'importe laquelle des classes du fichier source ~ Brigitte Groléas ~
Structures de contrôle sélectives switch( expression ) { case constante_1: instruction_1.1 instruction_1.2 ... case constante_2: instruction_2.1 instruction_2.2 ... case constante_n: instruction_n.1 ... default: instruction_n+1.1 } if( condition ) { instructions à faire si vrai } else { instructions à faire si faux } break ~ Brigitte Groléas ~
Les Itérations while( condition ) { instructions à exécuter tant que la condition est vraie (i.e. différente de zéro) } do { instructions } while( condition ); for( [initialisation] ; [condition] ; [incrémentation] ) { instructions } ~ Brigitte Groléas ~
Depuis Java 5 • int [] tab = new int[10]; • for (int i : tab ) • somme = somme + tab[i]; ~ Brigitte Groléas ~
Les ruptures • CONTINUE Permet de « remonter » à la partie « condition » dans la boucle courante. Empêche l’exécution des instructions qui la suivent. Généralement utilisée conjointement avec une instruction « if » ou « switch » imbriqué dans la boucle. • BREAK Permet de sortir d'une boucle (ou d'un « switch ») avant la fin de la boucle (ou du « switch ») Généralement utilisée conjointement à une instruction « if » imbriquée dans la boucle. • return Permet de sortir d’une méthode pour retourner à la méthode appelante. ~ Brigitte Groléas ~
Les blocs labelisés un: while ( ...) { ... deux: for(...) { ... trois: while (...) { ... if (...) continue un; if (...) break deux; continue; } • } } Reprend sur la première boucle while Quitte la boucle for Reprend sur deuxième boucle while (trois) ~ Brigitte Groléas ~