Vous êtes sur la page 1sur 23

Java avancée

L3-Miage 2021-2022
CM1
Plan de cours
• Collections
• Généricité
• Threads
• Les fonctions Lambda
• Streams
• Interfaces graphiques Swing
• Connection aux bases de données
Historique
• Développé par Sun Microsystems à partir de 1991
• Green team
• James Gosling
• Patrick Naughton
• Mike Sheridan
• Pour les télévisions et décodeurs
• Première version en 1995
• Version actuelle SE 17
Principes
• Simple et familier
• Robuste et sécurisée
• Portable et indépendante de l'architecture
• Haute performance, Multithread et distribuée
• Interprété et dynamique
• Orienté objet
Principes
• Orienté objet (toute est classe à base Objet)
• Fortement typé (sûr)
• Gestion automatique de la mémoire (garbage collector)
• Peut être utilisé pour faire du web
Compilation / interprétation

Interpréter Code Machine Intel

Compiler
Code Byte
JVM
Java code

Interpréter
Code Machine AMD

-> javac projet.java -> java projet


Hello world
Projet.java
import java.lang.*;
class Projet {
public static void main(String[] args) {
-> javac projet.java
System.out.println("Hello world");
}
}

projet.class
class Projet {
method public static void main (java.lang.String[])
max_stack 2 {
getstatic java.io.PrintStream java.lang.System.out ldc "Hello world" -> java projet
invokevirtual void java.io.PrintStream.println(java.lang.String) return
}
}
IDE's
Conventions
• Le fichier .java porte le nom de la classe qu'il contient
• La classe Projet est dans le fichier Projet.java
• Le nom de package commence par minuscule Projet.java
• java.lang.* import java.lang.*;

• Le nom de la classe commence par majuscule


class Projet {
public static void main(String[] args) {
• Projet System.out.println("Hello world");

• Le nom de la variable commence par minuscule


}
}
• maVariable
• Le nom d'une constante est en majuscule
• UNE_CONSTANTE
Types
• Types références (Classes, Tableaux)
• Pointeurs vers des objets
• Allocation avec new
• Pas de destructeur : le ramasse-miette (garbage collector) de la machine virtuelle
d'occupe de libérer la mémoire
• Primitifs (int, char, float, boolean, …)
• Pas besoin de new pour les instancier

Variable Domaine Variable Domaine


boolean true ou false byte -128 à 127
short -32768 à 32767 int -2 147 483 648 à 2 147 483647
long -9223372036854775808 à char \u0000 à \uffff
9223372036854775807
float 1e-45 à 1e+38 double 1e-324 à 1e+308
Tableaux
• Un ensemble de valeurs de même type:
Champ 0 Champ 1 Champ 2 Champ 3 Champ 4
• int[] tableau = new int[5];
• Indexation commence par 0
• Création implicite d'une classe de longueur
• tableau.length;
• Tableau multidimensionnel:
• Int[][][] m = new int[3][4][2]
Paradigme "orienté-objet"
• La classe est un concept général
• L'objet est une matérialisation de la classe (instance)

Le chien est un mammifère quadrupède carnivore caractérisé par sa facilité à être domestiqué,
par une course rapide, un excellent odorat et par son cri spécifique, l'aboiement.

Chiko Baron
public class Chien {
String nom;
int vitesse = 5; Champs
String[] color;
public Chien(String nom, int vitesse, String[] color) {
this.nom = nom;
this.vitesse = vitesse; Constructeur
this.color = color;
}
public void marcher() {
System.out.println("marcher");
}
public void courir() {
System.out.println("courir " + vitesse);
Méthodes
}
public void aboyer() {
System.out.println("wof wof");
}
public static void main(String[] args) {
Chien chiko = new Chien("Chiko", 3, new String[] {"noir", "blanc", "brun"});
Chien baron = new Chien("Baron", 5, new String[] {"doré", "noir"});
chiko.marcher();
baron.aboyer();
}
}
Inheritance (héritage)
• Une classe plus spécifique (sous-classe) que la classe mère
• class Golden_retriever extends Chien
• Elle possède automatiquement toutes les caractéristiques (champs)
et méthodes de la classe mère (sauf les private)
Privilèges d'accès
Type de déclaration Classe Package Sous-classe Monde
public ✓ ✓ ✓ ✓
protected ✓ ✓ ✓ 
Package (par défaut) ✓ ✓  
private ✓   

Classe (Chien)

package1

Classe (Chat)

Sous-classe
Package 2
(Golden_retriever)
La classe abstraite
abstract class Animal { Animal
public abstract void animalSound();
public void sleep() {
System.out.println("Zzz");
}
}
L'interface public class Autruche extends {
Oiseau

abstract class Oiseau extends Animal {


@Override
public abstract void pondre();
public void pondre() {
@Override
// TODO Auto-generated method stub
public void animalSound() {
}
System.out.println("woo woo");
}
} public class Bat extends Animal implements Volant{
} @Override
public void voler() {
public class Grive extends Oiseau implements Volant{ // TODO Auto-generated method stub Volant
@Override }
public void voler() { @Override
// TODO Auto-generated method stub public void animalSound() {
} // TODO Auto-generated method stub

@Override }

public void pondre() { }

// TODO Auto-generated method stub


public interface Volant {
}
public void voler();
}
}
Le mot clé static
• Une méthode static est utilisable sans créer un instance de sa classe
• Les méthodes ou variables static sont communes à tous les objets de
la classe
• On utilise le nom de la classe pour accéder aux membres static (et
non une variable qui référence un objet)
public class Chien {
String nom;
int vitesse = 5;
String[] color; 0
static int aboimentCount = 0; wof wof
public Chien(String nom, int vitesse, String[] color) {
this.nom = nom; 1
this.vitesse = vitesse; wof wof
this.color = color;
} 2
public void marcher() {
System.out.println("marcher");
}
public void courir() {
System.out.println("courir " + vitesse);
}
public void aboyer() {
System.out.println("wof wof");
aboimentCount += 1;
}
public static void main(String[] args) {
Chien chiko = new Chien("Chiko", 3, new String[] {"noir", "blanc", "brun"});
Chien baron = new Chien("Baron", 5, new String[] {"doré", "noir"});
System.out.println(Chien.aboimentCount);
chiko.aboyer();
System.out.println(Chien.aboimentCount);
baron.aboyer();
System.out.println(Chien.aboimentCount);}
}
Object equialty False
true
String hi1 = new String("hello world");
String hi2 = new String("hello world");
System.out.println(hi1 == hi2);
System.out.println(hi1.equals(hi2));
Les packages courants
• java.lang
• Classes fondamentales de Java
• java.util
• Classes utilitaires, collections, date et heure, etc.
• java.math
• Classes pour calcul à précision arbitraire (BigInteger, etc.)
• java.io
• Entrées/sorties système, flux de données, etc.
• java.sql
• Accès aux sources de données
Exemple java.lang.Math
• Permet d'accéder à un ensemble de fonctions mathématiques
import java.lang.Math;

double a = Math.PI;
double b = Math.sqrt(9.0);
double c = Math.max(a, b);
Les exceptions
• Mécanisme permettant de gérer facilement les cas d'erreurs
• Toutes les exceptions héritent de la classe java.lang.Exception
int[] arr = new int[4];
try { ERROR 4
int i = arr[4]; finally block executed
System.out.println("Inside try block"); Outside try-catch-finally clause
} catch(ArrayIndexOutOfBoundsException ex) {
System.out.println("ERROR " + ex.getMessage());
//ex.printStackTrace();
ERROR 4
finally block executed
} finally {
Outside try-catch-finally clause
System.out.println("finally block executed");
java.lang.ArrayIndexOutOfBoundsException: 4
}
at Chien.main(Chien.java:42)
System.out.println("Outside try-catch-finally clause");

Vous aimerez peut-être aussi