(Java \(langage\) - Wikip\351dia)

Transcription

(Java \(langage\) - Wikip\351dia)
Java (langage) - Wikipédia
1 sur 10
http://fr.wikipedia.org/wiki/Java_(langage)
Java (langage)
Un article de Wikipédia, l'encyclopédie libre.
Cet article ou cette section doit être recyclé. Sa qualité devrait être largement améliorée en le réorganisant et en le clarifiant.
L'utilisateur qui appose ce bandeau est invité à énoncer les points à améliorer en page de discussion.
Pour les articles homonymes, voir Java.
Java
Java est à la fois un langage de programmation informatique orienté objet et un environnement d'exécution
informatique portable créé par James Gosling et Patrick Naughton employés de Sun Microsystems avec le soutien
de Bill Joy (cofondateur de Sun Microsystems en 1982), présenté officiellement le 23 mai 1995 au SunWorld.
Sommaire
1 Présentation
2 Historique
2.1 L'origine du langage
2.2 Java rencontre Internet
2.3 Histoire récente
2.3.1 Utilisation Web
2.3.1.1 Coté client
2.3.1.2 Côté serveur
2.3.2 Utilisation sur le poste de travail
2.3.3 Microsoft et autres systèmes
2.3.4 Passage sous licence libre
2.4 Historique des versions
3 Philosophie
3.1 Un langage orienté objet
3.2 Indépendance vis-à-vis de la plate-forme
3.3 Mécanisme du ramasse-miettes (Garbage Collector)
4 Concepts de Base
4.1 Un langage orienté objet
4.2 Indépendance face à la plate-forme
4.3 Exécution sécurisée de code distant
5 Le langage
5.1 Mots réservés, primitifs et littéraux
5.2 Structures de contrôle
5.2.1 Les collections d'objets
5.2.2 Boucles
5.2.3 Structures conditionnelles
5.2.4 Traitement des exceptions
5.2.5 Code lent / exception
5.2.6 encodage du source
6 JavaStyle
7 Versions
8 Licence
9 Frameworks et API
10 Version interprétée
10.1 Un exemple avec Jython
11 Appellation
12 Programmation
12.1 Construction
13 Voir aussi
13.1 Articles connexes
13.2 Liens externes
13.3 Bibliographie
Apparu en
Années 1990
Auteur
Sun Microsystems
Paradigme
Programmation orientée objet,
structurée et impérative
Typage
Statique, fort, sûr, nominatif
Influencé par
Objective-C, C++, Smalltalk, Eiffel,
1
C#
A influencé
C#, D, J#, Ada 2005
Implémentations
Liste de JVM
Système
d'exploitation
Multi-plate-forme
Site Web
www.java.com
(http://www.java.com/)
Présentation
Java est à la fois un langage de programmation et un environnement d'exécution. Le langage Java a la particularité principale d'être portable sur plusieurs systèmes d'exploitation
tels que Unix, Microsoft Windows, Mac OS ou Linux... C'est la plateforme qui garantit la portabilité des applications développées en Java.
Le langage reprend en grande partie la syntaxe du langage C++, très utilisé par les informaticiens. Néanmoins, Java a été épuré des concepts les plus subtils du C++ et à la fois les
plus déroutants, tels que l'héritage multiple remplacé par l'implémentation des interfaces. Les concepteurs ont privilégié l'approche orientée objet de sorte qu'en Java, tout est objet à
l'exception des types primitifs (nombres entiers, nombres à virgule flottante, etc.).
Java permet de développer des applications autonomes mais aussi, et surtout, des applications client-serveur. Côté client, les applets sont à l'origine de la notoriété du langage. C'est
surtout côté serveur que Java s'est imposé dans le milieu de l'entreprise grâce aux servlets, le pendant serveur des applets, et plus récemment les JSP (JavaServer Pages) qui peuvent
se substituer à PHP, ASP et ASP.NET.
Les applications Java peuvent être exécutées sur tous les systèmes d'exploitation pour lesquels a été développée une plateforme Java, dont le nom technique est JRE (Java Runtime
Environment - Environnement d'exécution Java). Cette dernière est constituée d'une JVM (Java Virtual Machine - Machine Virtuelle Java), le programme qui interprète le code Java
et le convertit en code natif. Mais le JRE est surtout constitué d'une bibliothèque standard à partir de laquelle doivent être développés tous les programmes en Java. C'est la garantie
de portabilité qui a fait la réussite de Java dans les architectures client-serveur en facilitant la migration entre serveurs, très difficile pour les gros systèmes.
Historique
Cet historique provient d'une traduction libre d'un article du wikipedia anglophone Java programming language (http://en.wikipedia.org/wiki/Java_programming_language) .
N'hésitez pas à vérifier la qualité de la traduction pour être certain qu'il n'y ait pas de contresens.
18/06/2007 14 11
Java (langage) - Wikipédia
2 sur 10
http://fr.wikipedia.org/wiki/Java_(langage)
L'origine du langage
La plateforme et le langage Java sont issus d'un projet de Sun microsystem datant de 1990. L'ingénieur Patrick Naughton n'était pas satisfait par le
langage C++ utilisé chez Sun, ses interfaces de programmation en langage C, ainsi que les outils associés. Alors qu'il envisageait une migration vers
NeXT, on lui proposa de travailler sur une nouvelle technologie et c'est ainsi que le Projet Stealth (furtif) vit le jour.
Le Projet Stealth fut rapidement rebaptisé Green Project avec l'arrivée de James Gosling et de Mike Sheridan. Ensemble, et aidés d'autres
ingénieurs, ils commencèrent à travailler dans un petit bureau de la rue Sand Hill de Menlo Park en Californie. Ils essayèrent d'élaborer une
technologie pour le développement d'applications d'une nouvelle génération, offrant à Sun la perspective d'opportunités uniques.
L'équipe envisageait initialement d'utiliser le langage C++, mais l'abandonna pour différentes raisons. Tout d'abord, ils développaient sur un
système embarqué avec des ressources limitées, estimaient que l'utilisation du C++ demandait un investissement trop important et que cette
complexité était une source d'erreur pour les développeurs. Les lacunes de ce langage au niveau du ramasse-miettes impliquaient que la gestion de
la mémoire devait être programmée manuellement, un défi mais aussi une source d'erreur. L'équipe était aussi troublée par les lacunes du langage
au niveau de la sécurité, de la programmation distribuée, du multi-threading. De plus, ils voulaient une plateforme qui puisse être portée sur tout
type d'appareils.
Duke, la mascotte de Java
Bill Joy avait envisagé un nouveau langage combinant le meilleur du langage de programmation Mesa et du langage C. Dans un article appelé Plus loin (Further), il proposa à Sun
que ses ingénieurs développent un environnement orienté objet basé sur le langage C++. À l'origine, Gosling envisageait de modifier et d'améliorer le langage C++, qu'il appelait
C++ ++ --, mais l'idée fut bientôt abandonnée au profit du développement d'un nouveau langage de programmation qu'ils appelèrent Oak (chêne) en référence, on pense, à un arbre
planté juste devant la fenêtre de leur bureau.
L'équipe travailla avec acharnement et, à l'été 1992, ils furent capables de faire une démonstration incluant le système d'exploitation Green, le langage Oak (1992), les bibliothèques
et le matériel. Leur première réalisation, présentée le 3 septembre 1992, fut la construction d'un PDA appelé Star7 ayant une interface graphique et un agent intelligent appelé Duke
pour prêter assistance à l'utilisateur. En novembre de la même année, le Green Project fut abandonné pour devenir FirstPerson, Inc, appartenant en totalité à Sun Microsystems et
l'équipe fut relocalisée à Palo Alto. L'équipe FirstPerson était intéressée par la construction d'outils hautement interactifs et quand Time Warner publia un appel d'offres en faveur
d'un décodeur multifonction, FirstPerson changea d'objectif pour proposer une telle plateforme. Cependant, l'industrie de la télé par câble trouva qu'elle offrait trop de possibilités à
l'utilisateur et FirstPerson perdit le marché au profit de Silicon Graphics. Incapable d'intéresser l'industrie audiovisuelle, la société fut réintroduite au sein de Sun.
Java rencontre Internet
De juin à juillet 1994, après trois jours de remue-méninge avec John Gage, James Gosling, Joy, Naughton, Wayne Rosing et Eric Schmidt, l'équipe recentra la plateforme sur le
Web. Ils pensaient qu'avec l'avènement du navigateur Mosaic, Internet était le lieu où allait se développer le même genre d'outil interactif que celui qu'ils avaient envisagé pour
l'industrie du câble. Naughton développa comme prototype un petit navigateur Web, WebRunner qui deviendra par la suite HotJava.
La même année le langage fut renommé Java après qu'on eut découvert que le nom Oak était déjà utilisé par un fabricant de carte video. Le nom Java fut inventé dans un petit bar
fréquenté par quelques membres de l'équipe. Il n'est pas clair de savoir si oui ou non le nom est un acronyme, bien que certains prétendent qu'il signifie James Gosling, Arthur Van
Hoff et Andy Bechtolsheim ou tout simplement Just Another Vague Acronym (littéralement juste un autre vague acronyme). La croyance selon laquelle Java doit son nom aux
produits vendus dans le bar est le fait que le code sur 4 octets (également appelés nombre magique) des fichiers de classe est en hexadécimal 0xCAFEBABE. Certaines personnes
prétendent également que le nom de Java vient du fait que le programme était destiné à pouvoir tourner sur des systèmes embarqués, comme des cafetières (Java signifie café en
argot américain). En octobre 1994, HotJava et la plateforme Java furent présentés pour Sun Executives. Java 1.0a fut disponible en téléchargement en 1994 mais la première version
publique du navigateur HotJava arriva le 23 mai 1995 à la conférence SunWorld. L'annonce fut effectuée par John Gage, le directeur scientifique de Sun Microsystems. Son
annonce fut accompagnée de l'annonce surprise de Marc Andressen, vice président de l'exécutif de Netscape que Netscape allait inclure le support de Java dans ses navigateurs. Le 9
janvier 1996, le groupe Javasoft fut constitué par Sun Microsystems pour développer cette technologie [1]
(http://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960109.14048.html) . Deux semaines plus tard la première version de Java était disponible.
Histoire récente
Utilisation Web
Coté client
La possibilité des navigateurs Web de lancer des applets Java garantit la pérennité de l'utilisation de Java par le grand public. Les concurrents récents des applets Java sont
principalement Macromedia Flash et Javascript, mais bientôt Xul ou XAML concurrenceront ces technologies.
Les avantages de Java par rapport à Javascript sont essentiellement la portabilité. Plus l'interface est lourde, plus il est épuisant voire impossible d'adapter l'interface à tous les
navigateurs du marché. Les avantages de Java par rapport à Flash sont aussi valables par rapport à Javascript : Java propose un style de langage plus élégant, et extrêmement bien
documenté et propose surtout un Environnement de développement intégré très efficace.
Les applets sur le poste Client peuvent communiquer avec des servlets sur le Serveur, tout comme Javascript peut communiquer avec le Serveur au moyen d'AJAX. Flash utilise la
technologie Flex (Macromedia).
La puissance de Java est souvent utilisée pour des applications plus consistantes comme les jeux Yahoo et plus récemment les lecteurs vidéo multiplateformes (par exemple [2]
(http://www.forbidden.co.uk/demos/live/) ).
Côté serveur
Sur le Web côté serveur, Java n'a jamais été aussi populaire avec de nombreux serveurs Web qui utilisent la technologie Java Server Pages (JSP) et les autres technologies basées sur
Java.
Utilisation sur le poste de travail
L'utilisation native du langage Java pour des applications sur un poste de travail restait jusqu'à présent relativement rare à cause de leur manque de rapidité. Cependant, avec
l'accroissement rapide de la puissance des ordinateurs, les améliorations au cours de la dernière décennie de la machine virtuelle Java et de la qualité des compilateurs, plusieurs
technologies ont gagné du terrain comme par exemple Netbeans et l'environnement Eclipse, les technologies de fichiers partagés Limewire et Azureus. Java est aussi utilisée dans le
programme de mathématique Matlab au niveau de l'interface homme machine et pour le calcul formel. Les applications Swing apparaissent également comme une alternative à la
technologie .NET.
Microsoft et autres systèmes
Microsoft a fourni un environnement de travail de type Java, dénommé J++, avec ses systèmes d'exploitation avant la sortie de Windows XP en 2001. Suite à décision de
justice, et au vu du non-respect des spécifications de ce langage, Microsoft a dû abandonner celui-ci (cf chapitre "Indépendance vis-à-vis de la plate-forme" plus bas)
Beaucoup de fabricants d'ordinateurs continuent d'inclure un environnement JRE sur leurs systèmes Windows.
Java apparaît également comme un standard au niveau du Mac OS X d'Apple aussi bien que pour les distributions Linux. De nos jours, la plupart des utilisateurs peuvent
lancer des applications Java sans aucun problème.
Passage sous licence libre
Le 13 novembre 2006, Sun annonce le passage de Java, c’est-à-dire le JDK (JRE et outils de développement) et les environnements Java EE (déjà sous licence CDDL) et Java ME
18/06/2007 14 11
Java (langage) - Wikipédia
3 sur 10
http://fr.wikipedia.org/wiki/Java_(langage)
sous licence GPL. Java devient donc un logiciel libre.
Historique des versions
Le langage Java a connu plusieurs évolutions depuis le JDK (Java Development Kit) 1.0 avec l'ajout de nombreuses classes et packages à la bibliothèque standard. Depuis le
J2SE1.4, l'évolution de Java est dirigée par le JCP (Java Community Process) qui utilise les JSR (Java Specifications Requests) pour proposer des ajouts et des changements sur la
plate-forme Java. Le langage est spécifié par le JLS (Java Specification Language). Les modifications du JLS sont gérées sous le code JSR 901 [3]
(http://www.jcp.org/en/jsr/detail?id=901)
JDK 1.0 (23 janvier 1996 - 211 classes et interfaces) — Version initiale. communiqué de presse
(http://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960123.10561.html)
JDK 1.1 (19 février 1997 - 477 classes et interfaces) — De nombreux ajouts (communiqué de presse
(http://www.sun.com/smi/Press/sunflash/1997-02/sunflash.970219.0001.html) ) avec notamment :
une refonte complète du modèle événementiel AWT.
Les classes internes sont ajoutées au langage.
JavaBeans
JDBC
Java Remote Invocation (RMI)
J2SE 1.2 (9 décembre 1998 - 1524 classes et interfaces) — Nom de code Playground. Cette version et les suivantes jusque J2SE 5.0 sont rebaptisées Java 2 et la version
nommée J2SE (Java 2 Platform, Standard Edition) remplace JDK pour distinguer la plateforme de base de la version J2EE (Java 2 Platform, Enterprise Edition) et de la
version J2ME (Java 2 Platform, Micro Edition). Plusieurs ajouts (communiqué de presse (http://www.sun.com/smi/Press/sunflash/1998-12/sunflash.981208.9.html) ) avec
notamment :
le mot-clé strictfp
la réflection
l'API graphique Swing est intégrée.
Pour la première fois, la machine virtuelle Java de Sun inclut un compilateur "Juste à temps" (Just in Time).
Java Plug-in
Java IDL, une implémentation de IDL pour l'interopérabilité avec CORBA.
le framework Collections.
J2SE 1.3 (8 mai 2000 - 1840 classes et interfaces) — Nom de code Kestrel. Le changement le plus important(communiqué de presse
(http://www.sun.com/smi/Press/sunflash/2000-05/sunflash.20000508.3.html) -liste complète des changements (http://java.sun.com/j2se/1.3/docs/relnotes/features.html) ) avec
notamment :
HotSpot JVM inclus (La machine virtuelle HotSpot sortit en Avril 1999 pour la machine virtuelle du J2SE 1.2)
Changement pour les RMI pour être basé sur CORBA.
JavaSound
JNDI (Java Naming and Directory Interface) inclus de base (disponible auparavant comme extension)
JPDA (Java Platform Debugger Architecture)
J2SE 1.4 (6 février 2002 - 2723 classes et interfaces) — Nom de code Merlin. Ce fut la première révision de la plateforme sous JCP (Java Community Processe)JSR 59
(http://www.jcp.org/en/jsr/detail?id=59) . Les principaux changements (communiqué de presse (http://www.sun.com/smi/Press/sunflash/2002-02/sunflash.20020206.5.html) liste complète des changements (http://java.sun.com/j2se/1.4.2/docs/relnotes/features.html) sont :
le mot-clé assert (Spécifié dans JSR 41 (http://www.jcp.org/en/jsr/detail?id=41) .)
les expressions rationnelles modélisées en s'inspirant du langage Perl.
Le chaînage d'exception permet à une exception d'encapsuler l'exception de base niveau d'origine. (Spécifié dans JSR 51 (http://www.jcp.org/en/jsr/detail?id=51) .)
API de connexion (Spécifiée dans JSR 47 (http://www.jcp.org/en/jsr/detail?id=47) .)
l'API Image I/O pour lire et écrire des images dans des formats comme JPEG et PNG.
intégration d'un parser XML et du moteur XSLT nommé JAXP (Specifié dans JSR 5 (http://www.jcp.org/en/jsr/detail?id=5) et JSR 63
(http://www.jcp.org/en/jsr/detail?id=63) .)
intégration des extensions de sécurité JCE, JSSE et JAAS.
Java Web Start (introduit pour la première fois en mars 2001 pour J2SE 1.3 - Spécifié dans JSR 56 (http://www.jcp.org/en/jsr/detail?id=56) .)
J2SE 5.0 (30 Septembre 2004 - 3270 classes et interfaces) — Nom de code Tiger. (initialement numérotée 1.5, qui est toujours utilisé comme numéro de version interne [4]
(http://java.sun.com/j2se/1.5.0/docs/relnotes/version-5.0.html) ). Développé par JSR 176 (http://www.jcp.org/en/jsr/detail?id=176) , Tiger ajoute un nombre significatif de
nouveautés (communique de presse (http://www.sun.com/smi/Press/sunflash/2004-09/sunflash.20040930.1.html) ) au langage :
Programmation générique — (Spécifié par JSR 14 (http://www.jcp.org/en/jsr/detail?id=14) .)
Metadata — également appelées annotations, permet au langage de construire des classes et des méthodes étiquetées avec des données additionnelles qui peuvent être
utilisées en tant que méta-données (Spécifiée dans JSR 175 (http://www.jcp.org/en/jsr/detail?id=175) .)
Autoboxing/unboxing — conversion automatique entre des types primitifs (comme le type int) et le Wrapper de classe correspondant (comme la classe Integer)
(Spécifié dans JSR 201 (http://www.jcp.org/en/jsr/detail?id=201) ).
Enumérations — le mot-clé enum permet de créer une liste ordonnée de valeurs sans type. Auparavant, ceci pouvait seulement être réalisé par des entiers constants
(Spécifié dans JSR 201).
Varargs — la syntaxe Object ... utilisée dans une déclaration de méthode permet de spécifier un nombre variable d'arguments pour cette méthode. C'est un
fonctionnement équivalent à la fonction "printf" en C.
Imports statiques — Cette fonctionnalité permet d'utiliser les constantes d'une classe sans spécifier le nom de cette classe et sans passer par "l'anti-pattern Constant
Interface" (c'est l'expression utilisée sur le site de Sun).
Extension du for pour les boucles — la syntaxe du for est étendue avec une syntaxe spéciale pour les itérer sur n'importe quel Itérable comme un tableau, ou une
collection en utilisant la syntaxe :
void displayWidgets (Iterable<Widget> widgets) {
for (Widget w : widgets) {
w.display();
}
}
Cet exemple itère l'objet Iterable widgets de la classe Widget, assignant chacun de ces éléments à la variable w et ensuite appelle la méthode display() sur l'élément w
(Specifié dans JSR 201).
Java SE 6 (11 décembre 2006 - ??? classes et interfaces) — Nom de code Mustang (https://mustang.dev.java.net/) . (voir JSR 270 (http://www.jcp.org/en/jsr/detail?id=270) ).
Une version bêta est sortie le 15 février 2006, une autre bêta en juin 2006, une version "release candidate" en novembre 2006, et la version finale le 12 décembre 2006. Avec
cette version, Sun remplace le nom J2SE par Java SE et supprime le .0 au numéro de version (voir[5] (http://www.java.com/en/about/brand/naming.jsp) ).
Java SE 7 — Nom de code Dolphin. En 2006, cette version est encore à un stade de développement précoce. C'est la dernière version à être planifiée. Le développement
devrait commencer à l'été 2006 avec une sortie estimée en 2008 (voir [6] (http://weblogs.java.net/blog/editors/archives/2004/09/evolving_a_lang.html) ). Il s'agira de la
première version sous la licence GPL.
18/06/2007 14 11
Java (langage) - Wikipédia
4 sur 10
http://fr.wikipedia.org/wiki/Java_(langage)
En plus des changements au niveau du langage, des changements plus importants ont eu lieu au fil des années qui ont conduit des quelques centaines de classes dans le JDK 1.0 à
plus de 3000 dans J2SE 5.0. Des API entières, comme Swing ou Java2D ont été ajoutées et beaucoup de méthodes de l'original JDK 1.0 ont été déclarées deprecated (c'est-à-dire
obsolètes et pouvant être supprimées à tout moment).
Philosophie
Cette partie provient d'une traduction libre d'un article du wikipedia anglophone Java programming language (http://en.wikipedia.org/wiki/Java_programming_language) .
Lors de la création du langage Java, il avait été décidé que ce langage devait répondre à 5 objectifs :
1.
2.
3.
4.
5.
utiliser une méthodologie orientée objet,
permettre à un même programme d'être exécuté sur plusieurs systèmes d'exploitation différents,
pouvoir utiliser de manière native les réseaux informatiques,
pouvoir exécuter du code distant de manière sûre,
être facile à utiliser et posséder les points forts des langages de programmation orientés objet comme le C++.
Un langage orienté objet
La première caractéristique, le caractère orienté objet (« OO »), fait référence à une méthode de programmation et de conception du langage. Bien qu'il existe plusieurs
interprétations de l'expression orienté objet, une idée phare dans ce type de développement est que les différents types de données doivent être directement associés avec les
différentes opérations qu'on peut effectuer sur ces données. En conséquence, les données et le code sont combinés dans une même entité appelé objet. Un objet peut être vu comme
une entité unique regroupant un comportement, le code, avec un certain état, les données. Le principe est de séparer les choses qui changent de celles qui ne changent pas ; souvent
un changement au niveau d'une structure de données va impliquer un changement dans le code servant à manipuler ces données et réciproquement. Ce découpage en entités
cohérentes appelées objets permet d'avoir des fondations plus solides pour bâtir une architecture logicielle de qualité. L'objectif est de pouvoir développer des projets plus simples à
gérer et de réduire le nombre de projets aboutissant à un échec.
Un autre objectif majeur de la programmation orientée objet est de développer des objets génériques de façon que le code puisse être réutilisable entre différents projets. Un objet
« client » générique par exemple doit avoir globalement le même comportement dans les différents projets, en particulier si ces différents projets se recoupent comme c'est souvent
le cas dans les grandes organisations. Dans ce sens, un objet peut être vu comme un composant logiciel enfichable, permettant à l'industrie du logiciel de bâtir des projets
d'envergure à partir d'éléments de base réutilisables et à la stabilité éprouvée tout en diminuant de manière drastique le temps de développement.
La réutilisation de code, lorsqu'elle est soumise à l'épreuve de la pratique, rencontre deux difficultés majeures : la création d'objets génériques réellement réutilisables est une notion
très mal comprise et une méthodologie pour diffuser de l'information nécessaire à la réutilisation de code manque cruellement. Certaines communautés du monde « Open Source »
veulent contribuer à résoudre ce problème en fournissant aux programmeurs la possibilité de diffuser largement de l'information sur les objets réutilisables et les bibliothèques objet.
Indépendance vis-à-vis de la plate-forme
La deuxième caractéristique, l’indépendance vis-à-vis de la plate-forme, signifie que les programmes écrits en Java fonctionnent de manière
parfaitement similaire sur différentes architectures matérielles. On peut effectuer le développement sur une architecture donnée et faire tourner
l'application sur toutes les autres.
Ce résultat est obtenu par les compilateurs Java qui compilent le code source "à moitié" afin d'obtenir un bytecode (plus précisément le bytecode
Java, un langage machine spécifique à la plate-forme Java). Le code est ensuite interprété sur une machine virtuelle Java (JVM en anglais), un
programme écrit spécifiquement pour la machine cible qui interprète et exécute le bytecode Java. De plus, des bibliothèques standard sont fournies
pour pouvoir accéder à certains éléments de la machine hôte (le graphisme, le multithreading, la programmation réseau…) exactement de la même
manière sur toutes les architectures. Notons que même s'il y a explicitement une première phase précoce de compilation, le bytecode Java est
interprété ou alors converti à la volée en code natif par un compilateur "juste à temps" (Just in time - JIT).
Il existe également des compilateurs Java qui compilent directement le Java en code objet natif pour la machine cible, comme par exemple GCJ,
supprimant la phase intermédiaire du bytecode mais le code final produit par ces compilateurs ne peut alors être exécuté que sur une seule
architecture.
Le "look and feel" d'une
interface homme machine
Swing est indépendante de la
plate-forme sur laquelle elle
tourne.
La licence de Sun pour Java insiste sur le fait que toutes les implémentations doivent être compatibles. Ceci a aboutit à la plainte en Justice contre
Microsoft après que Sun a constaté que l'implémentation de Microsoft ne supportait pas les interfaces RMI et JNI et comportait des éléments spécifiques à certaines plateformes par
rapport à la plateforme initiale de Sun. Sun obtint des dommages et intérêt (20 millions de dollars) et l'acte de justice renforça encore les termes de la licence de Sun. En réponse,
Microsoft arrêta le support de Java sur ses plates-formes et, sur les versions récentes de Windows, Internet Explorer ne supporte pas les applets Java sans ajouter de plug-in.
Cependant, Sun met à disposition gratuitement des environnements d'exécution de Java pour les différentes plates-formes Microsoft.
Les premières implémentations du langage utilisaient une machine virtuelle interprétée pour obtenir la portabilité. Ces implémentations produisaient des programmes qui
s'exécutaient plus lentement que ceux écrits en C ou en C++, si bien que le langage souffrit d'une réputation de faibles performances. Des implémentations plus récentes de la
machine virtuelle Java (JVM) produisent des programmes beaucoup plus rapides qu'auparavant, en utilisant différentes techniques.
La première technique est de compiler directement en code natif comme un compilateur traditionnel, supprimant complètement la phase de bytecode. On obtient ainsi de bonnes
performances mais aux dépends de la portabilité. Une autre technique appelée compilation "Juste à temps" (Just In Time - JIT) traduit le byte code en code natif durant la phase de
lancement du programme. Certaines machines virtuelles plus sophistiquées utilisent une recompilation dynamique durant laquelle la machine virtuelle analyse le comportement du
programme et en recompile sélectivement certaines parties. La recompilation dynamique permet d'obtenir de meilleurs résultats que la compilation statique car les compilateurs
dynamiques peuvent optimiser en fonction de leur connaissance de l'environnement cible et des classes qui sont utilisées. La compilation JIT et la recompilation dynamique
permettent à Java de tirer profit de la rapidité du code natif sans perdre la portabilité.
La portabilité est techniquement un objectif difficile à atteindre et le succès de Java en ce domaine est mitigé. Quoiqu'il soit effectivement possible d'écrire des programmes pour la
plateforme Java qui fonctionnent correctement sur beaucoup de machines cibles, le nombre important de plateformes avec de petites erreurs et des incohérences a abouti à un
détournement du slogan de Sun "Write once, run anywhere" ("Ecrire une fois, exécuter partout") en "Write once, debug everywhere" ("Ecrire une fois, déboguer partout") !
L'indépendance de Java vis-à-vis de la plate-forme est cependant un succès avec les applications côté serveur comme les services Web, les servlets et le Java Beans aussi bien que
les systèmes embarqués sur OSGi, utilisant l'environnement Embedded Java.
Mécanisme du ramasse-miettes (Garbage Collector)
Un argument possible à l'encontre de langages comme le C++ est la lourde tâche d'avoir à programmer manuellement la gestion de la mémoire. En C++, la mémoire est allouée
directement par le programmeur pour créer un objet et est désallouée lors de la destruction de celui-ci. Si le programmeur oublie de désallouer la mémoire, ceci peut aboutir à un
manque de mémoire, et le programme consomme petit à petit de la mémoire sans nettoyer derrière lui. Pire encore, si une zone mémoire est désallouée deux fois, le programme
peut devenir instable et aboutir à un plantage.
En java, ce problème est évité grâce au ramasse-miettes (Garbage collector). Les objets sont créés et placés sur un tas. Le programme et les autres objets peuvent faire référence à
l'objet grâce à son adresse sur le tas. Quand il ne reste plus aucune référence vers l'objet, le ramasse-miettes détruit automatiquement l'objet devenu inaccessible, libérant la mémoire
et prévenant ainsi un manque de mémoire. Les manques de mémoire peuvent néanmoins survenir quand un programmeur garde une référence vers un objet dont il n'a plus besoin;
ils continuent à exister, mais uniquement à un niveau concept beaucoup plus élevé. Mais dans l'ensemble, le ramasse-miettes rend la création et la destruction d'objets en Java plus
simple, potentiellement plus sûre et souvent plus rapide qu'en C++.
Le ramasse-miettes est transparent pour le développeur et est appelé régulièrement et automatiquement. Cependant, le programmeur peut au besoin forcer son lancement à l'aide de
18/06/2007 14 11
Java (langage) - Wikipédia
5 sur 10
http://fr.wikipedia.org/wiki/Java_(langage)
la méthode System.gc().
Concepts de Base
Le système Java est basé sur le langage Java, la machine virtuelle Java et l'API Java (ces deux derniers composants forment l'environnement d'exécution, ou JRE, pour Java
Runtime Environment).
Quatre buts primaires présidaient à la création du langage Java. Il devait :
Être orienté objet ;
Être indépendant de la plate-forme du client ;
Contenir des aides et des bibliothèques pour le réseau informatique;
Avoir la capacité d'exécuter du code de source extérieure de façon sécurisée.
Java est habituellement compilé vers une machine virtuelle standardisée, sous forme de bytecode. Cette machine peut fonctionner avec un interpréteur, un compilateur just-in-time
(à la volée), ou, le plus couramment, avec un mélange des deux.
Il existe des variantes de ce schéma :
permettant de compiler le langage Java nativement, c’est-à-dire de produire un exécutable capable de fonctionner hors de l'environnement Java, et même de produire un
exécutable capable de fonctionner dans l'environnement CLR de Microsoft .NET, grâce à la variante J# de Java, créée par Microsoft.
permettant de produire un exécutable Java à partir d'autres langages, comme Python à l'aide du compilateur Jython, ou encore Groovy.
Un langage orienté objet
La première caractéristique, l'orienté objet, se réfère à une méthode moderne de programmation et de conception de langage. Sa principale caractéristique est de rassembler
(encapsuler) en une seule entité logique (Classe) un ensemble de données (Propriétés) et les fonctions qui les traitent (Méthodes). Le code devient ainsi plus facilement réutilisable,
car il est intrinsèquement modulaire.
D'autres mécanismes tels l' héritage permettent d'exploiter toutes les caractéristiques d'une Classe précédemment écrite (la plupart du temps par quelqu'un d'autre) dans ses propres
programmes sans même avoir à en connaître le fonctionnement interne, on n'en voit que l'interface (les principales commandes).
Ce paradigme de programmation vise à rendre les grands projets logiciels plus faciles à gérer, à améliorer la qualité des logiciels et à réduire le nombre d'échecs de projet.
Dans la version 1.5 du langage ont été rajouté les génériques, un mécanisme de polymorphisme semblable (mais différent) aux templates du langage C++ ou aux foncteurs
d'Objective Caml. Les génériques permettent d'exprimer d'une façon plus simple et plus sûre les propriétés d'objets comme des conteneurs (listes, arbres..) : le type liste est alors
considéré génériquement par rapport au type d'objet contenu dans la liste.
Indépendance face à la plate-forme
La seconde caractéristique du langage, l'indépendance vis-à-vis de la plate-forme, signifie que les programmes écrits en Java peuvent fonctionner sur divers types de matériel
informatique sans réécriture, selon le slogan write once, run anywhere (écrire le programme une seule fois, et le faire fonctionner sur n'importe quel ordinateur).
Ceci est permis en compilant le code source d'un programme Java dans un pseudo-code intermédiaire appelé bytecode Java -- des instructions machine standardisées et destinées à
un processeur virtuel. Le code est par la suite exécuté par une implémentation de cette machine virtuelle (JVM), un programme écrit en code natif sur le matériel cible qui traduit le
pseudo-code Java en code utilisable pour le matériel concerné. De plus, des bibliothèques sont offertes pour fournir l'accès à des fonctionnalités propres à la machine cible -- comme
le graphisme ou le réseau -- d'une manière unifiée. Le langage Java offre aussi le support des programmes avec plusieurs processus légers (threads).
La première implémentation du langage utilisait une machine virtuelle pour offrir la portabilité, et plusieurs implémentations le font encore. Ces dernières produisent des
programmes qui fonctionnent plus lentement que les programmes compilés nativement, comme ceux écrits en C. Cette situation a conféré une réputation de lenteur aux
programmes Java. Toutefois, des implémentations plus récentes de la machine virtuelle Java produisent des programmes qui s'exécutent beaucoup plus vite grâce à l'utilisation de
diverses techniques, mais surtout la puissance des machines à partir de 1,5GHz rend les interfaces classiques très confortables. C'est maintenant Javascript qui porte le fardeau de la
lenteur.
La première technique consiste à compiler directement en code natif, comme les compilateurs traditionnels, sans passer par le pseudo-code. Cette méthode permet une meilleure
performance, mais au prix de la portabilité (cf. GCJ). Une autre technique, la compilation à la volée (just-in-time ou JIT), compile le pseudo-code Java en code natif à l'exécution du
programme. Les machines virtuelles plus sophistiquées utilisent également la recompilation dynamique, qui permet à la machine d'analyser le comportement du programme et de
recompiler et d'optimiser les parties critiques. Ces deux techniques permettent à l'application de prendre avantage de la vitesse d'exécution du code natif tout en conservant la
portabilité.
La portabilité est un but techniquement difficile à atteindre, et le succès de Java à ce but est sujet à controverse. Même s'il est en effet possible d'écrire des programmes pour les
machines virtuelles Java qui se comportent de façon cohérente sur différentes plates-formes, le grand nombre de plates-formes avec des petites erreurs ou incohérences a mené à
une parodie du slogan de Sun Write once, run anywhere (écrire une fois, exécuter n'importe où) en Write once, debug everywhere (écrire une fois, déboguer partout).
Les machines virtuelles développées sous licence par Microsoft ne sont pas étrangères à cette réputation. En effet, l'éditeur de Redmond avait singulièrement 'adapté' ses machines
virtuelles à ses besoins propres. Il a été condamné à cesser l'exploitation de la licence et à retirer les machines virtuelles non conformes de ses produits.
Exécution sécurisée de code distant
La plate-forme Java fut l'un des premiers systèmes à offrir le support de l'exécution du code à partir de sources distantes. Une applet peut fonctionner dans le navigateur Web d'un
utilisateur, exécutant du code téléchargé d'un serveur HTTP. Le code d'une applet fonctionne dans un espace très restrictif, ce qui protège l'utilisateur des codes erronés ou mal
intentionnés. Cet espace est délimité par un objet appelé gestionnaire de sécurité. Un tel objet existe aussi pour du code local, mais il est alors par défaut inactif.
Le gestionnaire de sécurité (la classe SecurityManager) permet de définir un certain nombre d'autorisations d'utilisation des ressources du système local (système de fichiers,
réseau, propriétés système,...). Une autorisation définit
1. un code accesseur (typiquement, une applet - éventuellement signée - envoyée depuis un serveur web);
2. une ressource locale concernée (par exemple un répertoire);
3. un ensemble de droits (par exemple lire/écrire).
Les éditeurs d'applet peuvent demander un certificat pour leur permettre de signer numériquement une applet comme sûre, leur donnant ainsi potentiellement (moyennant
l'autorisation adéquate) la permission de sortir de l'espace restrictif et d'accéder aux ressources du système local.
Le langage
Voici un exemple d'un programme Hello world typique écrit en Java :
18/06/2007 14 11
Java (langage) - Wikipédia
6 sur 10
http://fr.wikipedia.org/wiki/Java_(langage)
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
Le fichier source doit s'appeler HelloWorld.java. Vous pouvez le tester avec les commandes suivantes (sous Linux) :
javac HelloWorld.java
CLASSPATH=.
java HelloWorld
La ligne « CLASSPATH=. » est nécessaire pour indiquer à Java qu'il doit également chercher les programmes class dans le répertoire courant. Ce chemin peut également être
spécifié par l'option -classpath (ou -cp en abrégé) :
javac HelloWorld.java
java -cp . HelloWorld
Mots réservés, primitifs et littéraux
abstract
assert (JDK 1.4)
break
case
catch
class
const (Non utilisé)
continue
default
do
else
enum (JDK 1.5)
extends
final
finally
for
goto (Non utilisé)
if
implements
import
instanceof
interface
native
new
package
private
protected
public
return
static
strictfp
super
switch
synchronized
this
throw
throws
transient
try
volatile
while
boolean
byte
char
double
float
int
long
short
void
false
null
true
Structures de contrôle
Les collections d'objets
Il est souvent nécessaire de stocker de nombreuses données dans des collections : liste d'achats, notes des élèves, etc. Les collections peuvent être consultées, modifiées, on peut les
trier, les recopier, les supprimer etc ... Elles peuvent avoir une taille fixe ou variable.
Collections de taille fixe :
Les tableaux :Pour initialiser un tableau d'entiers de 10 cases on écrit: int[] tab = new int[10];Les cases du tableau sont numérotées de de 0 à 9.Plus généralement, un tableau
de taille n, ses cases sont numérotées de 0 à n-1.Un des plus grands avantages des tableaux est l'accés en temps constant O(1), à chaque case du tableau. Pour accéder ou
modifier le iéme élément du tableau, pour 0<= i <n, on écrit tab[i]=2 ; pour attribuer la valeur 2 à la première case du tableau. Pour connaître la taille du tableau on écrit
tab.length;. Si on essaie de modifier une case qui n'existe pas, par exemple tab [11] = 4; on va obtenir le message d'erreur suivant : IndexOutOfBoundsException car notre
tableau tab ne contient que 10 cases.
Collections de taille variable :
ArrayList : pour initialiser une ArrayList il faut importer la Classe java.util.ArrayList ; et écrire liste = new ArrayList(); depuis jdk 1.5 on a la possibilité d’indiquer le type des
éléments contenus dans une ArrayList : entiers, string, etc.
Cette collection est vide après l’appel du constructeur
On peut ajouter autant d’éléments que l’on veut
Pour ajouter un élément on écrit liste.add(Objet);
Pour accéder à un éléments de l'ArrayList : list.get(index);
Pour connaître le nombre d'éléments que contient une liste : liste.size( );
Pour supprimer un élément : liste.remove(index); les éléments qui suivent l'élément supprimés seront décalés à gauche.
Boucles
Structure tant que :
while (<expression booléenne>) {
instruction(s)
}
Structure faire... tant que :
do {
instruction(s)
}
while (<expression booléenne>);
Structure pour :
18/06/2007 14 11
Java (langage) - Wikipédia
7 sur 10
http://fr.wikipedia.org/wiki/Java_(langage)
for (<initialisation> ; <condition de poursuite> ; <expression d'incrémentation>) {
instruction(s)
}
Structure pour (java 1.5):
for(<Objet récupérant l'occurrence suivante de la collection> : <Collection d'objets>){
instruction(s)
}
Structures conditionnelles
Structure si : condition simple
if (<expression booléenne>) {
instruction(s)
}
Structure si... sinon : condition avec alternative unique
if (<expression booléenne>) {
instruction(s)
}
else {
instruction(s)
}
Structure si... ou si... ou si... : condition avec alternatives multiples
if (<expression booléenne>) {
instruction(s)
}
else if (<expression booléenne>) {
instruction(s)
}
else if (<expression booléenne>) {
instruction(s)
}
else {
instruction(s)
}
Structure atteindre... cas x... cas y... " : embranchement vers un bloc d'instructions énuméré
switch (<constante de type numérique>) {
case <constante de type numérique>:
instruction(s)
break;
case <constante de type numérique>:
instruction(s)
break;
[...]
default:
instruction(s)
break;
}
La commande break sort immédiatement la boucle en cours (for, while, do), et permet de sortir d'une clause contenue dans un switch.
Une expression continue termine l'itération en cours et continue à la prochaine. Elle s'écrit comme suit : continue
L'énoncé return termine une méthode.
Avec return
uneValeur,
uneValeur sera renvoyée à la méthode appelante.
Opérateur ternaire ? : : Instruction conditionnelle pouvant être utilisée en une ligne de code
<expression booléenne> ? <valeur si vrai> : <valeur si faux>
Traitement des exceptions
18/06/2007 14 11
Java (langage) - Wikipédia
8 sur 10
http://fr.wikipedia.org/wiki/Java_(langage)
try {
instruction(s)
}
catch (<type d'exception> <variable>) {
instruction(s)
}
[...]
finally {
instruction(s)
}
Le bloc de code "finally" sera exécuté quel que soit le résultat lorsque le programme sortira du bloc "try-catch".
Voici un exemple de capture d'une exception:
FileOutputStream fos = null;
try {
//<-- Créer un flux pour écrire dans un fichier. Le fichier
//n'est pas spécifié puisque ce n'est pas essentiel pour
//l'exemple.
fos = new FileOutputStream(...);
fos.write(a); //'a' aurait reçu une valeur ultérieurement
}
catch (IOException e) {
e.printStackTrace();
}
finally{
//Fermer le flux, qu'il y ait une exception lancée ou pas
if(fos != null) fos.close();
}
Cet exemple permet d'illustrer le mécanisme des exceptions en Java. Dans le cas d'une erreur d'entrée/sortie dans le bloc "try", l'exécution reprend dans le bloc "catch"
correspondant à cette situation (exception de type "IOException"). Dans ce bloc "catch", la variable "e" référence l'exception qui s'est produite. Ici, nous invoquons la méthode
"printStackTrace()" qui affiche dans la console des informations sur l'exception qui s'est produite : nom, motif, état de la pile d'appels au moment de la levée de l'exception et,
éventuellement, numéro de ligne auquel l'erreur s'est produite. Le bloc finally est ensuite exécuté (ici pour refermer les resources utilisées). Il ne s'agit ici que d'un exemple, l'action
à mettre en œuvre lorsqu'une exception survient dépend du fonctionnement général de l'application et de la nature de l'exception.
Code lent / exception
Contrairement à ce que l’on pourrait penser, lever une exception n’est pas lent. Au contraire, cela « accélère » le code.
Par exemple, entre tester une condition : if(condition1 == null) et rattraper une exception, il est préférable de rattraper l’exception !
Ce qui est gênant est le fait de générer l’exception en soi (stack, message…).
Le ratio (selon boucles sur 100 millions de tests) semble être aux alentours de 1/20 000.
Aussi, il coûte plus cher de rattraper une exception à partir du moment où le risque d’avoir une exception est supérieur à 1/20 000 (tests réalisés en environnement JDK 1.4.2_03,
Eclipse 3.0, Pentium 4 3,0 GHz ; aucun traitement effectué dans le catch).
encodage du source
Les spécifications du langage Java précisent qu'il est formé de caractères au format UTF-16, ce qui permet l'utilisation dans le code source de tous les caractères existant dans le
monde :
你好世界 {
文本 = "你好世界";
public class
private string
}
Pour assurer la portabilité entre plateformes, les noms de classes devraient néanmoins être formés uniquement de caractères ASCII.
JavaStyle
Les JavaStyle sont des conventions de programmation en langage Java définies par Sun. Le respect de conventions strictes assure une homogénéité dans le code source d'une
application développée par toute une équipe et favorise la diffusion du code source auprès d'une communauté partageant les mêmes conventions de codage.
Versions
Java est une marque déposée de Sun Microsystems. Kits de développement Java (Java development kit ou JDK) publiés par Sun, utilisables gratuitement :
JDK 1.0, 1996
JDK 1.1, 1997
JDK 1.2, 1998 dite Java 2
JDK 1.3, 2000
JDK 1.4, 2002 (http://java.sun.com/j2se/1.4.2/download.html)
JDK 1.5, 2004 (http://java.sun.com/j2se/1.5.0/) dite Java 5.0 (nom de code Tiger)
JDK 1.6, 2006 (https://jdk6.dev.java.net) dite Java SE 6.0 (Mustang)
Le langage est stable depuis le JDK 1.0 ; les bibliothèques de classes fournies se sont agrandies et ont changé en partie. À partir de la version 1.2, les JDK ont été renommés en
J2SDK (Java 2 Software Development Kit, kit de développement de logiciels Java 2) et on appelle souvent ces versions Java 2.
Du fait de l'accroissement des bibliothèques et des changements entre version, la compatibilité est assurée dans un seul sens : les programmes Java compilés avec une version
18/06/2007 14 11
Java (langage) - Wikipédia
9 sur 10
http://fr.wikipedia.org/wiki/Java_(langage)
antérieure du JDK (par exemple 1.2) continueront à fonctionner avec un JRE plus récent (par exemple 1.5), mais le contraire n'est pas vrai.
Licence
Le 11 novembre 2006, le code source du compilateur javac et de la machine virtuelle HotSpot ont été publiés en Open Source sous la Licence publique générale GNU
2
Le 13 Novembre 2006, Sun Microsystems annonce que tout le code source de Java sera publié en Open Source sous la Licence publique générale GNU d'ici mars 2007 sous le nom
3
de projet OpenJDK .
Frameworks et API
Sun fournit un grand nombre de frameworks et d'API afin de permettre l'utilisation de Java pour des usages très diversifiés. On distingue essentiellement 4 grands frameworks :
J2SE : Ce framework est destiné aux applications pour poste de travail. En théorie, on doit désormais parler de Java SE.
J2EE : Ce framework est spécialisé dans les applications serveurs. Il contient pour ce faire un grand nombre d'API et d'extensions. En théorie, on doit désormais parler de Java
EE.
J2ME : Ce framework est spécialisé dans les applications mobiles.
JavaCard : Ce framework est spécialisé dans les applications liées aux cartes à puces et autres SmartCards
La persistance est basée sur les standards :
JDBC
JDO (Java Data Objects)
EJB (Enterprise Java Beans)
On trouve toutefois de nombreuses autres technologies, API et extensions optionnelles pour Java :
JavaMedia : Framework multimédia, contenant notamment les API Java2D, Java3D, JavaSound, Java advanced Imaging
Java Telephony
Java TV
JXTA : Système de peer-to-peer reposant sur Java
Jini
JAIN
JDMK
JavaSpeech
JMI
JavaSpaces
Version interprétée
Il existe plusieurs versions interprétées de Java (langages de scripts s'exécutant sur une JVM): beanshell et Groovy font l'objet de standardisations au sein du JCP (Java Community
Process). Jython, JRuby, Jacl (Tcl) et d'autres langages de scripts proposent des langages sur ce même principe. L'interpréteur de ces langages peut être embarqué dans une
application Java pour la rendre scriptable. À noter qu'à partir de Java 6, le moteur Rhino (JavaScript) est embarqué dans la JRE.
Un exemple avec Jython
Pour la réalisation de prototype, d'interface graphique, de fichier XML,... ou pour l'apprentissage du JDK, il est possible de coder en Java par script avec Jython
from java.applet import Applet
class HelloWorld(Applet):
def paint(self, g):
g.drawString("Hello from Jython!" 20, 30)
Appellation
Oak ("Chêne") est le nom donné à Java dans un premier temps mais celui-ci était déjà utilisé. Une des théories de son appellation :
Java en l'honneur du nom argotique (en Amérique du Nord) du breuvage le plus consommé par les développeurs, c'est-à-dire le café, dont une partie de la production vient de
l'île de Java.
On peut remarquer qu'en décalant d'une lettre chaque consonne on obtient kawa qui est aussi un nom argotique pour café (provenant de l'arabe ‫ ة‬qahwa) !
Programmation
La programmation peut se faire pour des exemples simples avec le compilateur javac, mais pour avoir plus de confort il est préférable d'utiliser un environnement de
développement intégré ou IDE, certains sont gratuits.
Environnements existants
BlueJ (http://www.bluej.org)
CodeWarrior
Eclipse
Idea (http://www.jetbrains.com/idea/)
JBuilder (http://www.borland.com/jbuilder/)
JCreator (http://www.jcreator.com)
NetBeans
jDeveloper (http://www.oracle.com/technology/products/jdev/index.html)
Xcode
Construction
Un programme Java peut être produit avec des outils qui automatisent le processus de construction. Les plus utilisés sont :
Ant (génération portable en XML)
Scons (génération portable de Java/C/C++). exemple:
18/06/2007 14 11
Java (langage) - Wikipédia
http://fr.wikipedia.org/wiki/Java_(langage)
Java(target = 'classes', source = 'src')
Jar(target = 'test.jar', source = 'classes')
Resultats
% scons -Q
javac -d classes -sourcepath src src/Exemple1.java src/Exemple2.java src/Exemple3.java
jar cf test.jar classes
Voir aussi
Articles connexes
API Java
Bluejay
Machine virtuelle Java
Bytecode Java
Java et logiciel libre
Servlet
Javapolis
BeJUG
Navigateur HotJava
GNU Compiler Collection (inclut un compilateur de code Java vers code natif, GCJ)
Liens externes
Catégorie Java (http://dmoz.org//World/Français/Informatique/Programmation/Langages/Java/) de l'annuaire dmoz.
Site Web officiel de Java pour les utilisateurs (http://www.java.com)
(en) Site collaboratif officiel pour Java (http://www.java.net/) , avec un wiki
(en) Site Web officiel de Java pour les développeurs (http://java.sun.com)
(en) Document de présentation original de Java (http://java.sun.com/docs/white/langenv/)
(en)
Bibliographie
Ken Arnold, James Gosling et David Holmes (2001), Le langage Java, ISBN 2-7117-8671-4
Bruce Eckel, (2002), Thinking in Java, Prentice-Hall, ISBN 0-13-100287-2. version téléchargeable (http://www.mindviewinc.com/downloads/TIJ-3rd-edition4.0.zip) version
électronique en ligne (ftp://ftp.irisa.fr/pub/mirrors/Java/index.html) traduction francophone : penser en java (http://penserenjava.free.fr/)
Alexandre Brillant (2006), Java 5, ISBN 2-7460-3170-1.version disponible en ligne
(http://www.editions-eni.fr/Livres-JaVa-5----Java-2-JDK-5-0---J2SE-5--Entrainez-vous-et-maitrisez-le-langage.6_3a6222cf-b921-41f5-886c-c989f77ba994_0_f44944b3-8065-474d-bec4-f5
Java (Sun)
Les principales technologies: le langage java | la plateforme Java | le JDK | la machine virtuelle Java (JVM) | l'environnement d'exécution Java (JRE)
L'historique: Java version history | Criticism of Java | Java Community Process | Sun Microsystems
Les caractéristiques du langage : le bytecode | la syntaxe | les applets | les servlets | JavaServer Pages
Portail de l'informatique – Accédez aux articles concernant l’informatique.
Récupérée de « http://fr.wikipedia.org/wiki/Java_%28langage%29 »
Catégories : Article à recycler • Langage de programmation • Langage orienté objet • Java
10 sur 10
Dernière modification de cette page le 13 juin 2007 à 21:54.
Copyright : Tous les textes sont disponibles sous les termes de la licence de documentation libre GNU (GFDL).
Wikipedia® est une marque déposée de la Wikimedia Foundation, Inc., association de bienfaisance régie par le paragraphe 501(c)(3) du code fiscal des États-Unis.
18/06/2007 14 11