Les bases de Java
Transcription
Les bases de Java
Les bases de Java Plan ● Votre machine virtuelle VMWare ● Les outils de développement ● Les variables et les opérateurs ● Lire les entrées clavier ● Les conditions ● Les boucles ● TP Conversion Celsius Fahrenheit ● Les tableaux ● Les méthodes de classes. Les outils de développement ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ JRE ou JDK / Eclipse IDE. Eclipse Votre premier projet Eclipse Votre premier programme Java Commentaires Commentaires Javadoc Générer la javadoc avec Eclipse Résumé JRE / JDK ? ● JRE ou JDK ? – Java RunTime Environment JRE contient tout le nécessaire pour faire en sorte que vos programmes Java puissent être exécutés sur votre machine. – Java Development Kit JDK contient en plus d’JRE les outils nécessaires pour compiler, développer, … JRE / JDK ? ● Depuis un terminal : – java -version – javac Sous windows, il faut ajouter javac dans la Path IDE. Eclipse ● IDE Eclipse – Eclipse est un éditeur pour le développement avec plusieurs langages : ● Java, PHP, C++, etc – Dernière version 4.7 (juno) – Il existe une version ● Eclipse portable (clé USB) IDE. Eclipse ● Eclipse. ● Depuis un terminal : $$> eclipse & IDE. Eclipse ● Changer de perspective : – Window → Open perspective → Java IDE. Eclipse ● Menu File. IDE. Eclipse ● Barre d'outils New project Debug Compilation et exécution New Class / interface / Ennum / Annotation New package Votre premier projet Eclipse ● File → new → Java Projet Votre premier projet Eclipse Votre premier projet Eclipse ● Nouvelle classe. – File → new → class Votre premier projet Eclipse ● Résultat 3 1 2 4 Votre premier projet Eclipse ● ● Pour les petits projets IDE Eclipse est suffisant. Pour des projets de taille importante (plus de dépendance avec d'autres Jar, lib, projets, ...) – MAVEN – MAVEN / ECLIPSE votre premier programme Java public class Test { /** * @param args */ public static void main(String[] args) { System.out.print("Hello tii !"); } } votre premier programme Java public class Test { /** * @param args */ public static void main(String[] args) { System.out.print("Hello tii !"); } } Votre premier programme Java ● Run → run Votre premier programme Java ● Compilation et exécution depuis un terminal ! ● Terminal ● – $$> cd learning_java/codes/workspace_chapitre_1/votrePremierProgrammeJava/src – $$> javac Test.java – $$> java Test – $$> Hello tii ! $$>.... Eclipse, place le Test.class dans : – learning_java/codes/workspace_chapitre_1/.../bin Votre premier programme Java System.out.print("Hello World !"); System.out.print("Hello World ! \n"); System.out.print("My name is"); System.out.println("My name is"); System.out.print("jenesaispas !"); System.out.println("\n jenesaispas"); Pour obtenir les mêmes résultats que printf sous C++ \t tabulation Il faut utiliser \n nouvelle ligne – System.out.format('' la moyenne de la classe est %2.2f'',mean) ; \r retour chariot Votre premier programme Java ● Les programmes java sont pré-compilés par JVM en Bytecode (IDE ou javac). ● Bytecode n'est compréhensible que par JVM ● JVM fait le lien ensuite avec l'OS. ● JVM dépend d'OS et ne pas de votre code. Quel que soit l'OS sous lequel a été codé un programme Java, n'importe quelle machine pourra l'exécuter si elle dispose d'une JVM ! Votre premier programme Java ● Test.java → code ● Test.class → bytecode ● ● ● Tous les programmes Java sont composés d'au moins une classe « Test.java ». Elle doit contenir une méthode appelée main : ce sera le point de démarrage de notre programme. Une méthode est une suite d'instructions : – Un entête. Identité. – Un corps – Une valeur de retour. Votre premier programme Java Déboguer avec Eclipse 2 1 Déboguer avec Eclipse Déboguer avec Eclipse Commentaires ! /** * Ceci est un commentaire Javadoc. * Il commence par un slash suivis de deux étoiles. * Chaque ligne doit ensuite commencer par une étoile. * Enfin, il fini par une étoile suivie d'un slash. */ protected Vector<Zero> getVectorAmis(){ // Ceci est un commentaire sur une ligne Vector<Zero> vector = new Vector<Zero>(); /* Ceci est un commentaire sur plusieurs lignes */ for (Zero z : listeAmis){ vector.add(z); } return vector; } Commentaires javadoc /** Description of MyClass /** Description of myMethod(int a, String b) * * * @author John Doe * @author Jane Doe * @version 6.0z Build 9000 Jan 3, 1970. */ * @param a Description of a * @param b Description of b public class MyClass * @return Description of c { /** Description of myIntField */ */ public int myIntField; /** Description of MyClass() public Object myMethod(int a, String b) * * @throws MyException Description of myException */ { Object c; public MyClass() throws myException { // Blah Blah Blah... // Blah Blah Blah... } return c; …. } } Commentaires javadoc ● ● ● @param permet de documenter un paramètre de l'élément @return permet de fournir une description de la valeur de retour d'une méthode qui en possède une : inutile donc de l'utiliser sur une méthode qui retourne void. @throws l'élément permet de préciser une exception qui peut être levée par ● @author permet de préciser le ou les auteurs de l'élément ● @version permet de préciser le numéro de version de l'élément ● @see documenté permet de préciser un élément en relation avec l'élément ● @since permet de préciser depuis quelle version l'élément a été ajouté ● @deprecated permet de préciser qu'un élément est déprécié Commentaires Javadoc Générer la javadoc avec Eclipse ● Project → generate javadoc Générer la javadoc avec Eclipse ● Project → generate javadoc Générer la javadoc avec Eclipse Générer la javadoc avec Eclipse ● Du temps de perdu, du temps gagné ! ● Autre format que HTML → Les doclets. Résumé ● La JVM est le cœur de Java. ● Elle fait fonctionner vos programmes Java, précompilés en byte code. ● Les fichiers contenant le code source de vos programmes Java ont l'extension .java. ● ● ● Les fichiers précompilés correspondant à vos codes source Java ont l'extension .class. Le byte code est un code intermédiaire entre celui de votre programme et celui que votre machine peut comprendre. Un programme Java, codé sous Windows, peut être précompilé sous Mac et enfin exécuté sous Linux. ● Votre machine NE PEUT PAS comprendre le byte code, elle a besoin de la JVM. ● Tous les programmes Java sont composés d'au moins une classe. ● ● Le point de départ de tout programme Java est la méthode public static void main(String[] args). On peut afficher des messages dans la console grâce à ces instructions : – System.out.println, qui affiche un message avec un saut de ligne à la fin ; – System.out.print, qui affiche un message sans saut de ligne. Les variables et les opérateurs ✗ ✗ ✗ ✗ ✗ Les types de variables Convention de nommage Les opérateurs arithmétiques Les conversions (CAST) Résumé Les types de variables ● <Type de la variable> <Nom de la variable> ; ● En Java, nous avons deux types de variables : – des variables de type simple ou « primitif » ; – des variables de type complexe ou des « Objets » Les types de variables Les variables de type numérique byte temperature; short vitesseMax; long anneeLumiere; temperature = 64; vitesseMax = 32000; anneeLumiere = 9460700000000000L; 1 octet 2 octets 8 octets float pi; double division; int temperatureSoleil; pi = 3.141592653f; division = 0.3333333333333333333333333 33333333333333333334d; temperatureSoleil = 15600000; //La température est exprimée en kelvins 4 octets 8 octets 4 octets Les types de variables Des variables stockant un caractére ● Le type char contient un caractère stocké entre apostrophes (« ' ' »), comme ceci : char caractere; caractere = 'A'; Les types de variables Les variables booléen Le type boolean ne peut contenir que deux valeurs : true (vrai) ou false (faux). boolean question; question = true; Pas de boolean 0/1 comme C++ Les types de variables Et aussi le type String ! Le type String permet de gérer les chaînes de caractères, c'est-àdire le stockage de texte. //Première méthode de déclaration String phrase; phrase = "Titi et Grosminet"; //Deuxième méthode de déclaration String str = new String(); str = "Une autre chaîne de caractères"; //Troisième méthode de déclaration String string = "Une autre chaîne"; //Quatrième méthode de déclaration String chaine = new String("Et une de plus !"); Convention de nommage ● ● ● ● tous vos noms de classes doivent commencer par une majuscule ; tous vos noms de variables doivent commencer par une minuscule ; si le nom d'une variable est composé de plusieurs mots, le premier commence par une minuscule, le ou les autres par une majuscule, et ce, sans séparation ; tout ceci sans accentuation ! Convention de nommage public class Toto{} public class Nombre{} public class TotoEtTiti{} String chaine; String chaineDeCaracteres; int nombre; int nombrePlusGrand; 2 astuces Déclaration et d'initialisation en une seule phase. int entier = 32; float pi = 3.1416f; char carac = 'z'; String mot = new String("Coucou"); Plusieurs variables d'un même type → une déclaration int nbre1 = 2, nbre2 = 3, nbre3 = 0; Les opérateurs arithmétiques ● « + » : permet d'additionner deux variables numériques (mais aussi de concaténer des chaînes de caractères). ● « - » : permet de soustraire deux variables numériques. ● « * » : permet de multiplier deux variables numériques. ● « / » : permet de diviser deux variables numériques. ● « % » : permet de renvoyer le reste de la division entière de deux variables de type numérique ; cet opérateur s'appelle le modulo. int nbre1, nbre2, nbre3; //Déclaration des variables nbre1 = 1 + 3; //nbre1 vaut 4 nbre2 = 2 * 6; //nbre2 vaut 12 nbre3 = nbre2 / nbre1; //nbre3 vaut 3 nbre1 = 5 % 2; //nbre1 vaut 1, car 5 = 2 * 2 + 1 nbre2 = 99 % 8; //nbre2 vaut 3, car 99 = 8 * 12 + 3 nbre3 = 6 % 3; //là, nbre3 vaut 0, car il n'y a pas de reste Les opérateurs arithmétiques nbre1 = nbre1 + 1; nbre1 = nbre1 * 2; nbre1 += 1; nbre1 *= 2; nbre1++; nbre1 = nbre1 / 2; ++nbre1; nbre1 /= 2; nbre1 = nbre1 - 1; nbre1 -= 1; nbre1--; --nbre1; Remarque : La différence entre x++ ou ++x se fait ressentir lorsque l'on combine plusieurs opérations. Avec x++ on utilise la valeur de x puis on ajoute 1, alors qu'avec ++x on ajoute d'abord 1, puis on utilise le résultat. Il en va de même pour x-- et --x. Les opérateurs arithmétiques On ne peut faire du traitement arithmétique que sur des variables de même type sous peine de perdre de la précision lors du calcul. Conversion (cast) double nbre1 = 10, nbre2 = 3; int i = 123; int resultat = (int)(nbre1 / nbre2); float j = (float)i; System.out.println("Le résultat est = " + resultat); int i = 123; double j = (double)i; // pas de cast : int nbre1 = 3, nbre2 = 2; double i = 1.23; double resultat = nbre1 / nbre2; double j = 2.9999999; System.out.println("Le résultat est = " + resultat); int k = (int)i; // priorité d'opérations k = (int)j; //k vaut 1 //k vaut 2 int nbre1 = 3, nbre2 = 2; double resultat = (double)(nbre1 / nbre2); System.out.println("Le résultat est = " + resultat); Conversion (Cast) autrement ! int i = 12; String j = new String(); j = j.valueOf(i); int i = 12; String j = new String(); j = j.valueOf(i); int k = Integer.valueOf(j).intValue(); Un bonus. avec Java 7 ● La possibilité de formater vos variables de types numériques avec un séparateur, l'underscore ( _ ) – double nombre = 1__000____000___000_000; Interdit : ● ● double d = 123_.159; int entier = _123; int entier2 = 123_; Avant Java 7 – ● int entier = 255; //Peut s'écrire « int entier = 0xFF; » Après Java 7 – int entier = 0b100000000000; //Est équivalent à : « int entier = 2048; » Résumé ● ● ● ● ● ● On affecte une valeur dans une variable avec l'opérateur égal (« = »). Après avoir affecté une valeur à une variable, l'instruction doit se terminer par un point-virgule (« ; »). Vos noms de variables ne doivent contenir ni caractères accentués ni espaces et doivent, dans la mesure du possible, respecter la convention de nommage Java. Lorsque vous effectuez des opérations sur des variables, prenez garde à leur type : vous pourriez perdre en précision. Vous pouvez caster un résultat en ajoutant un type devant celui-ci : (int), (double), etc. Prenez garde aux priorités lorsque vous castez le résultat d'opérations, faute de quoi ce dernier risque d'être incorrect. Lire les entrées Clavier Lire les entrées clavier ● La classe Scanner permet d'analyser dans un flux les types primitifs java et les chaînes de caractères en utilisant des expressions régulières Scanner sc = new Scanner(System.in); Scanner se trouve dans : java.util.Scanner Lire les entrées clavier import java.util.Scanner public class Test { /** * @param args line de commande */ public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Veuillez saisir un mot :"); String str = sc.nextLine(); System.out.println("Vous avez saisi : " + str); } } Lire les entrées clavier public class Pact { /** * @param args line de commande */ public static void main(String[] args) { Scanner sc = new Scanner(System.in); Récupérer un entier ? (nextInt() ) Récupérer un double (nextDouble() ) ? Récupérer un char ? Récupérer un caractère } } Lire les entrées clavier Exploiter les méthodes ● Exploiter les méthodes – nextInt() – nextDouble() – nextLine() – nextLong() – – nextByte() charAt() pour lire depuis le clavier : un entier, un double, un long et un byte. pour récupérer un caractère Les conditions ✗ ✗ ✗ La structure if … else … La structure switch La condition ternaire La structure if … else ... if(//condition) { //Exécution des instructions si la condition est remplie } else { //Exécution des instructions si la condition n'est pas remplie } La structure if … else ... int i = 0; if (i < 0) System.out.println("Ce nombre est négatif !"); else if(i > 0) System.out.println("Ce nombre est positif !"); else System.out.println("Ce nombre est nul !"); La structure if … else ... ● « == » : permet de tester l'égalité. ● « != » : permet de tester l’inégalité. ● « < » : strictement inférieur. ● « <= » : inférieur ou égal. ● « > » : strictement supérieur. ● « >= » : supérieur ou égal. ● « && » : l'opérateur ET. Il permet de préciser une condition ● « || » : le OU. Même combat que le précédent. ● « ? : » : l'opérateur ternaire. La structure if … else ... ● « == » : permet de tester l'égalité. ● « != » : permet de tester l’inégalité. ● « < » : strictement inférieur. ● « <= » : inférieur ou égal. ● « > » : strictement supérieur. ● « >= » : supérieur ou égal. ● « && » : l'opérateur ET. Il permet de préciser une condition ● « || » : le OU. Même combat que le précédent. ● « ? : » : l'opérateur ternaire. La structure switch switch (/*Variable*/) { case /*Argument*/: /*Action*/; break; default: /*Action*/; } La structure switch int note = 10; //On imagine que la note maximale est 20 switch (note) { case 0: System.out.println("Ouch !"); break; case 10: System.out.println("Vous avez juste la moyenne."); break; case 20: System.out.println("Parfait !"); break; default: System.out.println("Il faut davantage travailler."); } La structure switch //A partir de JRE 1.7 String chaine = "Bonjour"; switch(chaine) { case "Bonjour": System.out.println("Bonjour monsieur !"); break; case "Bonsoir": System.out.println("Bonsoir monsieur !"); break; default: System.out.println("Bonjoir ! :p"); } La condition ternaire Les conditions ternaires sont assez complexes et relativement peu utilisées. int x = 10, y = 20; int max = (x < y) ? y : x ; //Maintenant, max vaut 20 int x = 10, y = 20; int max = (x < y) ? y * 2 : x * 2 ; //Ici, max vaut 40 int x = 10, y = 20; int max = (x < y) ? ((y < 10) ? y % 10 : y * 2) : x ; //Max vaut 40 Les boucles ✗ ✗ ✗ La boucle while La boucle do … while La boucle for La boucle while while (/* condition */) { //I nstructionsàrépéter } La boucle while ● Nous allons afficher Bonjour, <un prénom>, prénom qu'il faudra taper au clavier ; puis nous demanderons si l'on veut recommencer. La boucle while //Une variable vide String prenom; //On initialise celle-ci à O pour oui char reponse = 'O'; //Notre objet Scanner, n'oubliez pas l'import de java.util.Scanner ! Scanner sc = new Scanner(System.in); //Tant que la réponse donnée est égale à oui… while (reponse == 'O') { //On affiche une instruction System.out.println("Donnez un prénom : "); //On récupère le prénom saisi prenom = sc.nextLine(); //On affiche notre phrase avec le prénom System.out.println("Bonjour " +prenom+ ", comment vas-tu ?"); //On demande si la personne veut faire un autre essai System.out.println("Voulez-vous réessayer ? (O/N)"); //On récupère la réponse de l'utilisateur reponse = sc.nextLine().charAt(0); } System.out.println("Au revoir…"); //Fin de la boucle La boucle do ...while do { // instructions } while (/* condition */) La boucle do … while () ● Refaire avec do … while La boucle for() for ( /*déclaration des variables avant la boucle*/ ; /*initialisation*/ ; /*incrémentation*/ ) { // Instructions } La boucle for ... La boucle for ... Cumuler les conditions for(int i=0, j=2 ; (i < 40 && j <60) ; i++, j+=2) { System.out.println("i= " + i + " , j = "+ j ); } TP Conversion Celsius Fahrenheit TP conversion Celsius - Fahrenheit ● Formule Math : – F = 9/5 x C + 32 – C = ((F – 32) x 5) / 9 TP conversion Celsius - Fahrenheit Les tableaux ✗ ✗ ✗ Tableau à une dimension Tableau multidimensionnels Rechercher dans un tableau Tableau à une dimension ● Déclaration <type du tableau> <nom du tableau> [] = { <contenu du tableau>}; // Avec initialisation int tableauEntier[] = {0,1,2,3,4,5,6,7,8,9}; double tableauDouble[] = {0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0}; char tableauCaractere[] = {'a','b','c','d','e','f','g'}; String tableauChaine[] = {"chaine1", "chaine2", "chaine3" , "chaine4"}; // Sans initialisation int tableauEntier[] = new int[6]; //Ou encore int[] tableauEntier2 = new int[6]; Les tableaux multidimensionnels ● Déclaration. int premiersNombres[][] = { {0,2,4,6,8},{1,3,5,7,9} }; Utiliser & rechercher dans un tableau Ce que je vous propose, c'est tout simplement d'afficher un des tableaux présentés ci-dessus dans son intégralité. Sachez qu'il existe une instruction qui retourne la taille d'un tableau : grâce à elle, nous pourrons arrêter notre boucle (car oui, nous allons utiliser une boucle). Il s'agit de l'instruction <mon tableau>.length. Utiliser et rechercher ● Maintenant, nous allons essayer de faire une recherche dans un de ces tableaux. En gros il va falloir effectuer une saisie clavier et regarder si celle-ci est présente dans le tableau. Utiliser et rechercher String[] str = new String[10]; //L'instruction suivante va déclencher une exception //Car vous essayez d'écrire à la case 11 de votre tableau //Alors que celui-ci n'en contient que 10 (ça commence à 0 !) str[10] = "Une exception"; Utiliser et rechercher String tab[][]={{"toto", "titi", "tutu", "tete", "tata"}, {"1", "2", "3", "4"}}; int i = 0, j = 0; for(String sousTab[] : tab) { i = 0; for(String str : sousTab) { System.out.println("La valeur de la nouvelle boucle est : " + str); System.out.println("La valeur du tableau à l'indice ["+j+"] ["+i+"] est : " + tab[j][i]); i++; } j++; } Résumé ● ● ● ● ● Un tableau est une variable contenant plusieurs données d'un même type. Pour déclarer un tableau, il faut ajouter des crochets [ ] à la variable ou à son type de déclaration. Vous pouvez ajouter autant de dimensions à votre tableau que vous le souhaitez, ceci en cumulant des crochets à la déclaration. Le premier élément d'un tableau est l'élément 0. Vous pouvez utiliser la syntaxe du JDK 1.5 de la boucle for pour parcourir vos tableaux : for(String str : monTableauDeString). Les méthodes de Classe ✗ Quelques méthodes utiles ✗ Créer sa propre méthode ✗ La surcharge de méthode ✗ Résumé Quelques méthodes utiles toLowerCase() /* Classe String */ String chaine = new String("COUCOU TOUT LE MONDE !"), chaine2 = new String(); chaine2 = chaine.toLowerCase(); //Donne "coucou tout le monde !" Quelques méthodes utiles toUpperCase() /* Classe String */ String chaine = new String("coucou coucou !"), chaine2 = new String(); chaine2 = chaine.toUpperCase(); //Donne "COUCOU COUCOU !" Quelques méthodes utiles String chaine = new String("coucou ! "); double X = 0.0; int longueur = 0; X = Math.random(); longueur = chaine.length(); //Renvoie 9 String str1 = new String("coucou"), str2 = new String("toutou"); //Retourne un nombre aléatoire //compris entre 0 et 1, comme 0.0001385746329371058 if (str1.equals(str2)) System.out.println("Les deux chaînes sont identiques !"); else System.out.println("Les deux chaînes sont différentes !"); String nbre = new String("1234567"); char carac = nbre.charAt(4); //Renverra ici le caractère 5 double sin = Math.sin(120); //La fonction sinus double cos = Math.cos(120); //La fonction cosinus double tan = Math.tan(120); //La fonction tangente double abs = Math.abs(-120.25); //La fonction valeur absolue (retourne le nombre sans le signe) String chaine = new String("la paix niche"), chaine2 = new String(); double d = 2; chaine2 = chaine.substring(3,13); //Permet d'extraire "paix niche" double exp = Math.pow(d, 2); String mot = new String("anticonstitutionnellement"); //Ici, on initialise la variable exp avec la valeur de d élevée au carré int n = 0; n = mot.indexOf('t'); //n vaut 2 n = mot.lastIndexOf('t'); //n vaut 24 n = mot.indexOf("ti"); //n vaut 2 n = mot.lastIndexOf("ti"); n = mot.indexOf('x'); //n vaut 12 //n vaut -1 //La fonction exposant //La méthode pow() prend donc une valeur en premier paramètre, et un exposant en second Créer sa propre méthode public class PACT { public static void main(String[] args) { String[] tab = {"toto", "tata", "titi", "tete"}; parcourirTableau(tab); } static void parcourirTableau(String[] tabBis) { for(String str : tabBis) System.out.println(str); } } Créer sa propre méthode public class Pact { public static void main(String[] args) { String[] tab = {"toto", "tata", "titi", "tete"}; parcourirTableau(tab); System.out.println(toString(tab)); } static void parcourirTableau(String[] tab) { for(String str : tab) System.out.println(str); } static String toString(String[] tab) { System.out.println("Méthode toString() !\n----------"); String retour = ""; for(String str : tab) retour += str + "\n"; return retour; } } La surcharge de méthode Résumé ● ● ● ● ● Une méthode est un morceau de code réutilisable qui effectue une action bien définie. Les méthodes se définissent dans une classe. Les méthodes ne peuvent pas être imbriquées. Elles sont déclarées les unes après les autres. Une méthode peut être surchargée en modifiant le type de ses paramètres, leur nombre, ou les deux. Pour Java, le fait de surcharger une méthode lui indique qu'il s'agit de deux, trois ou X méthodes différentes, car les paramètres d'appel sont différents. Par conséquent, Java ne se trompe jamais d'appel de méthode, puisqu'il se base sur les paramètres passés à cette dernière.