Présentation de Java Olivier de Pertat
Qu'est-ce que Java ? Un langage de programmation orienté objets Une architecture de Virtual Machine Un ensemble d'API variées Un ensemble d'outils : le Java Runtime Enviromnent le Java SDK Standard Edition le Java SDK Entreprise Edition
Historique 1991 : Sun "Green Projet" (informatisation de l’électronique grand public) 1993 : projet Oak (langage embarqué indépendant CPU) 1994 : recentrage sur Internet, réalisation d’un browser en Oak 1995 : Mai 95 : Java (23 mai). WebRunner -> HotJava Mai 95 : Netscape prend la licence Sept. 95 : JDK 1.0 b1 (200 Classes) Déc. 95 : Microsoft se dit intéressé Début des API spécialisées (multimédia, commerce) et JavaComputing (JavaOS…)
Historique 1996 : Java Classes Janv. 96 : JDK Eté 96 : Java Study Group ISO/IEC JTC 1/SC22 Fin 96 : RMI, JDBC, JavaBeans, : JDK 1.1 – nouveaux services quelques modifications du langage : Plateforme Java 2 - JDK classes – consolidation vers maturité 2000 : Plateforme Java 2 – version 1.3 : amélioration des performances, incorporation d’extensions dans le noyau 2002 : Plateforme Java 2 – version 1.4.1
Principe de compilation C
Principe de compilation Java
Principe : Code Source $ cat Hello.java public class Hello { public static void main(String [] args) { System.out.println("Hello World !"); }
Principe : Byte Code $ od -x Hello.class feca beba e00 1d00 000a f a c06 6e e f c0f 6e69 4e d c d e b28 6a4c f61 616c 676e f e69 3b a 756f c a c6c 2e6f a c c c c6c f 646c c1a 1b00 1c [………EOF…]
Les points faibles de Java Les JVM sont beaucoup plus lentes que du code C compilé ; Java est très gourmand en mémoire ; Certaines constructions du langage sont décevantes ; Certaines API sont décevantes ; Java est extrêmement vaste ; Java est tributaire de son évolution rapide.
Les caractéristiques du langage Java Orienté objets Interprété Portable Simple Robuste Sécurisé Multi-threads Distribué
Un langage orienté objets Tout est classe (pas de fonctions) sauf les types primitifs (int, float, double,...) et les tableaux Toutes les classes dérivent de java.lang.Object Il respecte : l’encapsulation, communication par message, polymorphisme et hérite Les objets se manipulent via des références Une API objet standard est fournie La syntaxe est proche de celle de C
Java est portable Le compilateur Java génère du byte code. La Java Virtual Machine (JVM) est présente sur Unix, Win32, Mac, OS/2, Netscape, IE,... Le langage a une sémantique très précise. La taille des types primitifs est indépendante de la plate-forme. Java supporte un code source écrit en Unicode. Java est accompagné d'une librairie standard.
Java est robuste A l’origine, c'est un langage pour les applications embarquées. Gestion de la mémoire par un garbage collector. Pas d’accès direct à la mémoire. Mécanisme d'exception. Accès à une référence null ® exception. compilateur contraignant (erreur si exception non gérée, si utilisation d’une variable non affectée,...). Tableaux = objets (taille connue, débordement ® exception). Seules les conversions sûres sont automatiques. Contrôle des cast à l'execution.
Java est sécurisé Indispensable avec le code mobile. Pris en charge dans l'interpréteur. Trois couches de sécurité : Verifier : vérifie le byte code. Class Loader : responsable du chargement des classes. Security Manager : accès aux ressources. Code certifié par une clé.
Java est multi-thread Intégrés au langage et aux API : synchronized garbage collector dans un thread de basse priorité java.lang.Thread, java.lang.Runnable Accès concurrents à objet gérés par un monitor. Implémentation propre à chaque JVM. Difficultés pour la mise au point et le portage.
Java est distribué API réseau (java.net.Socket, java.net.URL,...). Chargement / génération de code dynamique. Applet. Servlet. Protocole / Content handler. Remote Method Invocation. JavaIDL (CORBA).
Les performances Actuellement le byte code est interprété. Plusieurs types de génération de code machine : Compilation en code machine à la volée (JIT, HotSpot) ; Machine Virtuelle spécifiques aux Application Servers commerciaux ; Conversion statique en C (j2c, Tabo,...) ; Conversion statique en code natif.
Les différences avec C++ Pas de structures ni d’unions Pas de types énumérés Pas de typedef Pas de préprocesseur Pas de variables ni de fonctions en dehors des classes Pas de fonctions à nombre variable d’arguments Pas d'héritage multiple de classes Pas de types paramétriques (template) Pas de surcharge d’opérateurs Pas de passage par copie pour les objets Pas de pointeurs, seulement des références
Les fausses rumeurs sur Java Java n'a rien de commun avec HTML Java n'est pas un langage de script (type Perl ou TCL) Le JavaScript n’est pas du Java ! Java est un langage généraliste type C++ Java != C++ (c'est un langage purement objet, de plus haut niveau, plus proche de SmallTalk)
Les outils Environnements de développement : Java 2 standard edition SDK 1.4.x Editeur de texte : VIM, java-mode emacs, Ultra Edit, JEdit Environnements de compilation : ANT, make Outils de test : JUnit IDE : Forte, JBuilder, Visual Age, WebGain, CodeWarrior Atelier UML : Together, Rational Rose Décompileur de byte-code : jad Browsers : Sun HotJava Netscape Navigator 4 et 6 Internet Explorer 4 et 5 (plus pour la prochaine version) Java-Plug-in (tous les browsers)
Java 2 Standard Edition SDK 1.4 javac : compilateur de sources java java : interpréteur de byte code (JVM) appletviewer : interpréteur d'applet jar : fabrique les fichier distribuables (bin & lib) jarsigner : signatures numérique des fichiers JAR javadoc : générateur de documentation (HTML, MIF) javah : générateur de header pour l'appel de méthodes natives javap : désassembleur de byte code jdb : debugger keytool : gestion des clefs et des certificats orbd :ORB Corba rmic : compilateur de stubs RMI rmiregistry : "Object Request Broker" RMI servertool : Outil d’administration du bus CORBA
Les options de la JVM C:\>java Usage: java [-options] class [args...] (to execute a class) or java -jar [-options] jarfile [args...] (to execute a jar file) where options include: -client to select the "client" VM -server to select the "server" VM -hotspot is a synonym for the "client" VM [deprecated] The default VM is client. -cp -classpath set search path for application classes and resources -D = set a system property -verbose[:class|gc|jni] enable verbose output -version print product version and exit -showversion print product version and continue -? -help print this help message -X print help on non-standard options -ea[:...|: ] -enableassertions[:...|: ] enable assertions -da[:...|: ] -disableassertions[:...|: ] disable assertions -esa | -enablesystemassertions enable system assertions -dsa | -disablesystemassertions disable system assertions C:\>java -X -Xmixed mixed mode execution (default) -Xint interpreted mode execution only -Xbootclasspath: set search path for bootstrap classes and resources -Xbootclasspath/a: append to end of bootstrap class path -Xbootclasspath/p: prepend in front of bootstrap class path -Xnoclassgc disable class garbage collection -Xincgc enable incremental garbage collection -Xloggc: log GC status to a file with time stamps -Xbatch disable background compilation -Xms set initial Java heap size -Xmx set maximum Java heap size -Xss set java thread stack size -Xprof output cpu profiling data -Xrunhprof[:help]|[: =,...] perform JVMPI heap, cpu, or monitor profiling -Xdebug enable remote debugging -Xfuture enable strictest checks, anticipating future default -Xrs reduce use of OS signals by Java/VM (see documentation) -Xcheck:jni perform additional checks for JNI functions
Intégration Windows
Intégration Internet Explorer
Exécutables Java Applications autonomes classiques (Stand Alone applications) Applications sont directement exécutées depuis le système hôte. Possèdent une méthode main Signature : public static void main(String [] args) Composants : Programme hébergé par une autre application. Respecte un protocole défini au préalable (Interfaces). Applets : application Java s’éxecutant au sein d’une page WEB dans un navigateur Internet (Internet Explorer, Mozilla, Netscape … ) ; Servlets : application Java traitant des requêtes client dans un serveur d’application. But généraliste, mais le plus traite des requêtes HTTP. EJB (Entreprise Java Bean) : Application Java Distribuée reflétant l’état d’une session utilisateur (Session Bean), d’une donnée (Entity Bean) ou d’un message (Message Driven Bean). Composant géré par uniquement par des Serveurs d’application Java. Peuvent être transactionnels
Application Autonome Programme Java : Exemple : class HelloWorld { public static void main(String args) { System.out.println("Hello World !"); } Invocation classique : $ java -classpath. HelloWorld Hello World !
Exécutables Java (2/2) Applet : exécution dans un Navigateur Internet public class HelloWorldApplet extends Applet { public void paint(Graphics g) { g.drawString("Hello World !", 50, 20); } Servlet : exécution dans un serveur d’application (Web Container) public class HelloWorldExample extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { out.println(" Hello world ! "); }
JAR Invocation depuis une Archive JAR : $ cat MANIFEST.MF Manifest-Version: 1.0 Main-Class: HelloWorld $ jar cfm MyHelloPack.jar MANIFEST.MF HelloWorld.class $ jar –i MyHelloPack.jar $ java -jar MyHelloPack.jar Hello World !
Rendre exécutable les JAR FICHIER JARFile.reg : Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\JARFile] "EditFlags"=dword: Java ARchive (exécutables)" Files\\Java\\j2re1.4.1\\bin\\jinstall.exe,0" [HKEY_CLASSES_ROOT\JARFile\shell\open] -jar \"%1\""