Plan
• Introduction
• Syntaxe de base p.17
– Variables, types, portée p.19
– Opérateurs p.49
– Instructions de contrôle p.65
– Fonctions p.81
– Entrées-sorties standards p.97Programmation
– Programme, compilation, exécution p.105
• Classes p.113avec le langage
• Paquetages, import, javadoc… p.137Java
• Héritage p.153
• Interfaces p.177
• Exceptions p.193
Norbert KAJLER, Fabien MOUTARDE
• Programmation générique (“generics”) p.209
CCSI • Threads p.225
• Paquetages standards p.241Mines ParisTech
– java.lang p.243
e-mails : Norbert.Kajler@mines-paristech.fr ;
– Entrée-sorties : paquetage java.io p.273Fabien.Moutarde@mines-paristech.fr
– Collections, (+ dates, …) : java.util p.289
– Graphisme : java.awt, javax.swing p.321
– Programmation réseau : java.net p.385
– Programmation distribuée : java.rmi p.393
– Accès bases de données : java.sql p.401
– Les JavaBeans p.409
Cours langage Java — N. Kajler, F. Moutarde — CCSI dernières modifications : 09/09/2010 2
Les langages de programmation
• Niveaux et catégories de langages :
– langage binaire
– assembleur : instructions de base du
processeur (transferts entre registres,
addition, …)
INTRODUCTION
– langages impératifs
Basic, Fortran, Pascal, C, ...
– langages fonctionnels
Lisp, Caml, ...
– langages orientés-objet
SmallTalk, C++, Java,...
Avertissement :
Ceci n'est PAS un polycopié, mais une
simple copie de transparents, prévue pour
faciliter le suivi des cours et la prise de
notes manuscrites complémentaires.
Cours langage Java — N. Kajler, F. Moutarde — CCSI dernières modifications : 09/09/2010 3 Cours langage Java — N. Kajler, F. Moutarde — CCSI dernières modifications : 09/09/2010 4Historique de Java Historique de Java (2)
• Initialement, projet de la société Sun pour • 1996 : Java 1.0
l'électronique grand public (1991) • 1997 : Java 1.1
• Transformé en langage pour le Web, sous – Modification du modèle des événements pour
le nom de "Java", grâce à sa portabilité AWT, JDBC, RMI, ...
(1994/95) • 1998 : Java 1.2
(renommé Java2 version 1.2 ou J2SE 1.2)• Lancement officiel en mai 1995
– Collections, Swing, Java2D, …• Après l'engouement pour les applets, Java
est reconnu progressivement comme un • 2000 : version 1.3 (ou « Kestrel » ou J2SE 1.3)
langage à part entière • 2002 : v.1.4 (ou « Merlin » ou J2SE 1.3)
• Langage de programmation sans doute le – XML parser, Image API, …
plus utilisé aujourd’hui : • 2004 : v.1.5 (ou « Tiger » ou J2SE 5.0 !!)
– des millions de développeurs Java – généricité (proche des templates de C++), types
énumérés, autoboxing/unboxing des types – nombreux outils de développement
primitifs dans les collections, web services, ...
– 6 milliards d’objets avec une « machine
• 2006 : v.1.6 (ou « Mustang » ou Java SE 6)virtuelle Java », dont 85% des
– améliorations des performances (Swing téléphones portables et 91% des
notamment), interactions avec scripts (PHP, ordinateurs (chiffres 2008)
Python, Ruby, JavaScript), Java DB…
• fin’2010 : v.1.7 (ou « Dolphin » ou Java SE 7)
Cours langage Java — N. Kajler, F. Moutarde — CCSI dernières modifications : 09/09/2010 5 Cours langage Java — N. Kajler, F. Moutarde — CCSI dernières modifications : 09/09/2010 6
Intérêt de Java Caractéristiques de Java
• logiciels portables
• Un langage orienté-objet :
• programmes fiables – portable
(rigueur du langage => peu de bogues)
– compilé puis interprété
• développement rapide (bytecode+JVM)
• pages Web intéractives (via les "applets") – robuste (typage fort, pas de pointeurs,
garbage collector)• logiciels (ou briques logicielles)
téléchargeables, éventuellement
– modulaire (packages)
automatiquement
– intégrant le multi-threading• gestion de la sécurité (par défaut, accès
restreint aux ressources locales pour les
applets)
• une énorme librairie de classes standards
Cours langage Java — N. Kajler, F. Moutarde — CCSI dernières modifications : 09/09/2010 7 Cours langage Java — N. Kajler, F. Moutarde — CCSI dernières modifications : 09/09/2010 8Java et les autres langages JRE, Java SE, JDK, Eclipse, …
• Java est très proche de C++ • Plusieurs implantations disponibles du langage
Java, dont celles d’origine SUN (créateurs du
• syntaxe de base identique à C et C++ langage)
• Pour exécuter du code Java : le « JRE » (Java • simplifications de Java (par rapp. à C++) :
Runtime Environment) de SUN suffit (gratuit et
– pas de manipulation de pointeurs sous forme
largement disponible)
d’adresse mémoire, gestion mémoire
• Pour créer/compiler du code java : le « Java SE »automatique (garbage collector)
(Standard Edition) dénommée aussi « JDK »
– pas de surcharge des opérateurs
(Java Development Kit) de SUN (gratuit)
– pas d'héritage multiple contient :
– pas de préprocesseur – compilateur (javac)
– interpréteur / machine virtuelle (java)
• principaux ajouts (par rapport à C++) : – toute la librairie de classes standards
– tableaux avec test de dépassement de bornes – divers outils : génération doc (javadoc),
– chaînes de caractères sous forme de classe visualisation d'applet (appletviewer),
debugger (jdb), ...– notion d'interface
– classe racine 'Object’, introspection
• Nombreux outils de développement dont la – structuration en paquetages
plateforme « Eclipse » (gratuite)
– multi-threading incorporé
• Les sources de Java sont disponibles gratuitement
– vaste bibliothèque de classes
(code de toutes les classes prédéfinies)
Cours langage Java — N. Kajler, F. Moutarde — CCSI dernières modifications : 09/09/2010 9 Cours langage Java — N. Kajler, F. Moutarde — CCSI dernières modifications : 09/09/2010 10
Cours langage Java — N. Kajler, F. Moutarde — CCSI dernières modifications : 09/09/2010 11 Cours langage Java — N. Kajler, F. Moutarde — CCSI dernières modifications : 09/09/2010 12Cours langage Java — N. Kajler, F. Moutarde — CCSI dernières modifications : 09/09/2010 13 Cours langage Java — N. Kajler, F. Moutarde — CCSI dernières modifications : 09/09/2010 14
Cours langage Java — N. Kajler, F. Moutarde — CCSI dernières modifications : 09/09/2010 15 Cours langage Java — N. Kajler, F. Moutarde — CCSI dernières modifications : 09/09/2010 16Premier exemple
• Quelques lignes d’instruction en Java :
déclarationsint i, somme;
somme = 0; affectation
for (i=1; i<=9; i++)
boucle
somme = somme+i;
• Un programme en Java :
structure essentielle :SYNTAXE DE BASE
class Prog { classe
public static void main(String [] args){
int i, somme; Programme principal
somme = 0;
for (i=1; i<=9; i++)
somme += i;
System.out.println(somme);
}
}
Cours langage Java — N. Kajler, F. Moutarde — CCSI dernières modifications : 09/09/2010 17 Cours langage Java — N. Kajler, F. Moutarde — CCSI dernières modifications : 09/09/2010 18
Variables et types
• notion de variable :
nom (identificateur) + type + zone
mémoire
VARIABLES, TYPES, PORTEE,
COMMENTAIRES, … • en Java, deux grandes catégories de types :
– types "primitifs" (entiers, flottants, …)
– références à des types "composites" :
• Tableaux
• Enumérations
• Objets
• Interfaces
Cours langage Java — N. Kajler, F. Moutarde — CCSI dernières modifications : 09/09/2010 19 Cours langage Java — N. Kajler, F. Moutarde — CCSI dernières modifications : 09/09/2010 20fi
p
Booléens : booleanTypes "primitifs"
• boolean • 2 valeurs : true ou false
• véritable type
• char (16-bit, Unicode)
• type retourné par les opérateurs de
• byte : entier (signé) 8-bit comparaison
• short : entier (signé) 16-bit • type attendu dans tous les tests
• int : entier (signé) 32-bit
• ne peut PAS être converti en entier
• long : entier (signé) 64-bit
• float : flottant (IEEE 754) 32-bit
• double : flottant (IEEE 754) 64-bit
Cours langage Java — N. Kajler, F. Moutarde — CCSI dernières modifications : 09/09/2010 21 Cours langage Java — N. Kajler, F. Moutarde — CCSI dernières modifications : 09/09/2010 22
Entiers Caractères : char
• 16-bit => 65536 valeurs : presque tous les • littéraux de type entier :
caractères de toutes les écritures !– en base dix : 139
• ne sont affichables que si le système possède – en octal : 0213
les polices de caractères adéquates !
– en hexadécimal : 0x8b
• littéraux entre simples quotes : 'a' 'Z'
• caractères spéciaux : • L ou l pour spéficier un long : 139L
'\n' '\t' '\b' '\\' ...
• valeurs min/max :
• possibilité d’utiliser la valeur Unicode :
–byte = [-128; +127] par exemple '\u03c0' pour
–short = [-32768 ; +32767]
• test du type : Character.isLetter(c),
–int = [-2.147.483.648 ; Character.isDigit(c), … (oùc est une
+2.147.483.647] variable de type char)
18 18–long = [-9,223... 10 ; +9,223... 10 ]
• convertible automatiquement en int ou
• conversion automatique seulement vers long (et manuellement en byte ou
les types entiers plus grands short)
(int long, etc...) et vers les types
• inversement, (char)val est le caractère
flottants
dont le code Unicode est l'entier val
Cours langage Java — N. Kajler, F. Moutarde — CCSI dernières modifications : 09/09/2010 23 Cours langage Java — N. Kajler, F. Moutarde — CCSI dernières modifications : 09/09/2010 24fi
»
Flottants Constantes
• notation "ingénieur" : 2.45e-25 • variable dont la valeur ne peut plus être
changée une fois fixée• littéraux de type double par défaut :
float x = 2.5; //Erreur • se déclare avec le mot-cléfinal :
double y = 2.5; //OK final double PI = 3.14159;
• f ou F pour spécifier un float : ce qui interdit d’écrire ensuite…
float x = 2.5f; PI = 3.14; //ERREUR…
• valeurs min/max de valeur absolue (hors 0) :
– float =[1.40239846e-45;3.40282347e+38]
• possibilité de calculer la valeur de la
– double = [4.9406...e-324 ; 1.7976...e+308]
constante plus tard à l'exécution, et
• conversion automatique :
ailleurs qu'au niveau de la déclaration :
seulement float double
• la conversion "manuelle" en entier tronque final int MAX_VAL;
la partie décimale : //OK : constante "blanche"
float x=-2.8f;
//...
int i = (int)x; // => i==-2
MAX_VAL = lireValeur();
• valeurs spéciales : Infinity, -Infinity, NaN
Cours langage Java — N. Kajler, F. Moutarde — CCSI der