Java est un langage orienté objet développé par la société Sun. La syntaxe générale est très proche de celle du C, mais Java n'est pas une surcouche du C et la syntaxe est beaucoup plus claire que celle du C++.
Les avantages :
Les avantages de Java son 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 3ème 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ème disposant d'une implémentation de Java :
Windows 3.1/95/98/NT4/2000/ME/XP/CE, MacOS, Solaris, Linux, AIX, OS/2, IRIX, UnixWare, HP/UX, Digital Unix, AmigaOS, BeOS, OpenVMS, FreeBSD, SunOS, RiscOS
Cette liste n'est pas exhaustive et est donnée à titre d'exemple.
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.
Je ne parlerai en aucun cas des techniques à employer sous les divers environnements de programmation car tous fournissent une documentation compétente et si ce n'est pas le cas ne méritent tout simplement pas qu'on y prête attention.
Pré-requis/Rappel :
Pour que la suite des opérations se passe bien, il est absolument nécessaire que les règles suivantes soient respectées :
un fichier contient une seule classe dont le modificateur de portée est public ;
le nom du fichier est strictement le même que le nom de la classe public (majuscule/minuscule importante) ;
il faut que les commandes java, javac, jar,... soient accessibles. Pour le vérifier taper dans une console ou un terminal ceci :java -version si vous obtenez un message autre que la version de Java installée référez-vous à la documentation de votre système d'exploitation, généralement le problème est dû à la variable d'environnement PATH qui ne pointe pas sur le répertoire contenant les exécutables.
La Compilation :
La compilation se fait avec l'application nommée javac. Placez-vous dans votre répertoire de travail et exécutez la commande suivante :
Ici nous avons donc un fichier Java nommé "MonFichierACompiler.java" dans le répertoire nommé "sources" et le résultat de la compilation sera placé dans le répertoire nommé "classes". Pour plus d'information sur les options utilisées, tapez la commande "javac" et la liste apparaîtra à l'écran.
L'Exécution :
L'exécution se fait via la commande java. Placez-vous dans votre répertoire de travail et exécutez la commande suivante :
java -classpath classes/ MonFichierACompiler
Ici nous précisons à l'application java qu'elle doit trouver les fichiers *.class dans le répertoire classes (note : si vos *.class se trouvent dans le répertoire courrant, vous pouvez utiliser : "-classpath .") et qu'elle trouvera son point de départ dans la classe public nommée "MonFichierACompiler". Pour rappel ce point de départ correspond à la méthode dont la signature est :
publicstaticvoid main (String argv [])
si vous avez ommis cette méthode vous obtiendrez un message d'erreur du style :
Exception in thread "main" java.lang.NoSuchMethodError: main
et si votre classpath est erroné vous obtiendrez :
Exception in thread "main" java.lang.NoClassDefFoundError: MonFichierACompiler
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é comme une applet coté serveur. Une servlet est destinée à ajouter des fonctionnalités à un serveur web.
Sun distribue le code source de toutes les classes de l'API avec le JDK (installation de composant optionnel !). Vous pouvez donc retrouver les sources dans le fichier 'src.jar', dans le répertoire d'installation du JDK.
Pourquoi ?
Même si cette cette approche n'est pas à conseiller aux débutants, il peut parfois être très utile de consulter le code source des classes 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...
JavaWebStart est l'implémentation de référence par Sun de la spécification JNLP (JavaNetworkLaunchingProtocol) qui définit un mécanisme d'installation et de mise à jour supportant des fonctinalité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 browser -> intégration facile & large support.
Mise à jour incrémentale et modulaire des applications.
Support d'un exécution sécurisée dans un environnement de type sandbox.
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.
Les encodages les plus souvent utilisés en informatique sont l'ASCII et l'ISO Latin-1. Ils sont codés respectivement sur 7 bits et 8 bits, ils peuvent donc représenter 128 et 256 caractères. Ces encodages sont suffisants pour les principales langues de l'Europe et de l'Ouest, mais ils sont quand même assez limités.
Un standard, Unicode, a été crée en 1991 pour pallier à ces limitations et permettre de coder d'autres alphabets. Chaque caractère est défini sur 16 bits, ce qui porte à 65 536 le nombre le symboles représentables, de quoi envisager l'avenir sereinement. Aujourd'hui sous la coupe de l'Unicode Consortium, le standard continue d'évoluer. Pour plus de détails, consultez le site Unicode.org .
Java qui se veut un langage standard, utilisable quelquesoit le machine ou le système, utilise Unicode pour représenter les caractères. Malheureusement Unicode est encore peu répandu et la plupart des éditeurs de texte ne le prennent pas en charge. Cependant un programme écrit en ASCII (ou en ISO Latin-1) sera parfaitement compris par Java. Si vous voulez imbriquer un caractère Unicode dans un programme écrit en ASCII pur, vous devrez utiliser une séquence d'échappement particulière : la barre oblique arrière ou anti-slash '\' suivie d'un 'u' minuscule et d'une suite de quatres chiffres hexadécimaux correspondant au code Unicode du caractère. Par exemple, \u0020 représente le caractère d'espacement.
Les caractères Unicode sont utilisables partout en Java, y compris dans les noms de variables et les commentaires. Toutefois, il est recommandé de ne pas utiliser les symboles monétaires en tête des noms car ils pourraient interférer avec des variables interne à Java.
Les noms variables sont écrits en minuscules sauf la première de chaque de mot à 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 obbligé de comprendre votre code plus tard).
publicint maVariableEntiere;
Note : Une variable peut commencer par le caractère '_' ou '$', mais c'est fortement déconseillé par SUN.
Les constantes :
Afin de bien les différencier des variables ; les constantes sont écrites en majuscule, les mots sont séparés par le caractère '_'.
publicfinalstaticint MA_CONSTANTE
Les méthodes :
Le nom des méthodes suit les mêmes règles de construction que les variables, mais le premier mot devrait toujours être un verbe à l'infinitif, suivi éventuellement de mots pour qualifier l'action.
Les classes et interfaces :
Les noms de classes sont écrit en minuscule, chaque première letre d'un mot est en majuscule.
publicclass MaClasse
Les paquets :
Les noms de paquet sont intégralement écrits en minuscule, 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 ...) suivit du nom de l'organisation ou du projet.
Pour assurer l'indépendance de la plate-forme, 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 ?
RetroGuard : un des meilleurs obfuscateurs Open Source.
Ce document issu de http://www.developpez.com est soumis à la licence GNU FDL traduit en français ici.
Permission vous est donnée de distribuer, modifier des copies de cette page tant que cette note apparaît clairement.