
FAQ Langage JavaConsultez toutes les FAQ
Nombre d'auteurs : 42, nombre de questions : 297, derni�re mise � jour : 19 septembre 2017 Ajouter une question
Cette FAQ a �t� r�alis�e � partir des questions fr�quemment pos�es sur le forum Java de http://java.developpez.com ainsi que l'exp�rience personnelle des auteurs.
Nous tenons � souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne pr�tend pas non plus �tre compl�te. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant r�dacteur, lisez ceci.
Sur ce, nous vous souhaitons une bonne lecture.
- Qu'est-ce que Java ?
- Quelles sont les diff�rentes distributions de Java ?
- Qu'est-ce qu'un profil ?
- Que sont le JRE et le JDK ?
- Comment installer le JDK ?
- Comment installer le JRE ?
- Qu'est-ce que le PATH ?
- Java est-il open source ?
- Quelles sont les diff�rences entre les distributions Oracle et OpenJDK ?
- O� peut-on trouver le code source de Java ?
- Pourquoi acc�der au code source de Java ?
- Quelles sont les diff�rences entre Application, Applet et Servlet ?
- Qu'est-ce que Java Web Start ?
- Comment conna�tre la version de la JVM install�e ?
- Quelles sont les conventions de nommage en Java ?
- Qu'est-ce qu'un d�compilateur ?
- Qu'est-ce qu'un obfuscateur ?
- Qu'est-ce que le CLASSPATH ?
- Comment modifier le CLASSPATH ?
- Qu'est-ce que le BOOTCLASSPATH ?
- Quelle est la taille maximum du code d'une m�thode ?
- Quels sont les diff�rents modes d'invocation de m�thode ?
- Qu'est-ce que la compatibilit� ascendante ? Est-elle toujours respect�e ?
- O� t�l�charger les anciennes versions de Java ?
- Comment lancer une application sans le terminal (Windows uniquement) ?
- Quelle est la liste des param�tres (options/arguments) de la JVM ?
Java est un langage orient� objet d�velopp� initialement par la soci�t� Sun Microsystems puis par Oracle. La syntaxe g�n�rale est tr�s proche de celle du C, mais Java n'est pas une surcouche du C et sa syntaxe est beaucoup plus claire que celle du C++.
Les avantages�: les avantages de Java sont nombreux. Le byte-code, tout d'abord, qui assure � Java une portabilit� compl�te vers de tr�s nombreux syst�mes. L'importance de l'API de base qui offre tous les services de base, notamment pour la construction des interfaces graphiques. La 3e force de Java, c'est son adaptabilit� dans de nombreux domaines, autant pour le web que pour les syst�mes embarqu�s.
Liste des syst�mes disposant d'une impl�mentation de Java�: Microsoft Windows, MacOS, Solaris, Linux, AIX, OS/2, IRIX, UnixWare, HP/UX, Digital Unix, AmigaOS, BeOS, OpenVMS, FreeBSD, SunOS, RiscOS. Java est �galement support� par des familles de processeurs diff�rents Intel 32 et 64 bits, ARM...
Cette liste n'est pas exhaustive et est donn�e � titre d'exemple.
Il existe plusieurs distributions de Java.
Java SE
Java SE (Standard Edition ou ���dition standard��) est la version de Java destin�e aux ordinateurs de bureau, portables et certaines plateformes embarqu�es ou smartphones disposant des capacit�s de calcul, de m�moire et de stockage suffisantes pour la faire fonctionner. Cette version de Java d�finit une API standard pr�sente � l'identique sur toutes les plateformes et permettant ainsi de cr�er des applications en ligne de commande ou graphiques qui peuvent s�ex�cuter sur un grand nombre de machines. Lorsque nous parlerons de JDK, JVM, JRE dans cette FAQ, nous ferons principalement r�f�rence � Java SE.
Cette FAQ se concentre donc principalement sur Java SE�; cependant, beaucoup de concepts abord�s ici sont �galement applicables aux autres versions de Java. Des concepts avanc�s de Java SE ou n�cessitant des extensions tierces telles que le graphisme ou les interfaces graphiques, les acc�s aux bases de donn�es, etc. sont pr�sent�s dans des FAQ plus sp�cialis�es.
Java ME
Java ME (Micro �dition ou ���dition micro��) est la version de Java destin�e aux plateformes embarqu�es, cartes de paiement, consoles et lecteurs de disques, t�l�phones et autres p�riph�riques disposant de capacit�s de calcul, de m�moire ou de stockage limit�es. Cette plateforme d�finit un grand nombre de configurations et de profils pour prendre en compte un large panel d'appareils aux capacit�s tr�s diff�rentes les unes des autres. Pour les questions sp�cifiques � la plateforme Java ME, veuillez vous r�f�rer � la FAQ Java ME sur D�veloppez.
Java EE
Java EE (Enterprise Edition ou ���dition entreprise��) est la version de Java destin�e aux serveurs d'entreprises et serveurs web pour impl�menter des services r�seau et web. Elle inclut Java SE, mais dispose �galement d'API suppl�mentaires pour d�finir des mapping objet-relationnel, des
architectures multicouches ou distribu�es et des web services. Pour les questions sp�cifiques � la plateforme Java EE, veuillez vous r�f�rer � la
FAQ Java EE sur D�veloppez. Des FAQ plus sp�cialis�es sont �galement disponibles pour certains frameworks de d�veloppement.
Android
Android est une version sp�ciale de Java con�ue par Google pour tourner sur sa propre machine virtuelle Dalvik tournant sur Linux sur des p�riph�riques embarqu�s, t�l�phones, tablettes, montres, bracelets de course, etc. Google a repris une partie de l'API JavaSE et y a ajout� une API Android propre � la plateforme. Pratiquement tous les concepts abord�s dans cette FAQ sont applicables � Android sous r�serve du niveau de compatibilit� entre la version du JDK mentionn�e dans les QR et la version du SDK Android que vous utilisez. Pour les questions sp�cifiques � la plateforme Android, veuillez vous r�f�rer � la
FAQ Android sur D�veloppez.
La notion de profil est d�j� connue par les utilisateurs de Java ME. Nous venons de dire que l'API Java SE �tait identique sur toutes les plateformes, mais, en fait, ce n'est pas tout � fait vrai. � partir du JDK�8, Oracle a d�fini plusieurs sous-profils de mani�re � pouvoir utiliser Java SE sur des plateformes dites Embedded (mobiles et embarqu�es) aux capacit�s limit�es (calcul, m�moire, stockage, etc.)�:
- compact1 - classes centrales + classes utilitaires (collections, s�rialisation, concurrence, expressions r�guli�res et manipulation du texte, temps et dates, etc.) + IO (fichiers, entr�es/sorties, archives et r�seau) + NIO + cryptographie + internationalisation + JNI + scripting + journalisation + s�curit� (X500)�;
- compact2 - compact1 + RMI + JDBC (basique) + XML JAXP (SAX et DOM)�;
- compact3 - compact2 + console de gestion + instrumentation + JDBC (rowset) + XML JAXP (cryptographie) + s�curit� (ACL)�;
- Full SE API - compact3 + pr�f�rences utilisateur + beans + CORBA + RMI-IIOP + AWT + Swing + Java2D + JavaSound + ImageIO + accessibilit� + print services + toutes les extensions habituellement distribu�es avec le JDK de JavaSE.
Full SE API | Beans | Input Methods | IDL |
Preferences | Accessibility | Print Services | |
RMI-IIOP | CORBA | Java 2D | |
Sound | Swing | ||
AWT | Drag and Drop | ||
Image I/O | JAX-WS | ||
compact3 | Security1 | JMX | JNDI |
XML JAXP2 | Management | Instrumentation | |
compact2 | JDBC | RMI | XML JAXP |
compact1 | Core (java.lang.*) | Security | Serialization |
Networking | Ref Objects | Regular Expressions | |
Date and Time | Input/Output | Collections | |
Logging | Concurrency | Reflection | |
JAR | ZIP | Versioning | |
Internationalization | JNI | Overrride Mechanism | |
Extension Mecanism | Scripting |
2 Adds crypto to compact2 XML JAXP.
� partir du JDK�8, les pages de documentation des paquetages, classes et interfaces concern�s mentionnent dans quel profil ils se trouvent. L'outil jdeps permet de d�couvrir les d�pendances de votre code pour savoir quel est le profil minimal pour pouvoir l�ex�cuter.
JRE : Java Runtime Environement, c'est le kit destin� au client pour pouvoir ex�cuter un programme Java. Il se compose essentiellement d'une machine virtuelle Java (JVM) capable d'ex�cuter le byte-code et les biblioth�ques standard de Java.
JDK : Java Development Kit, c'est le kit destin� au programmeur. Ce kit est compos� d'un JRE, d'un compilateur et de nombreux programmes utiles, des exemples de programmes Java, les sources de toutes les classes de l'API du langage.
Vous avez plusieurs fa�ons d'installer le JDK. Vous pouvez r�cup�rer un installeur ou une archive contenant un JDK pr�compil� ou encore vous pouvez tenter de compiler les sources disponibles dans le cadre de l'OpenJDK.
Disponibilit�
Oracle
Oracle fournit sur la page t�l�chargements Java des installeurs ainsi que des archives contenant un JDK pr�compil� pour Linux (x86, x64 et ARM), Windows (x86 et x64), Mac OS X ainsi que Solaris (x64 et SPARC 64). Oracle fournit �galement
un JDK pr�compil� pour les plateformes ARM tournant sous Linux.
OpenJDK
Vous pouvez tenter de r�cup�rer et de compiler les sources disponibles sur le Mercurial de l'OpenJDK.
Pour les utilisateurs de Linux, il est �galement possible d'installer des paquets pr�compil�s via le service de mises � jour de la plupart des distributions (yum, apt-get, etc.) en suivant les instructions disponibles sur cet article.
Installation
Windows
Si vous utilisez un installeur, suivez les �tapes d'installation. L'installeur du JDK vous proposera �galement d'installer le JRE �quivalent sur votre syst�me.
Si vous utilisez une archive, d�compressez-la dans un r�pertoire vide.
Dans les deux cas, il va vous falloir ensuite positionner la variable d'environnement PATH afin de pouvoir invoquer les programmes du JDK (javac, etc.) depuis la ligne de commande.
- Ouvrez les propri�t�s du Poste de travail (clic-droit -> Propri�t�s sur l'ic�ne) ou allez dans Panneau de configuration -> Syst�me.
- Allez dans l'onglet Avanc� puis cliquez sur le bouton Variables d'environnement.
- Cr�ez une nouvelle variable utilisateur en cliquant sur le bouton Nouveau.
- Donnez le nom PATH et comme valeur�:
Code cmd : S�lectionner tout %PATH%;<Chemin d'installation du JDK>\bin
Code cmd : S�lectionner tout %PATH%;"C:\Program Files\jdk1.8.0_40\bin"
- Validez ces modifications en cliquant sur le bouton OK.
- Pour tester votre installation, lancez un terminal�: D�marrer -> Ex�cuter puis cmd
- Tapez ��javac -version��, vous devriez voir s'afficher le num�ro de version du JDK que vous venez d'installer.
Linux
Si vous utilisez un service de mises � jour pour votre plateforme, suivez les instructions habituelles. L'emplacement o� s'installera le JDK d�pendra de votre syst�me et de votre service de mises � jour. Installer le JDK sur Linux n'installera pas le JRE sur le syst�me.
Si vous utilisez une archive, d�compressez-la dans un r�pertoire vide. M�me chose si vous compilez � partir des sources.
Dans les deux cas, modifiez ensuite votre variable PATH pour inclure le r�pertoire bin du JDK afin de pouvoir invoquer les programmes du JDK (javac, etc.) depuis la ligne de commande.
Mac OS X
Si vous utilisez l'archive DMG, double-cliquez dessus pour la monter et, dans la fen�tre qui s'affiche alors, cliquez sur le fichier PKG pour installer le JDK.
Ce dernier s'installera dans le r�pertoire /Library/Java/JavaVirtualMachines/<numero du jdk>.jdk, par exemple�: /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk. Si vous installez une nouvelle version, cela ne supprimera pas la version pr�c�dente et vous devrez l'effacer manuellement. De plus, installer le JDK sur Mac OS X n'installera pas le JRE sur le syst�me.
Si vous utilisez une archive, d�compressez-la dans un r�pertoire vide.
Modifiez ensuite votre variable PATH pour inclure le r�pertoire Contents/Home/bin du JDK afin de pouvoir invoquer les programmes du JDK (javac, etc.) depuis la ligne de commande.
Vous avez plusieurs fa�ons d'installer le JRE.Vous pouvez r�cup�rer un installeur ou une archive contenant un JRE pr�compil� ou encore vous pouvez tenter de compiler les sources disponibles dans le cadre de l'OpenJDK.
Disponibilit�
Oracle
Oracle fournit sur la page t�l�chargements Java des installeurs ainsi que des archives contenant un JRE pr�compil� pour Linux (x86, x64 et ARM), Windows (x86 et x64), Mac OS X ainsi que Solaris (x64 et SPARC 64).
OpenJDK
Vous pouvez tenter de r�cup�rer et de compiler les sources disponibles sur le Mercurial de l'OpenJDK.
Pour les utilisateurs de Linux, il est �galement possible d'installer des paquets pr�compil�s via le service de mises � jour de la plupart des distributions (yum, apt-get, etc.). La plupart des distributions Linux fournissent des JRE pr�compil�s bas�s sur l'OpenJDK.
Installation
Windows
Si vous utilisez un installeur, suivez les �tapes d'installation. Sur les versions 64 bits de Windows, il est recommand� d'installer � la fois les versions 32�bits et 64�bits du JRE.
- La version 64�bits sera utilis�e par le syst�me d'exploitation et les navigateurs web 64�bits.
- La version 32 bits sera utilis�e par les navigateurs web 32 bits. Elle sera utilis�e par le syst�me d'exploitation si la version 64�bits est absente.
L�interpr�teur Java devrait �tre automatiquement accessible depuis la ligne de commande une fois l'installation termin�e.
Note�: si vous utilisez le service de mises � jour de Java fourni par Oracle, dans les versions r�centes du JRE, installer une mise � jour enl�vera automatiquement toute version ant�rieure du JRE qui a �t� install�e par un installeur.
Si vous utilisez une archive, d�compressez-la dans un r�pertoire vide. Il vous faudra ensuite positionner la variable d'environnement PATH pour inclure le r�pertoire bin du JRE afin de pouvoir invoquer l�interpr�teur Java depuis la ligne de commande.
- Ouvrez les propri�t�s du Poste de travail (clic-droit -> Propri�t�s sur l'ic�ne) ou allez dans Panneau de configuration -> Syst�me.
- Allez dans l'onglet Avanc� puis cliquez sur le bouton Variables d'environnement.
- Cr�ez une nouvelle variable utilisateur en cliquant sur le bouton Nouveau.
- Donnez le nom PATH et comme valeur�:
Code cmd : S�lectionner tout %PATH%;<Chemin d'installation du JRE>\bin
Code cmd : S�lectionner tout %PATH%;"C:\Program Files\jre1.8.0_40\bin"
- Validez ces modifications en cliquant sur le bouton OK.
- Pour tester votre installation, lancez un terminal�: D�marrer -> Ex�cuter puis cmd
- Tapez ��java -version��, vous devriez voir s'afficher le num�ro de version du JRE que vous venez d'installer.
Linux
Si vous utilisez un service de mises � jour pour votre plateforme, suivez les instructions habituelles. L'emplacement o� s'installera le JRE d�pendra de votre syst�me et de votre service de mises � jour. L�interpr�teur Java devrait �tre automatiquement accessible depuis la ligne de commande une fois l'installation termin�e.
Si vous utilisez une archive, d�compressez-la dans un r�pertoire vide. M�me chose si vous compilez � partir des sources. Modifiez ensuite votre variable PATH dans votre terminal ou pour inclure le r�pertoire bin du JRE de mani�re � pouvoir invoquer l�interpr�teur Java depuis la ligne de commande.
Mac OS X
Sur Mac OS X, le JRE n'est disponible qu'en version 64 bits. Java ne sera donc pas activ� dans votre navigateur web si ce dernier est uniquement disponible en version 32 bits.
Si vous utilisez l'archive DMG, double-cliquez dessus pour la monter et, dans la fen�tre qui s'affiche alors, cliquez sur le fichier PKG pour installer le JRE. Ce dernier s'installera dans le r�pertoire /Library/Internet Plug-Ins/JavaAppletPlugin.plugin et supprimera tout JRE pr�c�demment install�. L�outil de configuration Java pour les pr�f�rences syst�me est install� dans /Library/PreferencePanes/JavaControlPanel.prefpane.
Si vous utilisez une archive, d�compressez-la dans un r�pertoire vide.
Modifiez ensuite votre variable PATH pour inclure le r�pertoire Contents/Home/bin du JRE afin de pouvoir invoquer l�interpr�teur Java depuis la ligne de commande.
Le PATH n'est pas une notion propre � Java, mais se retrouve dans la plupart (voire la totalit�) des syst�mes d'exploitation. Il s'agit d'une variable d'environnement qui contient une liste de r�pertoires dans lesquels vont �tre recherch�s les fichiers ex�cutables.
Attention, sous Unix/Linux et assimil�s, les chemins sont s�par�s par un deux-points (:), alors que sous Windows le s�parateur est un point-virgule (;).
Ainsi, afin de pouvoir utiliser les outils du JRE/JDK, il peut �tre n�cessaire de modifier le PATH afin d'y ajouter le r�pertoire bin du JRE/JDK.
On peut modifier le PATH de mani�re temporaire avec les commandes suivantes (depuis une console)�:
- sous Unix, Linux ou Mac OS X ou n'importe quel syst�me disposant de Bash�:
Code bash : S�lectionner tout export PATH=$PATH:/_chemin_du_jdk_/bin
- sous Windows�:
Code cmd : S�lectionner tout set PATH=%PATH%;C:\_chemin_du_jdk_\bin
Il est �galement possible de d�finir le PATH de mani�re d�finitive�:
- sous Unix/Linux, en effectuant la manipulation ci-dessus dans le fichier de configuration de l'utilisateur (ex.�: ~/.bashrc ou ~/.bash_profile).
- sous Windows via l'onglet Avanc� des propri�t�s du Poste de travail.
Oui, Java est open source.
Depuis 2006, Sun Microsystems a mis en place l'initiative OpenJDK pour g�rer et gouverner les �volutions du langage et de son API de mani�re collaborative et ouverte. Il faut noter toutefois que les sources du JDK �taient d�j� disponibles ouvertement auparavant, mais sous licence Sun.
Outre Oracle Corporation, qui a pris la rel�ve de Sun Microsystems, d'autres grandes compagnies de l'informatique telles qu'IBM et Apple participent activement � l'OpenJDK.
Depuis la mise en place de l'OpenJDK, les sources de Java sont disponibles sous licence GPL avec exception de liaison (GNU General Public License with a linking exception), ce qui fait qu'un programme, une biblioth�que ou une API Java tierce qui utilisent l'API Java n'ont pas obligation d��tre eux-m�mes sous licence GPL.
Depuis Java SE 7, l'OpenJDK sert d�impl�mentation de r�f�rence de la JVM.
La version OpenJDK de Java est int�gralement open source et sous licence GPL avec exception de liaison. Les biblioth�ques tierces sur lesquelles se repose l�impl�mentation de la JVM sont �galement sous licence open source.
Oracle fournit, dans ses paquets pr�compil�s, des binaires et des codes source sous licence Oracle. De plus, ces distributions peuvent contenir des biblioth�ques tierces sur lesquelles se repose l�impl�mentation de la JVM qui ont �t� licenci�es par Oracle aupr�s d��diteurs externes. Le code source de ces biblioth�ques est donc propri�taire et n'est pas disponible. Oracle peut �galement int�grer dans sa JVM des optimisations ou des options destin�es � ses clients payants.
Il peut en �tre de m�me pour tout �diteur qui fournit une JVM propri�taire pour un syst�me particulier.
Ainsi, bien que l�impl�mentation de l'API Java soit � la base identique (puisque l'OpenJDK sert d�impl�mentation de r�f�rence), outre des optimisations du garbage collector ou des API internes, il peut y avoir quelques diff�rences notables de comportement entre la version OpenJDK et une version propri�taire. Par exemple, pendant longtemps, le rasteriser des polices de caract�res ne produisait pas des r�sultats similaires sur les plateformes Linux.
Oracle distribue le code source des classes de l'API publique Java avec le JDK. Vous pouvez donc retrouver les sources dans le fichier src.zip, dans le r�pertoire d'installation du JDK.
Ce fichier peut contenir �galement une partie de l�impl�mentation de l'API priv�e Java. Attention cependant, les sources de l'API priv�e peuvent �tre lourdement modifi�es, devenir obsol�tes ou d�pr�ci�es ou m�me �tre retir�es d'une version � l'autre du JDK. Vous ne devez donc pas vous reposer sur ces classes.
Vous pouvez �galement acc�der au code source des classes Java en acc�dant au projet OpenJDK qui est l'impl�mentation libre et open source de Java Platform Standard Edition.
M�me si cette approche n'est pas � conseiller aux d�butants, il peut parfois �tre tr�s utile de consulter le code source des classes de l'API. Cela peut permettre, par exemple, d'estimer la complexit� de certains algorithmes, ou de mieux comprendre le fonctionnement d'un objet particulier (et ainsi le surcharger plus efficacement). En cherchant bien, on peut �galement trouver des classes non document�es...
Application
Une application Java est un programme utilisant le langage de programmation Java et qui tourne g�n�ralement sur la machine o� se trouve au d�part le code. Il a le m�me but qu'un programme C ou d'un autre langage.
Applet
L'Applet est r�cup�r�e � distance � travers un navigateur web et s'ex�cute sur celui-ci. En raison de ce t�l�chargement � distance, les r�gles de s�curit� concernant les applets sont tr�s strictes (pour �viter notamment les virus). Par exemple, une applet (contrairement � une application) ne permet pas forc�ment l'�criture sur le disque local ou l'impression.
Servlet
Une Servlet peut �tre consid�r�e comme une Applet c�t� serveur. Une servlet est destin�e � ajouter des fonctionnalit�s � un serveur web.
Java Web Start est l'impl�mentation de r�f�rence par Oracle de la sp�cification JNLP (Java Network Launching Protocol) qui d�finit un m�canisme d'installation et de mise � jour supportant des fonctionnalit�s �volu�es gr�ce � HTTP et XML.
L'id�e de JWS est de ��mimer�� le comportement d'une applet pour une application Java. Un serveur h�berge l'application�; le client Web Start se connecte au serveur, t�l�charge l'application et l'ex�cute. Les r�gles de s�curit� sont semblables � celles des applets.
L'int�r�t principal est la facilit� de d�ploiement des applications. Lors d'une mise � jour, seul le serveur est � modifier, les clients t�l�chargeront la nouvelle application au prochain d�marrage. Ce syst�me est tr�s int�ressant pour les grosses entreprises qui ne peuvent pas se permettre d'aller mettre � jour une application sur les milliers de postes de leurs collaborateurs.
Les avantages
- Fonctionnement en mode d�connect�.
- Ex�cution externe au navigateur -> int�gration facile et large support.
- Mise � jour incr�mentale et modulaire des applications.
- Support d'une ex�cution s�curis�e dans un environnement de type sandbox (bac � sable).
- Certains services avanc�s accessibles sans certificat (ouverture d'un flux fichier, sauvegarde d'un flux fichier, m�canisme de persistance entre sessions, impression, t�l�chargement de ressources...).
- Migration facile depuis une application Java standard.
-
Tutoriel : Java Web Start par Johann Sorel ;
-
Tutoriel : Java Web Start par Jean-Michel Doudoux ;
-
Vid�o : Support de cours d'introduction � Java Web Start par Mickael Baron ;
-
Tutoriel Java Web Start ;
-
Java Web Start Guide ;
-
FAQ Java Web Start ;
-
Forum : Java Web Start.
Depuis une console�:
Code console : | S�lectionner tout |
java -version
Depuis un programme�: lors de l'ex�cution, la version de la JVM est accessible via les propri�t�s syst�me (Comment acc�der aux valeurs des variables d'environnement�?).
Code java : | S�lectionner tout |
String version = System.getProperty("java.vm.version");
Code java : | S�lectionner tout |
String version = System.getProperty("java.version");
Code java : | S�lectionner tout |
String version = System.getProperty("java.specification.version");
Les variables
Les noms de variables sont �crits en minuscules sauf la premi�re lettre de chacun des mots � partir du deuxi�me. Il est �galement recommand� de choisir un nom de variable court, mais suffisamment explicite (garder � l'esprit qu'un autre programmeur sera peut-�tre oblig� de comprendre votre code plus tard).
Code java : | S�lectionner tout |
public int maVariableEntiere;
Les constantes
Afin de bien les diff�rencier des variables�; les constantes sont �crites en majuscules, les mots sont s�par�s par le caract�re ��_��.
Code java : | S�lectionner tout |
public final static int MA_CONSTANTE = 2;
Les m�thodes
Le nom des m�thodes suit les m�mes r�gles de construction que pour les variables, mais le premier mot devrait toujours �tre un verbe � l'infinitif, suivi �ventuellement de mots pour qualifier l'action.
Code java : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | // Un getter commence par le verbe get (obtenir). public int getValue() { [...] } // Un setter commence par le verbe set (d�finir). public void setValue(final int value) { [...] } // Une m�thode d'ajout commence par le verbe add (ajouter) public void addMouseListener(final MouseListener listener) { [...] } // Une m�thode de retrait commence par le verbe remove (retirer) public void removeMouseListener(final MouseListener listener) { [...] } // Une m�thode d'action peut commencer par le verbe do (faire, agir) public void doClick() { [...] } // Une m�thode factory (de construction) peut commencer par le verbe create (cr�er) public Car createNewCar(final Color color, final int doorNumber, final boolan driverOnLeft, final CarOption... options) { [...] } |
Les classes et interfaces
Les noms de classes sont �crits en minuscules, chaque premi�re lettre d'un mot est en majuscule.
Code java : | S�lectionner tout |
public class MaClasse
Les paquets
Les noms de paquets sont int�gralement �crits en minuscules, sans caract�re de s�paration. Afin d'�viter au maximum les risques de conflit de nommage, il est recommand� de placer son travail dans un paquet commen�ant par un nom de domaine internet (com, edu, gov, mil, en, fr, etc.) suivi du nom de l'organisation ou du projet.
Code java : | S�lectionner tout |
1 2 3 | com.developpez.java org.w3c.dom org.xml.sax |
Un d�compilateur est un outil permettant de r�cup�rer le code source d'une classe ou d'un ensemble de classes � partir d'un byte code. Sans aller aussi loin, des outils proposent tout simplement l'analyse d'une classe en affichant ses principales caract�ristiques.
C'est le cas de javap, disponible dans le JDK.
Code console : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $ javap java.lang.Object Compiled from "Object.java" public class java.lang.Object { public java.lang.Object(); public final native java.lang.Class<?> getClass(); public native int hashCode(); public boolean equals(java.lang.Object); protected native java.lang.Object clone() throws java.lang.CloneNotSupportedException; public java.lang.String toString(); public final native void notify(); public final native void notifyAll(); public final native void wait(long) throws java.lang.InterruptedException; public final void wait(long, int) throws java.lang.InterruptedException; public final void wait() throws java.lang.InterruptedException; protected void finalize() throws java.lang.Throwable; static {}; } |
Code console : | S�lectionner tout |
$ javap -help
En dehors de javap, d'autres outils existent. Sans �tre exhaustif, les plus r�cents sont�:
Qu'est-ce que c'est, quel est le but�?
Pour assurer l'ind�pendance de la plateforme, les programmes Java sont distribu�s sous forme de bytecode, cette forme est tr�s proche du code source original. Le bytecode est donc tr�s facile � d�compiler ce qui augmente le risque d'une attaque par analyse du code source (reverse engineering). Cette attaque consiste � d�compiler une application pour comprendre ce qu'elle fait exactement (dans le cas de la cryptographie) ou pour comprendre comment elle le fait (dans le cas d'espionnage industriel).
Pour se prot�ger de ce type d'attaque, on peut avoir recours � un ��obfuscateur��. Il s'agit d'un utilitaire qui transforme le bytecode en un bytecode �quivalent, mais plus difficile � d�compiler.
Comment �a marche�?
Plusieurs techniques permettent de rendre plus difficile la d�compilation du bytecode. La premi�re se base sur les principes d'optimisation du code, en r�ordonnant les micro-instructions. D'autres techniques, plus radicales, changent l'organisation de la m�moire, le nom des identifiants, ajoute du code parasite ou des ��goto���: le bytecode est souvent l�g�rement moins rapide, mais surtout tr�s difficile � comprendre.
Quel obfuscateur en Java�?
Le CLASSPATH permet de sp�cifier � la machine virtuelle Java les emplacements � partir desquels les ressources (bytecode et autres) devront �tre recherch�es.
� l'instar de la variable d'environnement PATH, le CLASSPATH se pr�sente sous la forme d'une liste d'�l�ments, qui peuvent correspondre � un r�pertoire ou � une archive (*.jar ou *.zip).
Lorsque la machine virtuelle a besoin de charger une ressource ou une classe, elle la recherche dans les divers �l�ments du CLASSPATH dans l'ordre de leur d�claration.
Chaque �l�ment du CLASSPATH correspond � une racine, et les classes sont recherch�es dans les sous-r�pertoires correspondant au nom de leurs packages.
Par exemple, pour un CLASSPATH comportant les deux �l�ments suivants�:
- le r�pertoire /projet/classes�;
- l'archive /projet/lib/archive.jar.
Lors du chargement de la classe com.monsite.MaClasse, la JVM recherchera d'abord le fichier /projet/classes/com/monsite/Maclasse.class. Si ce dernier n'existe pas, la JVM recherchera alors le fichier com/monsite/Maclasse.class � l'int�rieur de l'archive /projet/lib/archive.jar.
Il y a diff�rentes mani�res de d�finir le CLASSPATH.
Lorsqu'on compile ou qu'on lance un programme Java, plusieurs solutions s'offrent � nous.
- En cr�ant une variable d'environnement CLASSPATH.
- Exemple Unix, Linux, Mac OS X ou n'importe quel syst�me disposant de Bash�:
Code bash : S�lectionner tout 1
2export CLASSPATH=./lib/archive.jar:./classes java ma.classe.Principale
- Exemple Windows�:
Code cnd : S�lectionner tout 1
2set CLASSPATH=./lib/archive.jar;./classes java ma.classe.Principale
- Exemple Unix, Linux, Mac OS X ou n'importe quel syst�me disposant de Bash�:
- En utilisant les options -classpath ou [/c]-cp[/c] des outils java, javac, etc.
- Exemple Unix, Linux, Mac OS X ou n'importe quel syst�me disposant de Bash�:
Code bash : S�lectionner tout java -classpath ./lib/archive.jar:./classes ma.classe.Principale
- Exemple Windows�:
Code cmd : S�lectionner tout java -classpath ./lib/archive.jar;./classes ma.classe.Principale
Si la variable d'environnement CLASSPATH existe, elle est ignor�e et �cras�e par l'usage de ces options. - Exemple Unix, Linux, Mac OS X ou n'importe quel syst�me disposant de Bash�:
- En utilisant l'option -jar et le fichier manifeste pour une archive jar ex�cutable.
Lorsqu'on ex�cute un jar ex�cutable avec l'option -jar de java, les options -classpath ou -cp et la variable d'environnement CLASSPATH sont ignor�es.
La seule et unique solution consiste � renseigner l'attribut Class-Path de son fichier META-INF/MANIFEST.MF. � noter �galement que le jar ex�cutable fera automatiquement partie du CLASSPATH.Code texte : S�lectionner tout 1
2
3Manifest-Version: 1.0 Main-Class: com.toto.monappli.MaClasseMain Class-Path: libtoto.jar lib/truc.jar lib/machin.jar
Les �l�ments du Class-Path du fichier manifeste repr�sentent un chemin relatif d�pendant de l'emplacement du jar principal (attention�: le m�tacaract�re ��*�� ne peut pas �tre utilis� ici). - Lorsqu'on ex�cute une application Java Web Start, les diff�rents �l�ments du CLASSPATH sont d�finis dans le descripteur *.jnlp via l'�l�ment resources .
Remarque�: pour ces deux derniers cas de figure, la plupart des EDI permettent de configurer simplement le CLASSPATH depuis leur interface graphique.
Le BOOTCLASSPATH fonctionne de la m�me mani�re que le CLASSPATH, si ce n'est qu'il est prioritaire sur ce dernier�: il est utilis� pour d�finir les classes standard de l'API. Il d�pend donc fortement de la machine virtuelle et ne devrait donc pas �tre modifi�.
Il est toutefois possible de le remplacer ou d'y ajouter des �l�ments � la fin ou en t�te de liste avec les options non standard -Xbootclasspath, -Xbootclasspath/a et -Xbootclasspath/p de la JVM d'Oracle (reportez-vous � la documentation pour les autres JVM).
Attention�: le fait d'utiliser cette technique pour remplacer une classe du fichier rt.jar (qui comporte toutes les classes standard de l'API) vient � l'encontre de la licence d'utilisation de la JVM d'Oracle.
Bien que cela ne vienne pas � l'esprit, il existe une taille maximum pour le code d'une m�thode sur certaines machines et qui est de 65�535 octets. Cela peut sembler �norme et suffisant, ce qui est vrai pour la grande majorit� des cas, mais avec les �diteurs graphiques qui g�n�rent du code, cette limite peut �tre d�pass�e assez ais�ment�: vous obtiendrez alors une erreur du type code too large.
Selon le type des m�thodes, Java dispose de cinq modes d'invocation d�finis par les instructions invokevirtual, invokespecial, invokestatic, invokeinterface et invokedynamic�:
- invokestatic - permet d'invoquer les m�thodes statiques, qui par d�finition ne sont li�es � aucune instance de classe. La r�solution de la m�thode est donc effectu�e lors de la compilation�;
- invokespecial - permet d'invoquer les m�thodes d'instances qui peuvent �tre r�solues d�s la compilation et qui ne d�pendent donc pas du type de l'instance, c'est-�-dire les m�thodes priv�es (private), les appels de m�thode de la classe parente (dont l'appel est pr�fix� par super), ou encore pour les appels de constructeur (ainsi que this() ou super())�;
- invokeinterface - permet d'invoquer une m�thode sur une r�f�rence dont le type est une interface. �tant donn� qu'il ne s'agit pas d'un type concret, la r�solution de la m�thode est forc�ment effectu�e � l'ex�cution selon le type r�el de l'instance�;
- invokevirtual - permet d'invoquer les m�thodes d'instances virtuelles d'une classe. C'est-�-dire que la r�solution de la m�thode � appeler est effectu�e lors de l'ex�cution selon le type r�el de l'instance�;
- invokedynamic - d�fini depuis Java SE 7 et d�taill� dans la JSR-292 permet de mieux supporter les langages de scripts. Cette instruction est nettement moins contraignante, car elle ne v�rifie pas la pr�sence de la signature de m�thode dans la classe � la compilation, mais seulement lors de l'ex�cution, et introduit un m�canisme de gestion d'erreurs (une m�thode par d�faut � appeler si la m�thode demand�e n'existe pas).
Dans tous les cas, la pr�sence, le nombre et le type des param�tres et des valeurs de retour sont v�rifi�s � la compilation.
Ainsi, les m�thodes invoqu�es avec invokeinterface et invokevirtual n�cessitent un traitement suppl�mentaire lors de l'ex�cution afin de rechercher la bonne m�thode selon le type exact de la r�f�rence sur laquelle elles sont utilis�es. Toutefois les JVM modernes peuvent optimiser ce type d'appel de m�thodes en se basant sur l'�tat de l'application (en particulier le nombre et le type des classes charg�es).
Il faut pr�ciser que ces appels se font au niveau du bytecode et non au niveau Java.
Bien que Oracle pr�ne une compatibilit� ascendante, ce n'est pas toujours le cas.
D�j� il faut prendre en compte deux niveaux de compatibilit�: binaire et source.
Compatibilit� binaire
La compatibilit� binaire est celle qui est le plus assur�e. Elle permet � un code compil� avec un JDK plus ancien de fonctionner de la m�me mani�re sur une JVM plus r�cente. Toutefois il peut y avoir des exceptions � cela�:
- un bogue ou une r�gression (personne n'est � l'abri de cela)�;
- � l'inverse, une correction de bogue peut avoir une influence sur les programmes existants et qui font avec�;
- certains comportements apport�s par les nouvelles fonctionnalit�s peuvent avoir des effets ind�sirables sur des fonctionnalit�s existantes.
La migration d'une application n'est pas aussi simple, et peut poser quelques probl�mes malgr� la compatibilit� ascendante. De ce fait la migration a un co�t et elle est g�n�ralement retard�e. Bien souvent, on saute m�me des versions. Par exemple, il est probable que beaucoup d'entreprises sont pass�es de Java 1.4.2 � la version�6 directement. En effet, le passage � Java�5.0 avait introduit des lenteurs r�seau sur certaines machines, dont l'origine a �t� assez difficile � cibler. En fait, finalement il s'agissait d'un bogue introduit par le support du protocole NetBIOS et sur la r�solution des noms de machine, qui posait probl�me avec la r�solution des adresses IP...
Bref, une entreprise ne peut pas forc�ment se permettre de perdre un temps fou � d�boguer simplement pour une nouvelle fonctionnalit�! � noter que cela n'est pas propre � Java.
Compatibilit� des sources
Ensuite, il faut prendre en compte la compatibilit� des sources�: c'est bien beau qu'un ancien programme fonctionne sur la nouvelle JVM, mais il faut que ce programme puisse �tre recompil� afin qu'il puisse �ventuellement �voluer...
Or, c'est d�j� nettement plus complexe, car les �volutions du langage ou les modifications de l'API peuvent poser de nouveaux probl�mes de compilation, par exemple�:
- l'introduction de nouveaux mots-cl�s (assert, enum, etc.) peut poser probl�me s'ils �taient utilis�s comme identifieurs�;
- l'introduction de nouvelles m�thodes peut poser des probl�mes de compilation (ambig�it� sur la m�thode � appeler ou autre probl�me si des m�thodes du m�me nom existent d�j� dans la classe ou les classes filles)�;
- nouveaux warnings (en particulier en ce qui concerne les Generics), alors qu'un code ��zero-warning�� peut �tre requis (par le client par exemple).
En bref, tout n'est pas aussi simple que cela, m�me si �a l'est bien plus que pour d'autres langages ou plateformes...
Incompatibilit�s connues
On peut �galement noter qu'� chaque version, Oracle met � disposition une liste des incompatibilit�s connues (comprendre ��volontaires��) par rapport � la version pr�c�dente�:
Les versions ant�rieures des JDK, JRE, JEE et plus encore sont disponibles sur le site des archives Java chez Oracle.
Lancement via l�interpr�teur
Lorsque l'on ex�cute une application Java sous Microsoft Windows avec la commande java.exe, un terminal de commande permet d'afficher les entr�es/sorties de l'application. Fermer ce terminal mettra �galement fin � votre application. Si vous souhaitez ex�cuter votre application sans le terminal, il suffit d'utiliser la commande javaw.exe � la place de java.exe.
Code CMD : | S�lectionner tout |
javaw <options> monPackage.monAppli
Archive JAR ex�cutable
Une deuxi�me solution consiste � cr�er une archive JAR contenant tous les fichiers de l'application et un fichier manifeste d�finissant la classe Java qui permet de lancer le programme. De cette mani�re, il suffit alors de double-cliquer sur le fichier JAR pour l'ex�cuter.
Attention�: certains gestionnaires d'archives (WinRAR, 7ZIP, etc.) peuvent red�finir les associations de fichiers et emp�cher la prise en charge des fichiers JAR par Java.
La liste de toutes les options pour les versions de la Java HotSpot VM (plateforme SPARC/Solaris) est disponible sur le site de Oracle�: A Collection of JVM Options
D'autres �l�ments relatifs aux options de la JVM sont disponibles aux adresses suivantes�:
Il est � noter que cette liste d'options est utilisable avec la plupart des outils livr�s avec le JDK tels que�:
- <r�pertoire du JDk>\bin\javac�;
- <r�pertoire du JDk>\bin\javap�;
- <r�pertoire du JDk>\bin\jconsole�;
- <r�pertoire du JDk>\bin\keytool�;
- <r�pertoire du JDk>\bin\rmic�;
- etc.
Il suffit pour cela d'utiliser l'option -J qui passera directement les param�tres � l'environnent Java sous-jacent.
Exemple�:
Code Console : | S�lectionner tout |
1 2 3 4 | $ javadoc -J-version java version "1.8.0_45" Java(TM) SE Runtime Environment (build 1.8.0_45-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode) |
Proposer une nouvelle r�ponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plut�t sur le forum de la rubrique pour �aLes sources pr�sent�es sur cette page sont libres de droits et vous pouvez les utiliser � votre convenance. Par contre, la page de pr�sentation constitue une �uvre intellectuelle prot�g�e par les droits d'auteur. Copyright � 2025 Developpez Developpez LLC. Tous droits r�serv�s Developpez LLC. Aucune reproduction, m�me partielle, ne peut �tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'� trois ans de prison et jusqu'� 300 000 � de dommages et int�r�ts.