Académique Documents
Professionnel Documents
Culture Documents
• Introduction à “Java”
Le langage Java
X.BLANC & J. DANIEL
Qu’est ce que « Java » ?
– les Applets
il s'agit d'un programme s'exécutant par exemple au sein d'un
navigateur web. Une applet ne peut s'exécuter indépendamment
et doit être logée et activée par une autre application.
– les applications
il s'agit de programme standard et indépendant.
La plate-forme entreprise « java »
Quelques atouts de java
Le langage Java
X.BLANC & J. DANIEL
Langage Objet
Button
Panel
Icon
Interface
Graphique
Scan
Unzip
Zip
Open ???
Close
Un programme Objet
Class GUI
Class Zip
…
Notion de « class »
• Par exemple :
int a;
float pi = 3.14;
float rayon = 5;
float surface = pi * pi * rayon;
Les types de base
monInstance = null;
System.gc();
Espace de désignation
package Premier;
class toto { … }
• Un package peut être vue comme un répertoire dans lequel est rangé la
classe java.
• Un package introduit un espace de désignation ( plusieurs classes peuvent
porter le même nom si elles sont placées dans des packages différents ).
Utilisation des « packages »
• Pour accéder à un élément défini dans un package on doit utiliser son nom
complet sauf si l'élément qui l'utilise est dans le même package :
nom_de_package . nom_de_l'élément
• Exemple :
package Exemple; package Exemple;
class toto class titi extends toto
{…} {…}
• Pour ajouter une classe dans un tel package, on utilise également le mot
clef « package » suivit du chemin désignant le package.
• Exemple :
package Exemple.SousPackage;
class toto { … }
Importation de « package »
• Le langage java fournit une facilité d'écriture par l'emploi de la notion
d'importation de package.
• Exemple :
package Exemple; package Exemple;
class toto class titi extends toto
{…} {…}
import Exemple.*;
class tutu extends titi
{…}
Notion d’interface
• Une interface décrie un rôle qui doit ensuite être incarné par une classe.
– friend : accès limité au membre du package. Il n'existe pas de mot clef pour ce
type de modificateur, de ce fait si aucun mot clef parmi public, private ou
protected n'est utilisé alors l'élément est considéré comme friend.
• Une classe, une interface ou une méthode peuvent être spécifiés comme
étant abstraite en utilisant le mot clef « abstract ».
– On ne pourra pas créer d'instance d'une classe abstraite, ou d'une classe
possédant une méthode abstraite.
– De plus un classe qui possède une méthode abstraite doit obligatoirement est
marqué abstraite.
• On emploi le mot clef « final » pour signaler qu'un élément est final.
• Dans ce cas on ne pourra pas soit surcharger ( dans le cas d'une classe,
d'une méthode ou d'une interface ), soit modifier ( dans le cas d'un
attribut ).
• Exemple :
• Exemple :
public class Exemple
{
public final float pi = 3.14;
• Cette attribut peut être utile pour retourner une référence vers l'instance ou
pour lever certaines ambiguïtés sur les identifiants.
• Exemples :
public float longueur;
public void fixeLongueur( float longueur )
{
this.longueur = longueur;
}
Le point d’entrée d ’une application
if ( condition )
// Bloc d'instruction si la condition est vraie
else
// Bloc d'instruction si la condition est fausse
Les choix multiples
switch ( type )
{
case valeur :
// Bloc d'instructions
default :
// Bloc d'instructions par défaut
}
Les boucles
do
{
// bloc d'instructions exécuté tant que la condition est vraie
}
while ( condition )
Les aspects objets du langage
• Exemple :
• Chacune de ces classes proposes des opérations pour passer d'un type à
l'autre. Par exemple la classe « Integer » comporte les opérations :
– intValue()
– shortValue()
– floatValue()
Constat
public class Exemple
{
public void carre( int valeur )
{
valeur = valeur * 2;
}
public static void main( String [] args )
{
Exemple ex = new Exemple();
int val = 2;
ex.carre( val );
System.out.println("Valeur au carré = " + val );
}
}
Mise en place de paramètres en sortie
public class Exemple
{
public void carre( IntConteneur val ) public class IntConteneur
{ {
val.valeur = val.valeur * 2; public int valeur;
} }
try
{
// Code surveillé par le bloc « try »
}
catch ( monException ex )
{
System.out.println("Une exception a été interceptée…");
ex.printStackTrace();
Imprime des informations sur l'état de
} l'exécution au moment de la génération
de l'exception.
Mais quel problème ?
try
{
// Bloc d'instructions surveillé par « try »
}
catch ( java.lang.Exception ex )
{
ex.printStackTrace();
}
catch ( monException ex )
{
ex.printStackTrace();
}
Les erreurs java
• Une « erreur » est un concept proche de celui de l'exception dans la
terminologie « java ».
java.lang.Throwable
java.lang.Error java.lang.Exception
Quelques exceptions et erreurs standard !
• On peut définir un tableau sur tous les types java ( types primitifs,
classes, interfaces, tableaux ).
• Exemple
System.arraycopy( liste, 0, tmp, 0, liste.length );
Le langage Java
X.BLANC & J. DANIEL
Distribution des applications java
• Pour créer une archive JAR, on utilise la commande « jar » qui est
similaire à la commande « tar » d'unix et qui prends à ce titre les
mêmes paramètres :
• Syntaxe de javac :
javac [ options ] nom_application
• Syntaxe de « java »
java [ options ] nom_de_l'application.class arguments
• Options
– -Dxxxx=yyyyy : définie une variable d'environnement qui sera accessible pour
un programme,
– -cp : spécifie un CLASSPATH spécifique pour l'exécution.
Compléments sur java
Le langage Java
X.BLANC & J. DANIEL
Les classes internes
• Une classe interne ( uniquement depuis java 1.1 ) est une classe
qui comporte deux propriétés fondamentales :
– Une classe interne peut être définie à l’intérieur d ’une classe comme
un membre ( au même titre qu’une méthode ), ou bien au sein d’un
bloc d’instructions ( par exemple dans un méthode )
– La visibilité d’une classe interne est la même que celle d’un attribut
d’une classe.
• Une classe anonyme est une classe interne définie sans préciser
son nom.
• Exemple :
interface Exemple
{
public int add( int nb1, int nb2 );
}
Exemple de mise en œuvre
d’une classe anonyme
public class ClasseAnonyme
{
public Exemple donneEx()
{
return new Exemple()
{
public int add( int nb1, int nb2 )
{ return nb1+nb2; }
};
}
public static void main( String [] args)
{
System.out.println("Addition 6+2 =" + new ClassAnonyme.donneEx().add(6,2));
}
}
Les classes statiques
• Constructeur :
BufferedOutputStream( OutputStream out );
• Constructeur :
BufferedInputStream( InputStream in )
• Constructeurs :
PrintWriter( OutputStream out )
PrintWrtier( OutputStream out, boolean autoflush )
• Cette fois-ci, il s’agit d’écrire une méthode qui lit le contenu d’un
fichier texte et qui affiche celui-ci à l ’écran.
Le package « java.util »
• Un hash code est calculé à partir de la clef, qui par la suite sert
d’index de l’élément au sein du tableau.
Les principales méthodes de
« java.util.Hashtable »
• Parmi les méthodes de « java.util.Hashtable », les suivantes sont
les plus utilisées :
– void clear() : supprime tous les éléments de la table,
– Enumeration elements() : retourne sous forme d’une énumération tous
les éléments de la table,
– Enumeration keys() : retourne cette fois ci toutes les clefs,
– Object put( Object key, Object value ) : ajoute un élément dans la
table
– Object get( Object key ) : récupère un élément de la table,
– int size() : nombre d ’éléments dans la table,
– Object remove( Object key ) : supprime un élément.
Mise en pratique… et hop...
Interface Pratique
{
public void displayElements( java.lang.Object object ) ;
}
Les propriétés
• Une propriété ( property ) est l’association d’un nom et d’une
valeur.
• Voici quelques unes des opérations les plus usitées de cette classe :
– int length() : retourne la taille de la chaîne
– char CharAt(int index ) : retourne un caractère de la chaîne
– int hashCode() : retourne une code hash pour la chaîne
– String toUpperCase() : retourne une chaîne équivalente en majuscule
– String toLowerCase() : retourne une chaîne équivalente en minuscule
– boolean startsWith( String prefix ) : retourne « true » si la chaîne est
préfixée de la chaîne passée en paramètre
– boolean endsWith( String suffix ) : retourne « true » pour un suffixe
Manipulation de chaîne de caractères
• A partir d ’un vecteur qui contiendrait une liste de noms, écrire une
fonction capable d’en extraire tout ceux qui commence par « esi ».
La classe « StringTokenizer »
Remarque
La classe vecteur implante l’interface « java.io.Serializable ».
Les threads
Un processus multi-threads
Un processus avec
un seul thread Thread 1 Thread 2 Thread 3
// ...
}
La sortie de la méthode « run » met fin à la vie du Thread.
Exemple d'utilisation d'un thread
public class ExempleThread extends java.lang.Thread
{
public static int threadCompteur = 0;
public int numThread = 0;
public int count = 5;
public ExempleThread()
{
numThread = ThreadCompteur++;
System.out.println("Création du thread n°" + numThread );
}
public void run()
{
while ( count != 0 )
{
System.out.println("Thread n°" + numThread + " , compteur = " + count-- );
}
}
public static void main( String [] args )
{
for ( int i=0; i<3; i++ )
new ExempleThread().start();
System.out.println("Tous les threads sont lancés");
}
}
A l'exécution...
• Pour qu'une méthode ne soit pas utilisée par plus d'un thread à la fois, il
faut la spécifier « synchronized » :
• Tant que le verrou n'est pas levé, seul un thread peut être actif dans
le code verrouillé.
synchronized ( this )
{
// Zone verrouillée.
}
L'interface « java.lang.Runnable »
• Cette interface définie l'opération « run » qui doit être implantée et qui
correspond à la méthode appelée au lancement du thread.
• Pour éviter cela, il est possible de signaler qu'un thread joue le rôle de
démon.
• Pour signaler le fait qu'un thread est un démon, on doit lui appliquer
l'opération « setDaemon » :