[{"data":1,"prerenderedAt":619},["ShallowReactive",2],{"page-\u002Fjava\u002Fjvm-et-premier-programme":3,"pieces-java":576,"autour-\u002Fjava\u002Fjvm-et-premier-programme":602,"prerequis-\u002Fjava\u002Fjvm-et-premier-programme":607,"plan-java":608},{"id":4,"title":5,"body":6,"description":544,"extension":545,"ligne":45,"meta":546,"motsCles":547,"navigation":551,"niveau":552,"path":553,"prerequis":554,"ressources":555,"seo":567,"sources":568,"stem":574,"__hash__":575},"docs\u002Fjava\u002F01.jvm-et-premier-programme.md","La JVM et ton premier programme",{"type":7,"value":8,"toc":533},"minimark",[9,14,27,31,40,130,140,143,147,150,188,191,194,198,208,215,221,225,252,255,276,287,291,297,316,326,334,337,348,359,363,366,443,449,469,473,479,482,486,529],[10,11,13],"h2",{"id":12},"ce-que-tu-vas-apprendre","Ce que tu vas apprendre",[15,16,17,21,24],"ul",{},[18,19,20],"li",{},"Ce que sont la JVM, le JDK et le bytecode.",[18,22,23],{},"Installer un JDK et vérifier qu'il fonctionne.",[18,25,26],{},"Compiler et lancer un premier programme Java.",[10,28,30],{"id":29},"un-premier-programme","Un premier programme",[32,33,34,35,39],"p",{},"Voici le plus petit programme Java utile. Crée un fichier ",[36,37,38],"code",{},"Bonjour.java"," :",[41,42,47],"pre",{"className":43,"code":44,"filename":38,"language":45,"meta":46,"style":46},"language-java shiki shiki-themes github-light-default github-dark-default github-dark-default","public class Bonjour {\n    public static void main(String[] args) {\n        System.out.println(\"Bonjour, recettes !\");\n    }\n}\n","java","",[36,48,49,69,100,118,124],{"__ignoreMap":46},[50,51,54,58,61,65],"span",{"class":52,"line":53},"line",1,[50,55,57],{"class":56},"sOnC1","public",[50,59,60],{"class":56}," class",[50,62,64],{"class":63},"sIXEE"," Bonjour",[50,66,68],{"class":67},"scfrF"," {\n",[50,70,72,75,78,81,85,88,91,94,97],{"class":52,"line":71},2,[50,73,74],{"class":56},"    public",[50,76,77],{"class":56}," static",[50,79,80],{"class":56}," void",[50,82,84],{"class":83},"syCW7"," main",[50,86,87],{"class":67},"(",[50,89,90],{"class":56},"String",[50,92,93],{"class":67},"[] ",[50,95,96],{"class":63},"args",[50,98,99],{"class":67},") {\n",[50,101,103,106,109,111,115],{"class":52,"line":102},3,[50,104,105],{"class":67},"        System.out.",[50,107,108],{"class":83},"println",[50,110,87],{"class":67},[50,112,114],{"class":113},"shWOn","\"Bonjour, recettes !\"",[50,116,117],{"class":67},");\n",[50,119,121],{"class":52,"line":120},4,[50,122,123],{"class":67},"    }\n",[50,125,127],{"class":52,"line":126},5,[50,128,129],{"class":67},"}\n",[32,131,132,133,136,137,139],{},"Le nom du fichier doit être le nom de la classe, avec la même casse. Ici : ",[36,134,135],{},"Bonjour"," et ",[36,138,38],{},".",[32,141,142],{},"Le programme affiche une ligne de texte dans le terminal. Voyons d'abord ce qu'il faut installer pour le lancer.",[10,144,146],{"id":145},"bytecode-jvm-jdk-les-mots-à-connaître","Bytecode, JVM, JDK : les mots à connaître",[32,148,149],{},"Java ne se transforme pas directement en code machine. Il passe par une étape intermédiaire.",[15,151,152,160,172],{},[18,153,154,155,159],{},"Le ",[156,157,158],"strong",{},"bytecode"," est un code compact, produit par le compilateur, que ton processeur ne comprend pas directement.",[18,161,162,163,166,167,171],{},"La ",[156,164,165],{},"JVM"," (",[168,169,170],"em",{},"Java Virtual Machine",") est le programme qui lit le bytecode et l'exécute sur ta machine.",[18,173,154,174,166,177,180,181,184,185,187],{},[156,175,176],{},"JDK",[168,178,179],{},"Java Development Kit",") est la boîte à outils du développeur : il contient le compilateur ",[36,182,183],{},"javac",", la commande ",[36,186,45],{}," et la JVM.",[32,189,190],{},"Grâce à la JVM, le même bytecode tourne sous Windows, macOS et Linux. C'est l'idée derrière la formule « écris une fois, exécute partout ».",[32,192,193],{},"Pour développer, tu installes un JDK. Il contient déjà tout ce qu'il faut pour exécuter.",[10,195,197],{"id":196},"choisir-une-version-la-lts","Choisir une version : la LTS",[32,199,200,201,166,204,207],{},"Java sort une nouvelle version tous les six mois. Certaines sont dites ",[156,202,203],{},"LTS",[168,205,206],{},"Long-Term Support",") : elles sont maintenues plus longtemps. Les LTS actuelles sont Java 8, 11, 17, 21 et 25.",[32,209,210,211,214],{},"Ce cours utilise ",[156,212,213],{},"Java 25",", la LTS actuelle. Prends un JDK 25 ou plus récent : tout le code du cours y fonctionne.",[216,217,218],"note",{},[32,219,220],{},"Une version non LTS (par exemple la 26 ou la 27) fonctionne aussi pour apprendre. Pour un vrai projet qui doit durer, on choisit en général une LTS.",[10,222,224],{"id":223},"installer-un-jdk","Installer un JDK",[226,227,228,239,242,245],"ol",{},[18,229,230,231,238],{},"Ouvre la page de téléchargement ",[232,233,237],"a",{"href":234,"rel":235},"https:\u002F\u002Fdev.java\u002Fdownload\u002F",[236],"nofollow","dev.java\u002Fdownload"," ou celle d'un fournisseur de JDK libre comme Adoptium.",[18,240,241],{},"Choisis la version 25 et ton système d'exploitation.",[18,243,244],{},"Lance l'installeur et suis les étapes.",[18,246,247,248,251],{},"Ouvre un ",[156,249,250],{},"nouveau"," terminal, pour qu'il prenne en compte l'installation.",[32,253,254],{},"Vérifie le résultat :",[41,256,260],{"className":257,"code":258,"language":259,"meta":46,"style":46},"language-bash shiki shiki-themes github-light-default github-dark-default github-dark-default","java -version\njavac -version\n","bash",[36,261,262,270],{"__ignoreMap":46},[50,263,264,266],{"class":52,"line":53},[50,265,45],{"class":63},[50,267,269],{"class":268},"s5iOY"," -version\n",[50,271,272,274],{"class":52,"line":71},[50,273,183],{"class":63},[50,275,269],{"class":268},[32,277,278,279,282,283,286],{},"Les deux commandes doivent afficher un numéro de version. Si l'une répond « commande introuvable », le dossier ",[36,280,281],{},"bin"," du JDK n'est pas dans la variable ",[36,284,285],{},"PATH"," de ton système.",[10,288,290],{"id":289},"compiler-puis-lancer","Compiler puis lancer",[32,292,293,294,296],{},"Place-toi dans le dossier de ",[36,295,38],{}," et tape :",[41,298,300],{"className":257,"code":299,"language":259,"meta":46,"style":46},"javac Bonjour.java\njava Bonjour\n",[36,301,302,309],{"__ignoreMap":46},[50,303,304,306],{"class":52,"line":53},[50,305,183],{"class":63},[50,307,308],{"class":113}," Bonjour.java\n",[50,310,311,313],{"class":52,"line":71},[50,312,45],{"class":63},[50,314,315],{"class":113}," Bonjour\n",[32,317,318,319,322,323,325],{},"La première commande lit ton code et crée ",[36,320,321],{},"Bonjour.class",", qui contient le bytecode. La seconde demande à la JVM d'exécuter la classe ",[36,324,135],{},". Tu vois s'afficher :",[41,327,332],{"className":328,"code":330,"language":331},[329],"language-text","Bonjour, recettes !\n","text",[36,333,330],{"__ignoreMap":46},[32,335,336],{},"Pour un petit programme tenant dans un seul fichier, Java sait aussi compiler en mémoire et lancer d'un coup :",[41,338,340],{"className":257,"code":339,"language":259,"meta":46,"style":46},"java Bonjour.java\n",[36,341,342],{"__ignoreMap":46},[50,343,344,346],{"class":52,"line":53},[50,345,45],{"class":63},[50,347,308],{"class":113},[32,349,350,351,354,355,358],{},"Ici, tu donnes le fichier ",[36,352,353],{},".java"," et non le nom de la classe. Aucun fichier ",[36,356,357],{},".class"," n'est créé.",[10,360,362],{"id":361},"lire-le-programme-ligne-à-ligne","Lire le programme ligne à ligne",[32,364,365],{},"Reprenons le code :",[367,368,369,382],"table",{},[370,371,372],"thead",{},[373,374,375,379],"tr",{},[376,377,378],"th",{},"Morceau",[376,380,381],{},"Rôle",[383,384,385,400,413,423,433],"tbody",{},[373,386,387,393],{},[388,389,390],"td",{},[36,391,392],{},"public class Bonjour",[388,394,395,396,399],{},"Déclare une ",[156,397,398],{},"classe",", l'unité de base d'un programme Java.",[373,401,402,407],{},[388,403,404],{},[36,405,406],{},"public static void main(String[] args)",[388,408,154,409,412],{},[156,410,411],{},"point d'entrée"," : la JVM démarre ici.",[373,414,415,420],{},[388,416,417],{},[36,418,419],{},"System.out.println(...)",[388,421,422],{},"Affiche du texte puis passe à la ligne.",[373,424,425,430],{},[388,426,427],{},[36,428,429],{},";",[388,431,432],{},"Termine chaque instruction.",[373,434,435,440],{},[388,436,437],{},[36,438,439],{},"{ ... }",[388,441,442],{},"Délimite un bloc de code.",[32,444,445,446,448],{},"Pour l'instant, recopie ",[36,447,406],{}," tel quel. Chaque mot aura son explication dans les prochains cours.",[450,451,452],"warning",{},[32,453,454,455,458,459,462,463,465,466,468],{},"Java distingue majuscules et minuscules. ",[36,456,457],{},"system.out.println",", ou ",[36,460,461],{},"string"," à la place de ",[36,464,90],{},", provoque une erreur de compilation. Lis le message de ",[36,467,183],{}," : il indique la ligne fautive.",[10,470,472],{"id":471},"une-erreur-de-compilation","Une erreur de compilation",[32,474,475,476,478],{},"Retire le point-virgule de la ligne d'affichage et recompile. ",[36,477,183],{}," refuse de produire le bytecode et signale une erreur avec le numéro de ligne.",[32,480,481],{},"Le compilateur te protège : un programme qui ne compile pas ne se lance pas. Corrige, recompile, relance. Ce cycle devient vite un réflexe.",[10,483,485],{"id":484},"à-retenir","À retenir",[15,487,488,500,509,512,526],{},[18,489,490,491,493,494,496,497,499],{},"Le compilateur ",[36,492,183],{}," transforme le code ",[36,495,353],{}," en bytecode ",[36,498,357],{},", que la JVM exécute.",[18,501,502,503,505,506,508],{},"Le JDK contient ",[36,504,183],{},", ",[36,507,45],{}," et la JVM : c'est lui qu'on installe pour développer.",[18,510,511],{},"Java 25 est la LTS actuelle, version utilisée dans ce cours.",[18,513,514,517,518,521,522,525],{},[36,515,516],{},"javac Fichier.java"," puis ",[36,519,520],{},"java Fichier"," compile et lance ; ",[36,523,524],{},"java Fichier.java"," fait les deux pour un petit programme.",[18,527,528],{},"Le nom du fichier doit correspondre au nom de la classe publique, majuscules comprises.",[530,531,532],"style",{},"html pre.shiki code .sIXEE, html code.shiki .sIXEE{--shiki-light:#953800;--shiki-default:#FFA657;--shiki-dark:#FFA657}html pre.shiki code .s5iOY, html code.shiki .s5iOY{--shiki-light:#0550AE;--shiki-default:#79C0FF;--shiki-dark:#79C0FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .shWOn, html code.shiki .shWOn{--shiki-light:#0A3069;--shiki-default:#A5D6FF;--shiki-dark:#A5D6FF}html pre.shiki code .sOnC1, html code.shiki .sOnC1{--shiki-light:#CF222E;--shiki-default:#FF7B72;--shiki-dark:#FF7B72}html pre.shiki code .scfrF, html code.shiki .scfrF{--shiki-light:#1F2328;--shiki-default:#E6EDF3;--shiki-dark:#E6EDF3}html pre.shiki code .syCW7, html code.shiki .syCW7{--shiki-light:#8250DF;--shiki-default:#D2A8FF;--shiki-dark:#D2A8FF}",{"title":46,"searchDepth":71,"depth":102,"links":534},[535,536,537,538,539,540,541,542,543],{"id":12,"depth":71,"text":13},{"id":29,"depth":71,"text":30},{"id":145,"depth":71,"text":146},{"id":196,"depth":71,"text":197},{"id":223,"depth":71,"text":224},{"id":289,"depth":71,"text":290},{"id":361,"depth":71,"text":362},{"id":471,"depth":71,"text":472},{"id":484,"depth":71,"text":485},"Comprendre ce que sont la JVM et le JDK, installer Java 25, puis compiler et lancer un premier programme.","md",{},[165,176,183,158,548,549,550,203],"java -version","main","System.out.println",true,"debutant","\u002Fjava\u002Fjvm-et-premier-programme",null,[556,560,563],{"nom":557,"url":558,"type":559},"OpenClassrooms, Apprenez à programmer en Java","https:\u002F\u002Fopenclassrooms.com\u002Ffr\u002Fcourses\u002F6173501-apprenez-a-programmer-en-java","cours",{"nom":561,"url":562,"type":559},"Développons en Java (Jean-Michel Doudoux)","https:\u002F\u002Fwww.jmdoudoux.fr\u002Fjava\u002Fdej\u002Findex.htm",{"nom":564,"url":565,"type":566,"anglais":551},"Apprendre Java (dev.java, en anglais)","https:\u002F\u002Fdev.java\u002Flearn\u002F","doc",{"title":5,"description":544},[569,571],{"nom":570,"url":234},"Téléchargement du JDK (dev.java, en anglais)",{"nom":572,"url":573},"Commande java, Java SE 25 (en anglais)","https:\u002F\u002Fdocs.oracle.com\u002Fen\u002Fjava\u002Fjavase\u002F25\u002Fdocs\u002Fspecs\u002Fman\u002Fjava.html","java\u002F01.jvm-et-premier-programme","2zLYkGNZkvDAIHyAzMBFBNNJ03TUW2t85QO9Ljt5pgQ",[577,578,582,586,590,594,598],{"path":553,"title":5,"stem":574},{"path":579,"title":580,"stem":581},"\u002Fjava\u002Fvariables-et-types","Variables, types et String","java\u002F02.variables-et-types",{"path":583,"title":584,"stem":585},"\u002Fjava\u002Fconditions-boucles-methodes","Conditions, boucles et méthodes","java\u002F03.conditions-boucles-methodes",{"path":587,"title":588,"stem":589},"\u002Fjava\u002Ftableaux-classes-et-records","Tableaux, classes et records","java\u002F04.tableaux-classes-et-records",{"path":591,"title":592,"stem":593},"\u002Fjava\u002Fheritage-et-interfaces","Héritage, interfaces et polymorphisme","java\u002F05.heritage-et-interfaces",{"path":595,"title":596,"stem":597},"\u002Fjava\u002Fcollections-generiques-exceptions","Collections, génériques et exceptions","java\u002F06.collections-generiques-exceptions",{"path":599,"title":600,"stem":601},"\u002Fjava","Java","java\u002Findex",[603,605],{"title":600,"path":599,"stem":601,"description":604,"children":-1},"Le mémo de Java 25 : commandes, types, structures de contrôle, classes, records, interfaces, collections et exceptions.",{"title":580,"path":579,"stem":581,"description":606,"children":-1},"Déclarer des variables Java, choisir entre types primitifs et String, et manipuler du texte.",[],[609,610,611,612,614,615,617],{"path":553,"title":5,"niveau":552,"stem":574},{"path":579,"title":580,"niveau":552,"stem":581},{"path":583,"title":584,"niveau":552,"stem":585},{"path":587,"title":588,"niveau":613,"stem":589},"intermediaire",{"path":591,"title":592,"niveau":613,"stem":593},{"path":595,"title":596,"niveau":616,"stem":597},"avance",{"path":599,"title":600,"niveau":618,"stem":601},"memo",1794583453059]