{"id":41,"date":"2021-05-29T13:37:55","date_gmt":"2021-05-29T13:37:55","guid":{"rendered":"https:\/\/www.louismarchand.me\/?page_id=41"},"modified":"2022-02-23T00:03:59","modified_gmt":"2022-02-23T00:03:59","slug":"retour-sur-le-langage-java","status":"publish","type":"page","link":"https:\/\/www.louismarchand.me\/index.php\/retour-sur-le-langage-java\/","title":{"rendered":"Retour sur le langage Java"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p>Java est un langage de programmation orient\u00e9e objet, cr\u00e9\u00e9 par James Gosling et Patrick Naughton en 1990 pour la compagnie Sun Microsyst\u00e8me (qui a \u00e9t\u00e9 vendu \u00e0 Oracle en 2009).<\/p>\n<p>Voici les caract\u00e9ristiques principales du langage Java:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>Langage orient\u00e9 objet par classes;<\/li>\n<li>Statiquement et fortement typ\u00e9;<\/li>\n<li>Gestion automatique de la m\u00e9moire (ramasse-miette ou \u00ab\u00a0Garbage Collector\u00a0\u00bb);<\/li>\n<li>Langage compil\u00e9 vers un code de machine virtuelle (appel\u00e9 la JVM).<\/li>\n<li>Poss\u00e8de une version libre (OpenJDK) et une version propri\u00e9taire (Oracle JDK).<\/li>\n<li>Les versions java support\u00e9es sont: Java 7, 8, 11 et 17.<\/li>\n<li>Les nouveaux utilisateurs devraient utiliser une des versions suivantes:\n<ul>\n<li>Java 11 (version LTS ou \u00ab\u00a0Long Time Support\u00a0\u00bb): Pour les utilisateurs qui veulent s&rsquo;assurer l&rsquo;utilisation long terme de leurs logiciels.<\/li>\n<li>Java derni\u00e8re version (pr\u00e9sentement 17): Pour les utilisateurs qui veulent les derni\u00e8res fonctionnalit\u00e9s de Java et qui n&rsquo;ont pas de probl\u00e8me \u00e0 effectuer des modifications au code lors d&rsquo;une nouvelle version de Java.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>La suite de d\u00e9veloppement Java (ou JDK)<\/h2>\n<p>La JDK contient une grande quantit\u00e9 d&rsquo;outils. Mais nous allons voir les trois (3) outils principaux dans cette section. Il va de soi que cette section ne pr\u00e9sente qu&rsquo;une base et que ces outils peuvent n\u00e9cessiter beaucoup plus d&rsquo;options que ceux pr\u00e9sent\u00e9s.<\/p>\n<h3>Javac: Le compilateur Java<\/h3>\n<p>La commande <strong>javac<\/strong> permet la compilation d&rsquo;une ou plusieurs classes Java. Voici un exemple d&rsquo;utilisation de la commande <strong>javac<\/strong>.<\/p>\n<pre>javac MaClasse.java\r\n<\/pre>\n<p>Si les classes sp\u00e9cifi\u00e9es dans la commande utilisent d&rsquo;autres classes dont le fichier .java est accessible, les autres classes seront \u00e9galement compil\u00e9es. Il n&rsquo;est donc pas n\u00e9cessaire de sp\u00e9cifier l&rsquo;enti\u00e8ret\u00e9 des classes du syst\u00e8me dans la ligne de commande. En g\u00e9n\u00e9ral, seule la classe contenant la fonction principale <strong>main<\/strong> doit \u00eatre compil\u00e9e.<\/p>\n<h3>Java: Lanceur d&rsquo;application Java<\/h3>\n<p>La commande <strong>java<\/strong> permet d&rsquo;ex\u00e9cuter un programme Java dans la JVM du JDK. Il est important de noter que l&rsquo;argument de cette commande est le nom de la classe \u00e0 ex\u00e9cuter (contenant la routine principale <strong>main<\/strong>), et non le nom du fichier. Voici un exemple d&rsquo;utilisation de la commande:<\/p>\n<pre>java MaClasse\r\n<\/pre>\n<p>La classe sp\u00e9cifi\u00e9e en argument doit avoir pr\u00e9alablement \u00e9t\u00e9 compil\u00e9e par la commande <strong>javac<\/strong>.<\/p>\n<p>Si nous souhaitons envoyer des arguments aux programmes, on peut les sp\u00e9cifier apr\u00e8s le nom de la classe. Par exemple:<\/p>\n<pre>java MaClasse Argument1 Argument2 Argument3\r\n<\/pre>\n<p>Les arguments sont accessibles en utilisant le tableau re\u00e7u en argument de la routine principale <strong>main<\/strong>.<\/p>\n<h3>jdb: Le d\u00e9bogueur Java<\/h3>\n<p>Pour effectuer du d\u00e9bogage, il est g\u00e9n\u00e9ralement mieux d&rsquo;avoir une interface graphique. Par contre, il peut arriver qu&rsquo;il soit important de pouvoir effectuer du d\u00e9bogage en ligne de commande. Par exemple, si l&rsquo;ordinateur ayant le probl\u00e8me se trouve sur un ordinateur sans \u00e9diteur haut niveau (IDE). Ou bien lorsqu&rsquo;on veut d\u00e9boguer sur un serveur distant. La commande <strong>jdb<\/strong> permet ce d\u00e9bogage en ligne de commande.<\/p>\n<p>Premi\u00e8rement, pour utiliser le d\u00e9bogueur Java, vous devez compiler avec l&rsquo;option de d\u00e9boguage, c&rsquo;est \u00e0 dire \u00ab\u00a0-g\u00a0\u00bb:<\/p>\n<pre>javac -g MaClasse.java\r\n<\/pre>\n<p>Ensuite, pour lancer le d\u00e9bogueur, on lance la commande <strong>jdb<\/strong> de la m\u00eame mani\u00e8re que nous lancerions la commande <strong>java<\/strong>. Par exemple:<\/p>\n<pre>jdb MaClasse\r\n<\/pre>\n<p>ou<\/p>\n<pre>jdb MaClasse Argument1 Argument2 Argument3\r\n<\/pre>\n<p>Ensuite, on doit mettre un point d&rsquo;arr\u00eat (ou \u00ab\u00a0breakpoint\u00a0\u00bb) en utilisant la commande <strong>stop<\/strong>. On peut arr\u00eater \u00e0 une ligne en particulier comme ceci:<\/p>\n<pre>stop at MaClasse:17\r\n<\/pre>\n<p>Ou bien on peut arr\u00eater \u00e0 une routine particuli\u00e8re comme ceci:<\/p>\n<pre>stop in MaClasse.main\r\n<\/pre>\n<p>Une fois le ou les points d&rsquo;arr\u00eat sont pr\u00e9cis\u00e9s, on peut lancer l&rsquo;application avec la commande <strong>run<\/strong>:<\/p>\n<pre>run\r\n<\/pre>\n<p>Pour \u00e9valuer le contenu d&rsquo;une variable, on peut utiliser la commande <strong>print<\/strong>:<\/p>\n<pre>print maVariable\r\n<\/pre>\n<p>Pour ex\u00e9cuter une ligne de code, on utilise la commande <strong>next<\/strong>:<\/p>\n<pre>next\r\n<\/pre>\n<p>Pour entrer dans un appel de routine, on utilise la commande <strong>step<\/strong>:<\/p>\n<pre>step\r\n<\/pre>\n<p>\u00c0 noter que si la ligne de code n&rsquo;est pas une routine, la commande <strong>step<\/strong> fait exactement la m\u00eame chose que la commande <strong>next<\/strong>.<br \/>\nPour continuer l&rsquo;ex\u00e9cution normale du programme (apr\u00e8s qu&rsquo;un point d&rsquo;arr\u00eat ait \u00e9t\u00e9 utilis\u00e9), on utilise la commande <strong>cont<\/strong>:<\/p>\n<pre>cont\r\n<\/pre>\n<p>La commande <strong>where<\/strong> permet de voir la pile d&rsquo;ex\u00e9cution de la m\u00e9thode en cours:<\/p>\n<pre>where\r\n<\/pre>\n<p>Finalement, la commande <strong>quit<\/strong> permet de terminer l&rsquo;ex\u00e9cution du programme et de sortir du d\u00e9bogueur.<\/p>\n<pre>quit\r\n<\/pre>\n<h2>La syntaxe de Java<\/h2>\n<h3>Syntaxe d&rsquo;une classe<\/h3>\n<p>En g\u00e9n\u00e9ral, une classe se trouve dans son propre fichier (une classe par fichier) et le nom du fichier doit \u00eatre identique au nom de la classe (sans prendre en compte l&rsquo;extension \u00ab\u00a0.java\u00a0\u00bb). La syntaxe de base d&rsquo;une classe Java se fait de la mani\u00e8re suivante:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">MaClasse<\/span> <span class=\"p\">{<\/span>\r\n\r\n<span class=\"p\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Prendre en note qu&rsquo;\u00e0 moins d&rsquo;avoir une bonne raison de le faire, toutes les classes de fichiers java devraient \u00eatre publiques.<\/p>\n<h3>La routine principale (\u00ab\u00a0main\u00a0\u00bb)<\/h3>\n<p>Pour qu&rsquo;un programme Java puisse \u00eatre ex\u00e9cut\u00e9, il doit y avoir une routine appel\u00e9e <strong>main<\/strong>. Cette routine doit avoir la signature suivante:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"p\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">arguments<\/span><span class=\"p\">)<\/span><\/pre>\n<\/div>\n<p>Utiliser une signature diff\u00e9rente pour une routine principale en Java peut faire en sorte que le programme Java ne d\u00e9marre pas. Il est donc important de bien respecter cette signature. De plus, une fois la routine principale cr\u00e9\u00e9e, pour lancer le programme, il faut lancer la classe compil\u00e9e avec le programme Java.<\/p>\n<p>Il est \u00e0 noter que lorsque nous commencerons \u00e0 programmer en paradigme orient\u00e9 objet, nous devrions avoir tr\u00e8s peu de code \u00e0 l&rsquo;int\u00e9rieur de cette routine. G\u00e9n\u00e9ralement, on ne fait que lancer un constructeur d&rsquo;un objet.<\/p>\n<h3>Les entr\u00e9es\/sorties console<\/h3>\n<p>Afin d&rsquo;afficher des messages \u00e0 l&rsquo;utilisateur et d&rsquo;obtenir des valeurs de l&rsquo;utilisateur, il faut utiliser des m\u00e9canismes d&rsquo;entr\u00e9es\/sorties. Il existe plusieurs m\u00e9canismes d&rsquo;entr\u00e9es\/sorties en Java. Pour le d\u00e9but de ce cours, nous utiliserons l&rsquo;entr\u00e9e et la sortie console standard de Java.<\/p>\n<h4>Afficher un texte \u00e0 l&rsquo;utilisateur<\/h4>\n<p>Pour afficher un texte \u00e0 l&rsquo;utilisateur, nous utiliserons l&rsquo;instruction suivante:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"...\"<\/span><span class=\"p\">);<\/span>\r\n<\/pre>\n<\/div>\n<p>Il est important de noter que cette instruction terminera la ligne inscrite \u00e0 la console. Si vous voulez inscrire une seule ligne de sortie avec plusieurs instructions, on peut utiliser <strong>print<\/strong> au lieu de <strong>println<\/strong>:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">print<\/span><span class=\"p\">(<\/span><span class=\"s\">\"...\"<\/span><span class=\"p\">);<\/span>\r\n<\/pre>\n<\/div>\n<h4>Afficher une erreur \u00e0 l&rsquo;utilisateur<\/h4>\n<p>Normalement, nous devrions utiliser la sortie d&rsquo;erreur afin d&rsquo;afficher une erreur \u00e0 un utilisateur. \u00c7a permet entre autres de voir les erreurs, m\u00eame lorsque nous utilisons une redirection en ligne de commande. Pour utiliser la sortie d&rsquo;erreur, on utiliser l&rsquo;instruction suivante:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">err<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"...\"<\/span><span class=\"p\">);<\/span>\r\n<\/pre>\n<\/div>\n<p>Tout comme dans le cas de la sortie standard, on peut \u00e9galement utiliser <strong>print<\/strong> au lieu de <strong>println<\/strong> pour ne pas terminer la ligne affich\u00e9e.<\/p>\n<p>Voici un exemple:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"p\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">arguments<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Message standard.\"<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">err<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Message d'erreur!\"<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Si j&rsquo;utilise ce programme normalement:<\/p>\n<pre>java Programme\r\n<\/pre>\n<p>J&rsquo;obtiens le r\u00e9sultat attendu:<\/p>\n<pre>Message standard.\r\nMessage d'erreur!\r\n<\/pre>\n<p>Par contre, si je fais une redirection standard:<\/p>\n<pre>java Programme &gt; mon_fichier.log\r\n<\/pre>\n<p>J&rsquo;obtiens le r\u00e9sultat suivant dans la ligne de commande:<\/p>\n<pre>Message d'erreur!\r\n<\/pre>\n<p>Et le contenu du fichier \u00ab\u00a0mon_fichier.log\u00a0\u00bb devient:<\/p>\n<pre>Message standard.\r\n<\/pre>\n<h4>Demander de l&rsquo;information \u00e0 l&rsquo;utilisateur<\/h4>\n<p>Pour demander de l&rsquo;information \u00e0 l&rsquo;utilisateur, il faut utiliser le \u00ab\u00a0stream\u00a0\u00bb <strong>System.in<\/strong>. Par contre, ce \u00ab\u00a0stream\u00a0\u00bb n&rsquo;est pas utilisable directement (principalement \u00e0 cause de l&rsquo;absence d&rsquo;h\u00e9ritage multiple en Java). Pour utiliser <strong>System.in<\/strong>, nous devons utiliser un objet utilitaire qui s&rsquo;occupera de lire l&rsquo;information. Dans le cadre du cours, je recommande d&rsquo;utiliser un <strong>Scanner<\/strong>. Malgr\u00e9 certains petits d\u00e9fauts, il s&rsquo;agit de la m\u00e9canique la plus simple d&rsquo;utilisation. Par contre, si vous pr\u00e9f\u00e9rez une autre m\u00e9thode, libre \u00e0 vous de l&rsquo;utiliser.<\/p>\n<p>Pour utiliser un <strong>Scanner<\/strong>, il faut d&rsquo;abord l&rsquo;importer puisque \u00e7a ne fait pas partie d&rsquo;une classe de base de Java:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">java.util.Scanner<\/span><span class=\"p\">;<\/span>\r\n<\/pre>\n<\/div>\n<p>En suite, nous instancions l&rsquo;objet <strong>Scanner<\/strong> en y sp\u00e9cifiant <strong>System.in<\/strong> comme entr\u00e9e.<\/p>\n<div class=\"highlight\">\n<pre><span class=\"n\">Scanner<\/span> <span class=\"n\">lScanner<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">Scanner<\/span><span class=\"p\">(<\/span><span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">in<\/span><span class=\"p\">);<\/span>\r\n<\/pre>\n<\/div>\n<p>Ensuite, nous pouvons utiliser les utilitaires <strong>next[Type]<\/strong> pour lire un type quelconque au clavier. Par exemple, nous pouvons utiliser <strong>nextInt<\/strong> pour lire un entier, <strong>nextFloat<\/strong> pour lire un nombre \u00e0 virgule, etc. Pour lire une ligne compl\u00e8te, nous utilisons <strong>nextLine<\/strong>.<\/p>\n<p>Voici un exemple simple d&rsquo;utilisation des entr\u00e9es\/sorties en Java:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">java.util.Scanner<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"p\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">arguments<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"n\">Scanner<\/span> <span class=\"n\">lScanner<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">Scanner<\/span><span class=\"p\">(<\/span><span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">in<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"n\">String<\/span> <span class=\"n\">lNom<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"kt\">int<\/span> <span class=\"n\">lAge<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">print<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Entrez votre nom: \"<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"n\">lNom<\/span> <span class=\"o\">=<\/span> <span class=\"n\">lScanner<\/span><span class=\"p\">.<\/span><span class=\"na\">nextLine<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">print<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Entrez votre \u00e2ge: \"<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"n\">lAge<\/span> <span class=\"o\">=<\/span> <span class=\"n\">lScanner<\/span><span class=\"p\">.<\/span><span class=\"na\">nextInt<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Bonjour \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lNom<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\" de \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lAge<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\" ans.\"<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Il est \u00e0 noter qu&rsquo;il est g\u00e9n\u00e9ralement une mauvaise id\u00e9e d&rsquo;alterner des <strong>nextInt<\/strong> (ou <strong>nextFloat<\/strong>) avec des <strong>nextLine<\/strong>. Puisque les <strong>nextInt<\/strong> (et <strong>nextFloat<\/strong>) ne lisent pas la fin de ligne, le r\u00e9sultat peut ne pas \u00eatre ce qui est attendu. Par exemple, le code suivant <strong>ne fonctionnera pas<\/strong>:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">java.util.Scanner<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span>\r\n<span class=\"o\">{<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">arguments<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">Scanner<\/span> <span class=\"n\">lScanner<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">Scanner<\/span><span class=\"o\">(<\/span><span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">in<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">String<\/span> <span class=\"n\">lNom<\/span><span class=\"o\">;<\/span>\r\n        <span class=\"kt\">int<\/span> <span class=\"n\">lAge<\/span><span class=\"o\">;<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">print<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Entrez votre \u00e2ge: \"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">lAge<\/span> <span class=\"o\">=<\/span> <span class=\"n\">lScanner<\/span><span class=\"o\">.<\/span><span class=\"na\">nextInt<\/span><span class=\"o\">();<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">print<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Entrez votre nom: \"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">lNom<\/span> <span class=\"o\">=<\/span> <span class=\"n\">lScanner<\/span><span class=\"o\">.<\/span><span class=\"na\">nextLine<\/span><span class=\"o\">();<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Bonjour \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lNom<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\" de \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lAge<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\" ans.\"<\/span><span class=\"o\">);<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Afin d&rsquo;\u00e9viter d&rsquo;avoir cette probl\u00e9matique, on peut utiliser seulement le <strong>nextLine<\/strong> et ensuite, transf\u00e9rer les valeurs lues en <strong>int<\/strong> ou en <strong>float<\/strong> avec des <strong>Integer.parseInt<\/strong> ou <strong>Float.parseFloat<\/strong>. Voici l&rsquo;exemple pr\u00e9c\u00e9dent corrig\u00e9.<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">java.util.Scanner<\/span><span class=\"o\">;<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span>\r\n<span class=\"o\">{<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">arguments<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\r\n        <span class=\"n\">Scanner<\/span> <span class=\"n\">lScanner<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">Scanner<\/span><span class=\"o\">(<\/span><span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">in<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">String<\/span> <span class=\"n\">lNom<\/span><span class=\"o\">,<\/span> <span class=\"n\">lAgeTexte<\/span><span class=\"o\">;<\/span>\r\n        <span class=\"kt\">int<\/span> <span class=\"n\">lAge<\/span><span class=\"o\">;<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">print<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Entrez votre \u00e2ge: \"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">lAgeTexte<\/span> <span class=\"o\">=<\/span> <span class=\"n\">lScanner<\/span><span class=\"o\">.<\/span><span class=\"na\">nextLine<\/span><span class=\"o\">();<\/span>\r\n        <span class=\"n\">lAge<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Integer<\/span><span class=\"o\">.<\/span><span class=\"na\">parseInt<\/span><span class=\"o\">(<\/span><span class=\"n\">lAgeTexte<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">print<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Entrez votre nom: \"<\/span><span class=\"o\">);<\/span>\r\n        <span class=\"n\">lNom<\/span> <span class=\"o\">=<\/span> <span class=\"n\">lScanner<\/span><span class=\"o\">.<\/span><span class=\"na\">nextLine<\/span><span class=\"o\">();<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Bonjour \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lNom<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\" de \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lAge<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\" ans.\"<\/span><span class=\"o\">);<\/span>\r\n    <span class=\"o\">}<\/span>\r\n<span class=\"o\">}<\/span>\r\n<\/pre>\n<\/div>\n<h3>Les variables en Java<\/h3>\n<p>Java est un langage typ\u00e9. Il faut donc pr\u00e9ciser le type de chaque variable dans sa d\u00e9claration. Il y a deux cat\u00e9gories de type en Java: les types primitifs et les types objets.<\/p>\n<h4>Les types primitifs<\/h4>\n<p>Certains types en Java ne repr\u00e9sentent pas un objet (dans le sens qu&rsquo;ils ne sont pas bas\u00e9s sur une classe de l&rsquo;arbre d&rsquo;h\u00e9ritage). On appelle ces types <strong>types primitifs<\/strong>. La caract\u00e9ristique de ces types est qu&rsquo;ils n&rsquo;ont aucune m\u00e9thode ni attribut et qu&rsquo;ils ne peuvent pas \u00eatre utilis\u00e9s en contexte de polymorphisme (nous verrons ce concept plus tard). Voici un exemple de code utilisant les diff\u00e9rents types primitifs accessibles en Java:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"p\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">arguments<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"kt\">byte<\/span> <span class=\"n\">lByte<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">120<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/ Peut prendre des valeurs entre -128 et 127.<\/span>\r\n        <span class=\"kt\">short<\/span> <span class=\"n\">lShort<\/span> <span class=\"o\">=<\/span> <span class=\"o\">-<\/span><span class=\"mi\">30000<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/ Peut prendre des valeurs entre<\/span>\r\n                               <span class=\"c1\">\/\/ -32768 et 32767.<\/span>\r\n        <span class=\"kt\">int<\/span> <span class=\"n\">lInt<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/ Peut prendre des valeurs entre <\/span>\r\n                      <span class=\"c1\">\/\/ -2147483648 et 2147483647.<\/span>\r\n        <span class=\"kt\">long<\/span> <span class=\"n\">lLong<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1234567890<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/ Peut prendre des valeurs entre<\/span>\r\n                                 <span class=\"c1\">\/\/ -9223372036854775808 et 9223372036854775807.<\/span>\r\n        <span class=\"kt\">float<\/span> <span class=\"n\">lFloat<\/span> <span class=\"o\">=<\/span> <span class=\"mf\">0.312f<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/ Nombre \u00e0 virgule avec 32 bits de pr\u00e9cision.<\/span>\r\n        <span class=\"kt\">double<\/span> <span class=\"n\">lDouble<\/span> <span class=\"o\">=<\/span> <span class=\"o\">-<\/span><span class=\"mf\">123.456<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/ Nombre \u00e0 virgule avec 64 bits de pr\u00e9cision.<\/span>\r\n        <span class=\"kt\">boolean<\/span> <span class=\"n\">lBoolean<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">true<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/ Peut prendre les valeurs `true` et `false`.<\/span>\r\n        <span class=\"kt\">char<\/span> <span class=\"n\">lChar<\/span> <span class=\"o\">=<\/span> <span class=\"sc\">'A'<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/ Valeur de 16 bits (comme un short) repr\u00e9sentant un<\/span>\r\n                          <span class=\"c1\">\/\/ caract\u00e8re Unicode. On peut pr\u00e9ciser le code en<\/span>\r\n                          <span class=\"c1\">\/\/ utilisant le code hexad\u00e9cimal '\\u0000' \u00e0 '\\uFFFF'.<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Il est \u00e0 noter que, techniquement, les <strong>array<\/strong> peuvent \u00e9galement \u00eatre consid\u00e9r\u00e9s comme un type primitif. En g\u00e9n\u00e9ral, en langage-objet, nous pr\u00e9f\u00e9rons utiliser un type objet pour repr\u00e9senter les collections (comme une <strong>ArrayList<\/strong> par exemple). Voici un exemple d&rsquo;<strong>array<\/strong>:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"p\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">arguments<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"kt\">int<\/span> <span class=\"n\">i<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"kt\">int<\/span><span class=\"o\">[]<\/span> <span class=\"n\">lTableau1<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span><span class=\"mi\">10<\/span><span class=\"p\">,<\/span> <span class=\"mi\">20<\/span><span class=\"p\">,<\/span> <span class=\"mi\">30<\/span><span class=\"p\">,<\/span> <span class=\"mi\">40<\/span><span class=\"p\">,<\/span> <span class=\"mi\">50<\/span><span class=\"p\">,<\/span> <span class=\"mi\">60<\/span><span class=\"p\">,<\/span> <span class=\"mi\">70<\/span><span class=\"p\">,<\/span> <span class=\"mi\">80<\/span><span class=\"p\">,<\/span> <span class=\"mi\">90<\/span><span class=\"p\">,<\/span> <span class=\"mi\">100<\/span><span class=\"p\">};<\/span>\r\n        <span class=\"kt\">float<\/span><span class=\"o\">[]<\/span> <span class=\"n\">lTableau2<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"kt\">float<\/span><span class=\"o\">[<\/span><span class=\"mi\">10<\/span><span class=\"o\">]<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Taille du tableau 2: \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lTableau2<\/span><span class=\"p\">.<\/span><span class=\"na\">length<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\u00c9l\u00e9ments du tableau 1:\"<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"n\">i<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"n\">i<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">lTableau1<\/span><span class=\"p\">.<\/span><span class=\"na\">length<\/span><span class=\"p\">;<\/span> <span class=\"n\">i<\/span> <span class=\"o\">=<\/span> <span class=\"n\">i<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"    \u00c9l\u00e9ment \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">i<\/span> <span class=\"o\">+<\/span> <span class=\"s\">\" : \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lTableau1<\/span><span class=\"o\">[<\/span><span class=\"n\">i<\/span><span class=\"o\">]<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/pre>\n<\/div>\n<h4>Les types objets<\/h4>\n<p>Les types objets sont des types qui sont des instances de classes. Nous ne rentrerons pas tout de suite sur ce concept, mais sachez seulement que la tr\u00e8s grande majorit\u00e9 des types que vous utiliserez sont dans cette cat\u00e9gorie. En g\u00e9n\u00e9ral, le nom de ces types d\u00e9bute par une lettre majuscule. Par exemple: <strong>String<\/strong>, <strong>Scanner<\/strong>, <strong>ArrayList<\/strong>, etc.<\/p>\n<p>Il est \u00e0 pr\u00e9ciser que les types primitifs (sauf les <strong>array<\/strong>) ont un type objet associ\u00e9. \u00c7a permet d&rsquo;utiliser une m\u00e9canique similaire au polymorphisme avec les types primitifs. Voici un exemple de variables ayant des types primitifs et \u00e9tant encapsul\u00e9s dans des variables ayant des types objets:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">java.util.ArrayList<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"p\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">arguments<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"n\">ArrayList<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">Object<\/span><span class=\"o\">&gt;<\/span> <span class=\"n\">lListe<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">ArrayList<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">Object<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"kt\">int<\/span> <span class=\"n\">lEntier<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">10<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"kt\">double<\/span> <span class=\"n\">lNombre<\/span> <span class=\"o\">=<\/span> <span class=\"mf\">0.123<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"n\">Integer<\/span> <span class=\"n\">lInteger<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Integer<\/span><span class=\"p\">.<\/span><span class=\"na\">valueOf<\/span><span class=\"p\">(<\/span><span class=\"n\">lEntier<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"n\">lListe<\/span><span class=\"p\">.<\/span><span class=\"na\">add<\/span><span class=\"p\">(<\/span><span class=\"n\">lInteger<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"n\">lListe<\/span><span class=\"p\">.<\/span><span class=\"na\">add<\/span><span class=\"p\">(<\/span><span class=\"n\">Double<\/span><span class=\"p\">.<\/span><span class=\"na\">valueOf<\/span><span class=\"p\">(<\/span><span class=\"n\">lNombre<\/span><span class=\"p\">));<\/span>\r\n        <span class=\"n\">lListe<\/span><span class=\"p\">.<\/span><span class=\"na\">add<\/span><span class=\"p\">(<\/span><span class=\"n\">Boolean<\/span><span class=\"p\">.<\/span><span class=\"na\">valueOf<\/span><span class=\"p\">(<\/span><span class=\"kc\">false<\/span><span class=\"p\">));<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\u00c9l\u00e9ment 1: \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lListe<\/span><span class=\"p\">.<\/span><span class=\"na\">get<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">).<\/span><span class=\"na\">toString<\/span><span class=\"p\">());<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\u00c9l\u00e9ment 2: \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lListe<\/span><span class=\"p\">.<\/span><span class=\"na\">get<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">).<\/span><span class=\"na\">toString<\/span><span class=\"p\">());<\/span>\r\n        <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\u00c9l\u00e9ment 3: \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lListe<\/span><span class=\"p\">.<\/span><span class=\"na\">get<\/span><span class=\"p\">(<\/span><span class=\"mi\">2<\/span><span class=\"p\">).<\/span><span class=\"na\">toString<\/span><span class=\"p\">());<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/pre>\n<\/div>\n<h3>Les structures de contr\u00f4le<\/h3>\n<p>Voici les principales structures de contr\u00f4les utilis\u00e9s dans le langage Java:<\/p>\n<h4>Les conditionnelles \u00ab\u00a0if\u00a0\u00bb<\/h4>\n<p>Afin de valider une information, on peut utiliser la structure de contr\u00f4le <strong>if<\/strong>. Ce type de structure permet d&rsquo;ex\u00e9cuter une branche de code pr\u00e9cise en fonction d&rsquo;une ou plusieurs conditions. Par exemple:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">lAge<\/span> <span class=\"o\">&gt;=<\/span> <span class=\"mi\">18<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Vous \u00eates majeur.\"<\/span><span class=\"p\">);<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Ici, on voit que la branche de code \u00e0 l&rsquo;int\u00e9rieur de la structure <strong>if<\/strong> (le \u00ab\u00a0print\u00a0\u00bb) sera ex\u00e9cut\u00e9e si la condition \u00ab\u00a0lAge &gt;= 18\u00a0\u00bb est vrai.<\/p>\n<p>Il est \u00e9galement possible de pr\u00e9ciser la branche \u00e0 utiliser dans le cas ou la condition est fausse. Pour se faire, on utilise le mot cl\u00e9 <strong>else<\/strong>. Par exemple:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">lAge<\/span> <span class=\"o\">&gt;=<\/span> <span class=\"mi\">18<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Vous \u00eates majeur.\"<\/span><span class=\"p\">);<\/span>\r\n<span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Vous \u00eates mineur.\"<\/span><span class=\"p\">);<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Il est \u00e9galement possible de pr\u00e9ciser plusieurs conditions et plusieurs branches \u00e0 ex\u00e9cut\u00e9es avec une structure <strong>else if<\/strong>. Par exemple:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">lAge<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mi\">18<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Yo \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lNom<\/span><span class=\"p\">);<\/span>\r\n<span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span><span class=\"p\">(<\/span><span class=\"n\">age<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mi\">60<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Salut \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lNom<\/span><span class=\"p\">);<\/span>\r\n<span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Bonjour \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">lNom<\/span><span class=\"p\">);<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/pre>\n<\/div>\n<h4>Les boucles while<\/h4>\n<p>La boucle <strong>while<\/strong> permet d&rsquo;ex\u00e9cuter du code \u00e0 r\u00e9p\u00e9tition, et ce, tant qu&rsquo;une condition est vraie. La structure est similaire \u00e0 un <strong>if<\/strong> (ne contenant aucun <strong>else<\/strong>) mais qui boucle tant que la condition est vrai. Par exemple:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">java.util.Scanner<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"p\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">arguments<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"n\">String<\/span> <span class=\"n\">lEntree<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"\"<\/span><span class=\"p\">;<\/span>\r\n        <span class=\"n\">Scanner<\/span> <span class=\"n\">lScanner<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">Scanner<\/span><span class=\"p\">(<\/span><span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">in<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"k\">while<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"n\">lEntree<\/span><span class=\"p\">.<\/span><span class=\"na\">equals<\/span><span class=\"p\">(<\/span><span class=\"s\">\"0\"<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">print<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Entrez sur 0:\"<\/span><span class=\"p\">);<\/span>\r\n            <span class=\"n\">lEntree<\/span> <span class=\"o\">=<\/span> <span class=\"n\">lScanner<\/span><span class=\"p\">.<\/span><span class=\"na\">nextLine<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"p\">}<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Cet exemple bouclera tant que l&rsquo;utilisateur n&rsquo;aura pas appuy\u00e9 sur \u00ab\u00a00\u00a0\u00bb dans la console.<\/p>\n<h4>Les boucles for<\/h4>\n<p>Les boucles <strong>for<\/strong> permette une it\u00e9ration sur un ensemble de donn\u00e9es. La boucle <strong>for<\/strong> classique permet d&rsquo;it\u00e9rer sur l&rsquo;ensemble des nombres entiers entre deux bornes. Par exemple, pour it\u00e9rer entre 0 et 10, on utilise le code:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"n\">i<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"n\">i<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mi\">11<\/span><span class=\"p\">;<\/span> <span class=\"n\">i<\/span> <span class=\"o\">=<\/span> <span class=\"n\">i<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">...<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Il est important de comprendre que cette version de la boucle <strong>for<\/strong> n&rsquo;apporte rien de plus (sauf peut-\u00eatre de la documentation) que la boucle <strong>while<\/strong>. En effet, on peut simuler la boucle <strong>for<\/strong> pr\u00e9sent\u00e9 plus haut par la boucle while:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"n\">i<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">while<\/span> <span class=\"p\">(<\/span><span class=\"n\">i<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mi\">11<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Valeur: \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">i<\/span><span class=\"p\">);<\/span>\r\n    <span class=\"n\">i<\/span> <span class=\"o\">=<\/span> <span class=\"n\">i<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\r\n<span class=\"p\">}<\/span>  \r\n<\/pre>\n<\/div>\n<p>De la m\u00eame fa\u00e7on, on peut remplacer la boucle <strong>while<\/strong> suivante:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"k\">while<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"n\">lEntree<\/span><span class=\"p\">.<\/span><span class=\"na\">equals<\/span><span class=\"p\">(<\/span><span class=\"s\">\"0\"<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">...<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Par la boucle <strong>for<\/strong> suivante:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"k\">for<\/span> <span class=\"p\">(;<\/span><span class=\"o\">!<\/span><span class=\"n\">lEntree<\/span><span class=\"p\">.<\/span><span class=\"na\">equals<\/span><span class=\"p\">(<\/span><span class=\"s\">\"0\"<\/span><span class=\"p\">);)<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">...<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/pre>\n<\/div>\n<p>Il est important de comprendre que cette boucle n&rsquo;est pas acceptable dans un programme, mais elle est syntaxiquement correcte pour Java.<\/p>\n<p>Les boucles <strong>for<\/strong> peuvent \u00e9galement it\u00e9rer sur les \u00e9l\u00e9ments d&rsquo;un ensemble de donn\u00e9es. On peut par exemple parcourir les \u00e9l\u00e9ments d&rsquo;une liste en utilisant une boucle <strong>for<\/strong>. Par exemple:<\/p>\n<div class=\"highlight\">\n<pre><span class=\"kn\">import<\/span> <span class=\"nn\">java.util.ArrayList<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Programme<\/span>\r\n<span class=\"p\">{<\/span>\r\n    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"p\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">arguments<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"n\">ArrayList<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">String<\/span><span class=\"o\">&gt;<\/span> <span class=\"n\">lListe<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">ArrayList<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">String<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">();<\/span>\r\n        <span class=\"n\">lListe<\/span><span class=\"p\">.<\/span><span class=\"na\">add<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Ligne 1\"<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"n\">lListe<\/span><span class=\"p\">.<\/span><span class=\"na\">add<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Ligne 2\"<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"n\">lListe<\/span><span class=\"p\">.<\/span><span class=\"na\">add<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Ligne 3\"<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"n\">lListe<\/span><span class=\"p\">.<\/span><span class=\"na\">add<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Ligne 4\"<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"n\">lListe<\/span><span class=\"p\">.<\/span><span class=\"na\">add<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Ligne 5\"<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"n\">lListe<\/span><span class=\"p\">.<\/span><span class=\"na\">add<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Ligne 6\"<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"n\">lListe<\/span><span class=\"p\">.<\/span><span class=\"na\">add<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Ligne 7\"<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"n\">lListe<\/span><span class=\"p\">.<\/span><span class=\"na\">add<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Ligne 8\"<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"n\">lListe<\/span><span class=\"p\">.<\/span><span class=\"na\">add<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Ligne 9\"<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"n\">lListe<\/span><span class=\"p\">.<\/span><span class=\"na\">add<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Ligne 10\"<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"n\">String<\/span> <span class=\"n\">element<\/span> <span class=\"p\">:<\/span> <span class=\"n\">lListe<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Element: \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">element<\/span><span class=\"p\">);<\/span>\r\n        <span class=\"p\">}<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/pre>\n<\/div>\n<p><a href=\"https:\/\/www.louismarchand.me\/index.php\/programmation-orientee-objet-1\/\">Retour<\/a><\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<p>Auteur: Louis Marchand<br \/>\n<a href=\"https:\/\/creativecommons.org\/licenses\/by\/4.0\/deed.fr\" target=\"_blank\" rel=\"license noopener noreferrer\"><img decoding=\"async\" src=\"https:\/\/i.creativecommons.org\/l\/by\/4.0\/80x15.png\" alt=\"Creative Commons License\" \/><\/a><br \/>\nSauf pour les sections sp\u00e9cifi\u00e9es autrement, ce travail est sous licence <a href=\"https:\/\/creativecommons.org\/licenses\/by\/4.0\/deed.fr\" target=\"_blank\" rel=\"license noopener noreferrer\">Creative Commons Attribution 4.0 International<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Java est un langage de programmation orient\u00e9e objet, cr\u00e9\u00e9 par James Gosling et Patrick Naughton en 1990 pour la compagnie Sun Microsyst\u00e8me (qui a \u00e9t\u00e9 vendu \u00e0 Oracle en 2009). Voici les caract\u00e9ristiques principales du langage Java: Langage orient\u00e9 objet par classes; Statiquement et fortement typ\u00e9; Gestion automatique de la m\u00e9moire (ramasse-miette ou \u00ab\u00a0Garbage&hellip; <a class=\"more-link\" href=\"https:\/\/www.louismarchand.me\/index.php\/retour-sur-le-langage-java\/\">Continue reading <span class=\"screen-reader-text\">Retour sur le langage Java<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-41","page","type-page","status-publish","hentry","entry"],"_links":{"self":[{"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/pages\/41","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/comments?post=41"}],"version-history":[{"count":6,"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/pages\/41\/revisions"}],"predecessor-version":[{"id":601,"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/pages\/41\/revisions\/601"}],"wp:attachment":[{"href":"https:\/\/www.louismarchand.me\/index.php\/wp-json\/wp\/v2\/media?parent=41"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}