Académique Documents
Professionnel Documents
Culture Documents
Partie 1
Java : notions de base
F.Belabdelli
1
Compétences à acquérir
2
Organisation
PLANNING
45 46 47 48 49 50 51 52
SE 5 2 1 1 1
TP 15 1 3 3 3 3 2
EI 1 1
3
TIOBE Programming Community Index des langages :
nov 2022
4
Définition de Java
5
Les caractéristiques du langage Java
6
Java est un langage Orienté Objet
Tout est classe (pas de fonctions) sauf les types primitifs ( int,
float, double, ...)
Toutes les classes dérivent de java.lang.Object
Héritage simple pour les classes
Héritage multiple pour les interfaces
Les objets se manipulent via des références
Une API objet standard est fournie
La syntaxe est proche de celle de C
7
Java est portable
8
Java est robuste
9
Java est multi-thread
10
Java est distribué
11
Premier exemple
}
8: return
java HelloWorld
13
Conventions de nommage
14
La nature des variables en java
Les variables locales comme les attributs des classes et des objets
ne peuvent être que de deux natures :
De type « primitif »
Dans ce cas, la déclaration de la variable réserve la place
mémoire pour stocker sa valeur (qui dépend de son type)
int entier; long entier
# @ class Pixel
Pixel p1;
p1=new #1 1 x=1 objet
Pixel(1,3); référence Y=3
15
Les types primitifs
Types entiers signés (représentation en complément à 2)
byte (octet) sur 8 bits: [-128 .. 127]
short sur 16 bits [-32768 .. 32767]
int sur 32 bits [-2147483648 .. 2147483647] (défaut pour entiers)
long sur 64 bits [-9223372036854775808 .. 9223372036854775807]
Type caractère non signé (unités de code UTF-16)
char sur 16 bits ['\u0000' .. '\uffff']
Types à virgule flottante (représentation IEEE 754)
float sur 32 bits
double sur 64 bits (défaut pour flottants)
Type booléen : boolean (true ou false)
16
Promotion entière et flottants spéciaux
Pour la plupart des opérations, les valeurs entières sont transformés en des « int »
(promotion entière):
short s = 4;
s = s+s; // Type mismatch: cannot convert int to short
s = (short) (s+s); // cast nécessaire
Les débordements ou cas d'erreurs sont prévus pour les flottants (Infinity et Not-a-
Number):
double d = 1e308; System.out.println(d*10);
// affiche: Infinity
d = 0.0/0.0;
System.out.println(d); // affiche: NaN
17
Tous les autres types sont objets et se manipulent par une
référence
soit des types définis dans les APIs
java.lang.Object, java.lang.String, java.util.Scanner, etc.
String chaine = "toto"; # @class String
#1
1 #2
...
En plus, les String sont constantes
soit des types « cachés » #2 t o t o \n
18
Types java et passage de paramètres
19
Passage de paramètres : type primitif
Dans le cas des types primitifs, c'est la valeur de l'argument qui est recopiée dans le
paramètre de la méthode
Les modifications sur le paramètre de la méthode sont sans effet sur l'argument
20
Passage de paramètres : type référence
Dans le cas des types « objet », c'est la valeur de la variable, (la référence à l'objet)
qui est transmise à la méthode
Les modifications effectuées en suivant cette référence (e.g. modification d'un attribut
de l'objet) sont répercutés dans la mémoire et sont donc visibles sur l'argument
# 1 @class Box
public static void m2(Box b) { b #1 field = 5
b.field++;
}
6
public static void main(String[] args) {
Box box = new Box(); #1
box
box.field = 5;
M2(box); class Box {
System.out.println(box.field); //6 int field;
} }
21
Passage de paramètres : type référence
Dans le cas des types « objet », c'est la valeur de la variable, (la référence à l'objet)
qui est transmise à la méthode
En revanche, la modification de la référence elle-même est sans effet sur l'argument
(c'en est une copie) @class Box
#2
field = 6
tmp #2
public static void m3(Box b) {
Box tmp = new Box();
tmp.field = b.field+1; b #1 #2 #1 @class Box
b = tmp; field = 5
}
public static void main( String[] args){
Box box = new Box(); #1
box
box.field = 5;
m3(box); class Box {
System.out.println(box.field);// 5 int field;
} }
22
Type référence et valeur null
23
Allocation mémoire
Pour qu'une variable objet prenne une autre valeur que null, il
faut être capable d'y affecter une référence
Elle peut être produite (retournée) par l'opérateur d'allocation new
Cet opérateur a besoin de connaître la taille de l'objet qu'il doit réserver en mémoire
• Le nom du type / de la classe suit immédiatement l'opérateur
• Ce que retourne l'opérateur new est la référence qui permet d'accéder à l'objet alloué en
mémoire
24
Désallocation mémoire
25
Références et Garbage collector
26
Classes et objets
27
Exemple
public class Pixel {
public final static int ORIGIN = 0;
Constante
private int x;
private int y;
public Pixel(int x, int y) {
Attributs
this.x = x;
this.y = y;
} Constructeur
public void reset() {
x = ORIGIN;
y = ORIGIN; Méthodes
} d’instances
public void printOnScreen() {
System.out.println("("+x+","+y+")");
}
public static boolean same(Pixel p1, Pixel p2) {
return (p1.x==p2.x) && (p1.y==p2.y); Méthode de classe
}
public static void main(String[] args) {
Pixel p0 = new Pixel(0,0); // (0,0)
Pixel p1 = new Pixel(1,3);// (1,3) Variables locales à
p1.printOnScreen(); la méthode main
System.out.println(same(p0,p1));//false et objets de la
p1.reset();
System.out.println(same(p0,p1));//true
classe Pixel
}
}
28
Les objets sont manipulés via une référence
Classe Pixel
Lorsque la méthode
#s ORIGIN = 0
p1.reset();
Pixel p2 #2 x=1 0
est exécuté sur la pile avec les
y=3 0
références #1 à la place de p1
et #s à la place de ORIGIN #2 @ class Pixel
29
Les tableaux
30
Les tableaux : déclaration
Déclaration
typeDesElements [ ] nomDuTableau;
31
Tableaux : création des éléments
typeDesElements [ ] nomDuTableau;
définit (déclare) un identificateur nomDuTableau qui permettra de désigner (référencer)
un tableau du type déclaré ("tableau d'éléments de type typeDesElements").
mais ne crée pas de tableau en mémoire. (nomDuTableau == null)
Pour utiliser un tableau, après la déclaration d’un identificateur permettant de le désigner,
il faut ensuite explicitement "créer" ce tableau en mémoire.
la "création" s’effectue à l’aide de l’opérateur new (utilisé pour créer des objets, les
tableaux sont des objets).
nomDuTableau = new typeDesElements[taille]
recherche, tri, etc. : voir fonctions utilitaires de la classe Arrays (cf java.util)
32
Tableaux : création des éléments
33
Tableaux : index d’un élément
34
Tableaux : autres déclarations
35
Tableaux d’objets
36
Entrées/Sorties
//écriture :
float z=1.732f;
System.out.print("z=");
System.out.print(z);
System.out.println(",2z=" + (2*z));
//lecture :
// Lecture d'un caractère à la fois
int car = System.in.read();
// Lecture de 10 caractères
byte buf[] = new byte[10];
int nbLus = System.in.read(buf);
37
Lecture formatée
38
Classe et Objet
Définition
Constructeurs
Variables de classe ou Attributs
Méthodes de classe
La référence this
Constantes
Le main()
Initialiseur statique
Destructeur et Finalisation
39
Exemple de programme
40
La référence this
// ...
double comparerA(double rayon){
return this.rayon-rayon; class Cercle {
} } void dessinerSur(Ecran e){
// ...
pour appeler une fonction (ou méthode) }
}
avec l'instance courante en paramètre : class Ecran {
// ...
void tracer(Cercle c){
c.dessinerSur(this);
}
}
41
L’encapsulation
42
Encapsulation des membres
class c3
class c2 extends c1 class c5 {
{
{ ...
...
... }
}
}
A B C D
Accessible par c2 o o o -
Accessible par c3 o - o -
Accessible par c4 o o - -
Accessible par c5 o - - -
43
Le constructeur
class Cercle {
private double rayon;
public double calculerSurface(){
return Math.PI*rayon*rayon;
}
public Cercle(double r) {
rayon = r;
}
44
Le constructeur
45
Le destructeur
46
Attribut et méthode static
47
Exemples de méthodes et d’attributs
public class Circle {
public static int count = 0;
public static final double PI = 3.14; // final pour éviter
//Circle.PI = 4;
public double x, y, r;
public Circle(double r) {
this.r = r;
count++;
}
public Circle bigger(Circle c) {
if (c.r > r) return c;
else return this;
}
public static Circle bigger(Circle c1, Circle c2) {
if (c1.r > c2.r) return c1;
else return c2;
}
}
public static void main(String[] args) {
Circle c1 = new Circle(10); Circle c2 = new Circle(20);
n = Circle.count; // n = 2;
Circle c3 = c1.bigger(c2); // c3 = c2;
Circle c4 = Circle.bigger(c1, c2); // c4 = c2
}
48
Cas particulier de classe
49
Les packages
50
Les packages
51
Les packages
CLASSPATH =
$JAVA_HOME/lib/classes.zip;$HOME/classes
~dedieu/classes/graph/2D/Circle.java ~dedieu/classes/graph/3D/Sphere.java
package graph.2D; package graph.3D;
public class Circle public class Sphere
{ ... } { ... }
~dedieu/classes/paintShop/MainClass.java__________________________________
package paintShop;
import graph.2D.*;
public class MainClass
{
public static void main(String[] args) {
graph.2D.Circle c1 = new graph.2D.Circle(50)
Circle c2 = new Circle(70);
graph.3D.Sphere s1 = new graph.3D.Sphere(100);
Sphere s2 = new Sphere(40); // error: class paintShop.Sphere not found
}
52
Packages JAVA
Package Description
java.applet Classes nécessaires à la création d’applets
java.awt Abstract Windowing Toolkit Interfaces graphiques, événements…
java.beans Pour le développement de composants JavaBeans
java.io Pour la gestion des IO systèmes (système de fichiers, etc.)
java.lang Classes fondamentales du langage (toujours importées par défaut)
java.math Pour les traitements arithmétiques demandant une grand précision
java.net Pour les connexions et la gestion réseau
java.nio Définit des tampons
java.rmi Toutes les classes liées au package RMI (Remote Method Invokation)
java.security Classes et interfaces du framework de sécurité Java
java.sql Pour l’accès et la gestion des bases de données JDBC
java.text Pour la manipulation de texte, dates, nombres et messages
java.util Collections, modèle événementiel, dates/heures, internationalisation
Packages JAVAX
Package Description
javax.accessibility Définit un contrat entre l’U.I. et une technologie d’assistance
javax.crypto Pour les opérations liées à la cryptographie
javax.imageio Pour la gestion des IO liées aux images
javax.naming Pour la gestion de la Java Naming and Directory Interface (JNDI)
javax.net Pour les connexions et la gestion réseau
javax.print Pour les services liés à l’impression
javax.rmi Toutes les classes liées au package RMI (Remote Method Invokation)
javax.security Classes et interfaces du framework de sécurité Java
javax.sound Pour le développement d’application gérant le son (Midi / Sampled)
javax.sql Pour l’accès et la gestion des bases de données JDBC
javax.swing Interfaces graphiques « légères », identiques sur toutes plateformes
javax.transaction Exceptions liées à la gestion des transactions
javax.xml Parseurs et autres classes liées au format XML