# Introduction

Java est un langage de programmation originellement proposé par Sun Microsystems et maintenant par Oracle depuis son rachat de Sun Microsystems en 2010.

Java a été conçu avec deux objectifs principaux :

- Permettre aux développeurs d’écrire des logiciels indépendants de l’environnement *hardware* d’exécution.
- Offrir un langage orienté objet avec une bibliothèque standard riche

## L’environnement

L’indépendance par rapport à l’environnement d’exécution est garantie par la *machine virtuelle Java* (Java Virtual Machine ou **JVM**). En effet, Java est un langage compilé mais le compilateur ne produit pas de code natif pour la machine, il produit du [bytecode](https://fr.wikipedia.org/wiki/Bytecode_Java) : un jeu d’instructions compréhensibles par la JVM qu’elle va traduire en code exécutable par la machine au moment de l’exécution.

Pour qu’un programme Java fonctionne, il faut non seulement que les développeurs aient compilé le code source mais il faut également qu’un environnement d’exécution (comprenant la JVM) soit installé sur la machine cible.

Il existe ainsi deux environnements Java qui peuvent être téléchargés et installés depuis le [site d’Oracle](http://www.oracle.com/technetwork/java/javase/downloads/index.html) :

<div class="section" id="bkmrk-jre---java-runtime-e"><dl class="docutils"><dt>JRE - Java Runtime Environment</dt><dd>Cet environnement fournit uniquement les outils nécessaires à l’exécution de programmes Java. Il fournit entre-autres la machine virtuelle Java.</dd><dt>JDK - Java Development Kit</dt><dd>Cet environnement fournit tous les outils nécessaires à l’exécution mais aussi au développement de programmes Java. Il fournit entre-autres la machine virtuelle Java et la compilateur.</dd></dl></div>## Oracle JDK et Open JDK

Depuis 2006, le code source Java (et notamment le code source de la JVM) est progressivement passé sous licence libre GNU [GPL](https://fr.wikipedia.org/wiki/Licence_publique_g%C3%A9n%C3%A9rale_GNU). Il existe une version de l’environnement Java incluant uniquement le code libre : [Open JDK](http://openjdk.java.net/). De son côté, Oracle distribue son propre JDK basé sur l’Open JDK et incluant également des outils et du code source toujours sous licence fermée.

<div class="section" id="bkmrk-"></div>## Un bref historique des versions

<div class="section" id="bkmrk-version-date-faits-n"><div class="wy-table-responsive"><table border="1" class="colwidths-given docutils"><colgroup> <col width="13%"></col> <col width="25%"></col> <col width="63%"></col> </colgroup><thead valign="bottom"><tr class="row-odd"><th class="head">version</th><th class="head">date</th><th class="head">faits notables</th></tr></thead><tbody valign="top"><tr class="row-even"><td>1.0</td><td>janvier 1996</td><td>La naissance</td></tr><tr class="row-odd"><td>1.1</td><td>février 1997</td><td>Ajout de JDBC et définition des JavaBeans</td></tr><tr class="row-even"><td>1.2</td><td>décembre 1998</td><td><div class="first last line-block"><div class="line">Ajout de Swing, des collections (JCF), de l’API de réflexion.</div><div class="line">La machine virtuelle inclut la compilation à la volée (Just In Time)</div></div></td></tr><tr class="row-odd"><td>1.3</td><td>mai 2000</td><td>JVM HotSpot</td></tr><tr class="row-even"><td>1.4</td><td>février 2002</td><td>support des regexp et premier parser de XML</td></tr><tr class="row-odd"><td>5</td><td>septembre 2004</td><td><div class="first last line-block"><div class="line">évolutions majeures du langage : autoboxing, énumérations, varargs, imports statiques, foreach, types génériques, annotations.</div><div class="line">Nombreux ajout dans l’API standard</div></div></td></tr><tr class="row-even"><td>6</td><td>décembre 2006</td><td> </td></tr><tr class="row-odd"><td>7</td><td>juillet 2011</td><td>Quelques évolutions du langage et l’introduction de java.nio</td></tr><tr class="row-even"><td>8</td><td>mars 2014</td><td>évolutions majeures du langage : les lambdas et les streams et une nouvelle API pour les dates</td></tr><tr class="row-odd"><td>9</td><td>septembre 2017</td><td>les modules (projet Jigsaw) et jshell</td></tr><tr class="row-even"><td>10</td><td>mars 2018</td><td>inférence des types pour les variables locales (mot-clé `<span class="pre">var</span>`)</td></tr></tbody></table>

</div></div>