JAVA Jean-Jacques LE COZ
Présentation Langage de l'éditeur Sun Microsystems Divisé en trois parties Java standard SDK Java Entreprise J2EE Java Micro Edition J2ME S'exécute en environnement géré Machine virtuelle Java (JVM) Serveur d'application
Licence Logiciel Open source Depuis toujours Logiciel Libre Depuis le 13 novembre 2006 Deux licences Licence GPL V2 (GNU Public Licence) Licence GPL V2 Classpath Exception GPL Licence de la Free Software Foundation
JVM (Java Virtual Machine) Concept de machine virtuelle Le code source est compilé Le compilateur produit le bytecode stream dans des fichiers.class Ce code a pour nom Java bytescode Il est portable dans toute JVM Ce code est exécuté par la JVM La JVM isole l'environnement d'exécution de la plateforme Les JVM sont spécialisées par plateforme
Procédure de compilation et d'exécution Code source Java Fichier.Class Java Compilation Java Fichier.Class Java Interprétation Java... Exécution Tâche 1 Tâche 2 Tâche N
Versions de JDK Première version v1.0 en 1996 Version actuelle v1.5 ou 5.0 dite Tiger Prochaine version dite Mustang v1.6 ou 6.0 Versions précédentes v1.2 (ajout de la librairie swing) v1.3 v1.4
Atouts du langage Java Orienté objet Portable Possède un grand nombre de librairies Sécurisé Performant Ouvert et libre Fédère et dynamise une grande partie de l'industrie Étendue de ses applications
Commentaires int x ; // une ligne de commentaire /* un autre commentaire */ /** un commentaire javadoc */ Le langage Java est fourni avec un mécanisme de production automatique de documentation en HTML
Définition de variables Syntaxes possibles ;, ; = ; Exemples int x; int x = 9; boolean sentinelle = false; Personne personne = new Personne();
Affectation ou assignation Syntaxe = ; Exemples int x = 4; x = 9; temperature = 21.5 Personne p = new Personne();
Type abstrait de données Défini par le programmeur En Java, tout est classe Définition d'une classe public class Chien { public void aboyer() { System.out.println(''Ouaf''); }
Invocation des méthodes Syntaxes pour l'invocation. () ; =. ( ) ; Exemple unchien.aboyer();
Définition des méthodes Syntaxes Avec valeur retournée ( ) { } Sans valeur retournée void ( ) { }
Précisions sur les méthodes Signature de méthode Le nom et les arguments participent à la signature de la méthode Deux méthodes ayant le même nom et pas la même signature sont dites surchargées (method overloading) Impossibilité Deux méthodes ne peuvent avoir le même nom et les mêmes arguments avec un type retour différent
Allocation dynamique de mémoire Avec l'opérateur new Syntaxe variable = new ( ) Création d'instances de classes Exemple Personne p = new Personne();
Application Java Une application Java consiste en : Un ou plusieur fichiers.class Un programme avec un début et une fin Définis dans une méthode main() Début : main() Fin : exit() public class SimpleProgramme { public static void main(String[ ] args) { System.out.println(''Bonjour Le Monde''); System.exit(0); }
Application avec une classe public class Main { public static void main ( String[ ] args ) { Chien unchien = new Chien() ; unchien.aboyer() ; System.exit() ; }
Le « Tas » d'exécution JVM Main.class Chien.class main() { instance de Chien TAS (HEAP) Chien chien = new Chien() ;
Autre exemple public class Chien { private String message = new String(''Ouaf, ouaf''); public void aboyer() {System.out.println(message); } public static void main(String[] args) { Chien unchien = new Chien(); }
Le « Tas » d'exécution JVM Main.class Chien.class main() { instance de Chien TAS (HEAP) Chien chien = new Chien() ; instance de String
Types de donnée primitifs
Les Wrappers de type primitif Classes de la librairie java.lang String Double Boolean Float Integer...
Structures de contrôle
Opérateurs de comparaison Les mêmes que pour le C/C++ < inférieur <= inférieur ou égal > supérieur >= supérieur ou égal ==égal !=différent
Opérateurs logiques Identiques au C/C++ sauf qu'il est impossible d'utiliser une variable non booléenne comme si elle en était une. Opérateurs &&le « et » logique (short circuit) ||le « ou » logique (short circuit) Les opérateurs logiques produisent une valeur booléenne
Structures itératives
Contrôle à l'intérieur des itérations La commande break Arrête l'itération et sort de la boucle La commande continue Force à passer à l'itération suivante
Opérateurs multifonction ++incrémente de 1 -- décrémente de 1 +=incrémente par la rvalue spécifiée -=décrémente par la rvalue spécifiée *= multiplie par la rvalue spécifiée /=divise par la rvalue spécifiée %=divise par la rvalue spécifiée et renvoie le reste entier de la division
Exemples
Le cas particulier des chaînes de caractères La classe String Fait partie du package java.lang.String Possède un grand nombre de méthodes Pour manipuler les chaînes de caractères Java offre une facilité de création String chaine1 = new String(''abcd'') ; String chaine2 = ''abcd'' ; Java offre une facilité de manipulation Le signe « + » convertit et concatène
Passage des variables aux méthodes Pour les types primitifs Le passage se fait par valeur (call by value) Pour les type abstraits (classes) Le passage se fait par référence (call by reference) Chien bruno = new Chien() ; bruno.nom = ''bruno''; System.out.println(bruno) ;
Valeurs d'initialisation
Expressions Java évalue une expression de la gauche vers la droite Les parenthèses servent à contrôler l'ordre de l'évaluation Exemples int x = (4 + 32) / (2 + 1); // x == 12 new Chien().aboyer();
Gestion des exceptions Les exceptions sont des objets Java Elles dérivent de java.lang.Throwable Bloc try/catch Encadre du code susceptible de lever une exception Bloc finally Exécuté après la levée des exceptions Exceptions throws Filtre entièrement tout le code d'une méthode
Classes intéressantes du paquetage java.lang La classe Math Méthodes ceil(), floor(), max(), min(), random(), abs(), round(), sin(), cos(), tan(), and sqrt() La classe StringBuffer
Processus fins : threads Les threads sont des objets en Java Il suffit d'étendre la classe java.lang.Thread Ou d'implémenter l'interface Runnable La méthode run() doit être implémentée États des threads New, Runnable, Running, Alive, Waiting, Blocked, Dead
Ramasse miettes Garbage collection Supprime les objets non référencés de la JVM Automatiquement exécuté par la JVM Peut être désactivé ou paramétré au lancement de la JVM Peut être appelé explicitement dans un programme Java System.gc() ou Runtime.getRuntime().gc()
Variables d'environnement Le chemin jusqu'aux commandes Java La variable PATH export PATH=/usr/java/jdk5/bin:$PATH Le chemin jusqu'aux ressources d'une application La variable CLASSPATH export CLASSPATH=./:/home/dupont/projet Ressources Les classes de l'application Les classes nécessaires à la compilation Les classes nécessaires à l'exécution
Références The Java Language Specification, Gosling, J., Joy, B., and Steele, G. Addison- Wesley, 2000, ISBN Java in a Nutshell, Flanagan, D. O'Reilly & Associates, 1999, ISBN Core Java 2, Volume I - Fundamentals, Horstmann, C.S. and Cornell, G. Prentice Hall, 1999, ISBN Core Java 2, Volume II - Advanced Features, Horstmann, C.S. and Cornell, G. Prentice Hall, 2000, ISBN Sun Microsystem's Java tutorial