JAVA_Chap1 21/02/2020
Chapitre 1
Présentation du langage Java
1
1 . Ja v a : c ’ e s t q u o i ?
2 . Ja v a e t l a p o r t a b i l i t é
3. Outils de développement
4. Str ucture d’un pr ogramme java
Java c'est quoi ?
2
Langage de programmation orienté objet.
Créé par James Gosling et Patrick Naughton employés par Sun
Microsystems avec le soutien de Bill Joy.
1995 : présenté officiellement ;
1998 : apparition de la version 1.2 qui a apporté de nombreuses
améliorations et fonctionnalités :
Java 2 Standard Edition (J2SE)
Java 2 Entreprise Edition (J2EE)
2000-2014 : plusieurs versions sont apparues
2010 : Sun a été rachetée par Oracle
ii1
JAVA_Chap1 21/02/2020
Java c'est quoi ?
3
Les différentes versions de Java :
J2SE Java SE Java SE Java SE
Java 1.0 Java 1.1 Java 1.2 J2SE 1.3 J2SE 1.4
5.0 6 7 8
Nombre
de 8 23 59 76 135 166 202 209 217
packages
Java c'est quoi ?
4
Objectifs :
Portabilité (principalement)
Élimination des concepts délicats de C++ tels que :
La gestion manuelle de l’allocation dynamique, les pointeurs et l’héritage
multiple.
Combler les lacunes de sécurité et l’absence de ramasse-miettes ;
Mettre en œuvre la programmation distribuée,…
ii1
JAVA_Chap1 21/02/2020
Java c'est quoi ?
5
4 éléments :
Java est un langage de programmation objet
Une machine virtuelle
Des bibliothèques de classes ou des packages : API Application
Programming Interface (2500 classes dans Java 1.4)
Ensemble d'outils : java, javac, jdb javadoc, jar, ...
execution compilation debugger documentation archivage
Java et la portabilité
6
ii1
JAVA_Chap1 21/02/2020
Java et la portabilité
7
Code source Java
Programme Java
Solution proposée :
Construire une machine virtuelle : Machine virtuelle
SE / Architecture
Joue le rôle de plateforme virtuelle
Opère un langage machine virtuel indépendant de l'architecture réelle
et du SE réel
Java et la portabilité
8
En Java, le code source n’est pas traduit directement dans le langage
de l’ordinateur.
Il est d’abord traduit dans un langage appelé « bytecode », langage d’une
machine virtuelle (JVM ; Java Virtual Machine) définie par Sun.
Ce langage est indépendant de l’ordinateur qui va exécuter le
programme.
ii1
JAVA_Chap1 21/02/2020
Java et la portabilité
9
Programme source
Programme Java [Link]
Compilateur: javac
compilateur
Programme en bytecode,
indépendant de l'ordinateur
Bytecode
[Link]
Java et la portabilité
10
Les systèmes qui veulent pouvoir exécuter un programme Java
doivent fournir une JVM.
A l'heure actuelle, tous les systèmes ont une JVM (Linux, Windows,
MacOs,…).
ii1
JAVA_Chap1 21/02/2020
Java et la portabilité
11
Bytecode:
[Link]
JVM sous Lunix JVM sous MacOs
JVM sous Windows
Le bytecode peut être exécuté par n'importe quelle JVM
Si un système possède une JVM, il peut exécuter tous les fichiers
.class compilés sur n'importe quel autre système
Outils de développement
12
Le Java Development Kit de Sun (incluant une machine virtuelle
Java), disponible sur [Link]
Outils
java : JVM, interpréteur pour les programmes java
javac : Compilateur Java
appletviewer : JVM pour l'exécution des applets
jar : Création et manipulation d 'archive java
javadoc : Générateur de documentation Java au format HTML
javap : désassembleur de classes Java compilées
jdb : débogueur Java en ligne de commande
javah : génère le header C ou C++ pour créer un pont compatible entre java et
C/C++
Un éditeur spécialisé (vivement recommandé), comme Netbeans
ou Eclipse ou jEdit ( [Link])
ii1
JAVA_Chap1 21/02/2020
Structure d’un programme Java
13
Exemple de programme Java :
public class PremProg
{
public static void main (String args[])
{
[Link] ("Mon premier programme
Java");
}
}
Le mot-clé public dans public class PremProg sert à définir les droits
d’accès des autres classes (en fait de leurs méthodes) à la classe PremProg.
Structure d’un programme Java
14
Le mot-clé static précise que la méthode main de la classe PremProg
n’est pas liée à une instance particulière de la classe.
Le mot-clé public dans public static void main est obligatoire pour
que votre programme puisse s’exécuter. Ici, il ne s’agit plus
véritablement d’un problème de droit d’accès, mais plutôt d’une
convention qui permet à la machine virtuelle d’accéder à la méthode
main. Notez que vous pouvez inverser l’ordre des mots- clés public et
static en écrivant static public void main.
ii1
JAVA_Chap1 21/02/2020
Structure d’un programme Java
15
Le paramètre String[] args de la fonction main permet de
récupérer des arguments transmis au programme au moment de son
lancement. On peut lancer un programme sans fournir d’arguments,
mais l’indication String args[] est obligatoire (en C/C++, on
trouve des paramètres similaires dans la fonction main, mais ils sont
facultatifs).
On peut écrire indifféremment String[] args ou String args[]
Le nom d’une classe commence toujours par une majuscule, il est
nécessaire de définir le nom du fichier selon le même principe sinon la
classe risque de ne pas compiler.
Structure d’un programme Java
16
Programme source Java = ensemble de fichiers « .java »
Chaque fichier « .java » contient une ou plusieurs définitions de classes
Au plus une définition de classe public par fichier « .java » avec nom
du fichier = nom de la classe publique
ii1
JAVA_Chap1 21/02/2020
Chapitre 1 -suite–
Les éléments traditionnels du langage
Java
17
1. Structure lexicale, identificateurs et mots-clés
2. Types élémentaires
3. Opérateurs
4. Flottants en Java
5. Conversion de types
6. Exercice
7. Structures de contrôle
a. Structures conditionnelles
b. Structures répétitives
Structure lexicale, identificateurs, mots-clés
18
Java est sensible à la casse
Le code est écrit dans des blocs :
Délimités par { }
Qui peuvent être imbriqués
Les commentaires :
Sur une seule ligne : // mon commentaire
Sur plusieurs lignes : /* */
Les identificateurs peuvent contenir tous les caractères
alphanumériques et des caractères _ et $. Le premier caractère doit
être une lettre, le caractère de soulignement ou le signe dollar.
ii1
JAVA_Chap1 21/02/2020
Types élémentaires
19
Type Désignation Longueur Commentaires
pas de conversion
valeur logique : true ou
boolean 1 bit possible vers un autre
false
type
byte octet signé 8 bits
short entier court signé 16 bits
entouré de cotes
char caractère Unicode 16 bits simples dans du code
Java
int entier signé 32 bits
virgule flottante simple
float 32 bits
précision (IEEE754)
virgule flottante double
double 64 bits
précision (IEEE754)
long entier long 64 bits
Types élémentaires
20
En Java, toute variable appartenant à un objet (définie comme étant
un attribut de l'objet) est initialisée avec une valeur par défaut au
moment de la création.
Cette initialisation ne s'applique pas aux variables locales des
méthodes de la classe.
Les valeurs par défaut lors de l'initialisation automatique des variables
d'instances sont :
Type Valeur par défaut
boolean false
byte, short, int, long 0
float, double 0.0
char \u0000
classe null
ii1
JAVA_Chap1 21/02/2020
Opérateurs
21
En Java, les opérateurs arithmétiques utilisés sont les mêmes qu’en
C++ :
+,-,/,*,%
Ils peuvent être combinés avec l'opérateur d'affectation.
Exp : x+=5;
Priorité des opérateurs
22
Les parenthèses ()
Les opérateurs d'incrémentation ++ --
Les opérateurs de multiplication, division et modulo * / %
Les opérateurs d'addition et soustraction + -
Les opérateurs de décalage << >>
Les opérateurs de comparaison < > <= >=
Les opérateurs d'égalité == !=
L’opérateur OU exclusif ^
L'opérateur ET &
L'opérateur OU |
L'opérateur ET logique &&
L'opérateur OU logique ||
Les opérateurs d'assignement = += -=
ii1
JAVA_Chap1 21/02/2020
Flottants en Java
23
En Java, aucune opération sur les flottants ne conduit à un arrêt de
l’exécution (pas même une division par zéro !).
En effet, les flottants sont codés en respectant les conventions IEEE
754 qui incluent les trois constantes suivantes :
indéfini : [Link] ou [Link] (not a number)
indéfini positif : Float.POSITIVE_INFINITY ou Double.POSITIVE_INFINITY
indéfini négatif : Float.NEGATIVE_INFINITY ou Double.NEGATIVE_INFINITY
En Java, ces valeurs peuvent même être affichées ou affectées
directement à des variables.
Flottants en Java
24
Conformément à la norme IEEE754, ces valeurs spéciales représentent
le résultat d'une expression invalide NaN, une valeur supérieure au
plafond du type pour infini positif ou négatif.
X Y X/Y X%Y
valeur finie 0 + infini NaN
valeur finie infini 0 x
0 0 NaN NaN
Infini Valeur finie infini NaN
Infini Infini NaN NaN
ii1
JAVA_Chap1 21/02/2020
Flottants en Java
25
Quels résultats fournit ce programme ?
public class IEEE
{ public static void main (String args[])
{ float x = 1e30f ;
float y ;
y = x*x ;
[Link] (x + " a pour carre : " + y) ;
float zero = 0.f ; // division flottante par zero
float z = y/zero ;
[Link] (y + " divise par 0 = " + z) ;
y = 15 ;
[Link] (y + " divise par 0 = " + z) ;
float x1 = Float.POSITIVE_INFINITY ; // +infini
float x2 = Float.NEGATIVE_INFINITY ; // -infini
z = x1/x2 ;
[Link] (x1 + "/" + x2 + " = " + z) ;
}
}
Flottants en Java
26
1.0E30 a pour carre : Infinity
Infinity divise par 0 = Infinity
15.0 divise par 0 = Infinity
Infinity/-Infinity = NaN
ii1
JAVA_Chap1 21/02/2020
Conversion de types
27
Expression mixte
Les opérateurs arithmétiques ne sont définis que lorsque leurs deux
opérandes sont de même type.
Mais on peut écrire des expressions mixtes dans lesquelles interviennent
des opérandes de types différents.
Dans ce cas, le compilateur effectue une conversion vers le type le
plus « grand » de façon à éviter les pertes d’informations.
Conversion de types
28
Conversion d’ajustement de type
Une conversion telle que int -> float est une conversion d’ajustement
de type. Elle ne peut se faire que suivant une hiérarchie qui permet de
préserver la valeur initiale : int -> long -> float -> double
Conformément à cette hiérarchie, on peut bien sûr convertir
directement un int en double ; mais on ne pourra pas convertir un double
en float ou en int.
ii1
JAVA_Chap1 21/02/2020
Conversion de types
29
Conversions implicites
Les opérateurs numériques ne sont pas définis pour les types byte, char
et short.
Java prévoit que toute valeur de l’un de ces deux types apparaissant
dans une expression soit d’abord convertie en int, et cela sans
considérer les types des éventuels autres opérandes.
On parle alors de promotions numériques (ou encore de conversions
systématiques).
Conversion de types
30
Les opérandes et le résultat de l'opération sont convertis en
type int.
short x=5, y=15;
x=x+y; // erreur à la compilation
Le résultat est affecté dans un type short : il y a donc risque de
perte d'informations et donc une erreur est émise à la
compilation.
Pour régler le problème, il est nécessaire d'utiliser une
conversion explicite ou cast.
x=(short)(x+y);
ii1
JAVA_Chap1 21/02/2020
Conversion de types
31
Conversion forcée
Le programmeur peut forcer la conversion d’une expression
quelconque dans un type de son choix, à l’aide d’un opérateur
nommé cast.
Exemple :
double x;
(int) x;
Structures conditionnelles
32
Une condition correspond à vrai ou faux
Tester une condition:
if condition A; else B;
si condition est satisfaite, alors on fait A;
sinon, on fait B
if (age < 65)
[Link]("jeune");
else
[Link]("vieux");
ii1
JAVA_Chap1 21/02/2020
Structures conditionnelles
33
switch(expression) {
case constante 1 :
instr1;
instr 2;
break;
case constante 2 :
….
default:
…
}
Il est possible d'imbriquer des switch.
Structures répétitives
34
while(boolean)
{
…. //code à exécuter dans la boucle
}
do
{
…. //code à exécuter dans la boucle
} while(boolean);
for(initialisation; condition; traitement)
{
….. //code à exécuter dans la boucle
}
ii1