J100 (JSB)
-
Upload
libby-chambers -
Category
Documents
-
view
67 -
download
0
description
Transcript of J100 (JSB)
juin 2007 ~ Brigitte Groléas ~ 2
Les variables système
CLASSPATH=c:\Rep_JDK\lib\classes.zip;.Indique le chemin des bibliothèques de
classes, aussi bien pour la compilation que l ’exécution.
Le path PATH=$PATH:$Rep_JDK\binIndique la situation de java et javac
La documentation de sun en apijava.sun.com/j2se/1.5.0/docs/api/index.html
JAVA_HOME doit indiquer la racine de Java
juin 2007 ~ Brigitte Groléas ~ 3
Historique
En 1990 James Gosling : langage « Oak » pour faciliter l’implémentation de logiciels pour
l’électronique grand publique 1994 : explosion du Web sur l’Internet 1995 : Gosling présente la version Bêta de HotJava 1996 : Sun rend publique la première version Bêta
du JDK (Java Development Kit) 1997 : Sun sort la version 1.1 du JDK qui reprend
l’intégralité des API du JDK 1.0 2005 : java 1.5 dernière version
juin 2007 ~ Brigitte Groléas ~ 4
Présentation du langage Java
Simple et orienté objet Robuste, fiable et sûr Efficace et riche Interprété, indépendant de
l’architecture et rapide Portable Multitâche (multithread) Réparti Dynamique et distribué
juin 2007 ~ Brigitte Groléas ~ 5
Structure d’une application Java
public class Essai {public static void main( String argv[] ) {
System.out.print( "coucou\n" );}
}
javac Essai.java
java Essai
Fichier source une seule classe publique nom du fichier = nom de la classe publique .java
Le code est exécuté sur la machine virtuelle java (JVM pour Java Virtual
Machine).
juin 2007 ~ Brigitte Groléas ~ 6
Programmation modulaire : les packages
Répertoire : toto/titi/tataNom du package : toto.titi.tata
import toto.titi.tata.essai;import toto.titi.tata.*;
java.applet Classes pour implémenter les applets.java.awt Classes pour les graphiques (GUI) .java.awt.image Classes pour le traitement des Imagesjava.awt.peer Interfaces avec les environnements natifsjava.io Classes pour les entrées/sortiesjava.lang Classes de base du langage.java.net Classespour la communication réseaux.java.util Classes d’utilitaires.
Le package « java.lang » est automatiquement importé dans tous les sources Java.
juin 2007 ~ Brigitte Groléas ~ 7
Les variables
Peuvent être de 2 natures : primitive référence à un objet ou à un tableau
Toute variable locale doit être initialisée explicitement avant de pouvoir utiliser sa valeur
Ce n'est pas le cas des variables d'instance
juin 2007 ~ Brigitte Groléas ~ 8
Les packages
L'instruction package indique à quel package appartient la classe du fichier.
C'est la première instruction du fichier Par défaut une classe appartient au
paquetage anonyme L'instruction import permet de référencer des
classes sans les préfixer du nom de leur package.
juin 2007 ~ Brigitte Groléas ~ 9
Types gérés par valeur : types primitifs
type valeur par défautchar caractère unicode \u0000boolean valeur booléenne falsebyte entier signé 8 bits 0short entier signé 16 bits 0int entier signé 32 bits 0long entier signé 64 bits 0float flottant 32 bits 0.0 fdoubleflottant 64 bits 0.0
juin 2007 ~ Brigitte Groléas ~ 10
Des classes associées
Des classes sont Boolean, Character, Integer, Long, Float et Double. Elles permettent de définir des constantes et des méthodes utiles.
short et byte ne sont que des types de stockage
Pour créer des objets à partir de type primitifs
• Integer.parserInt("123");• MIN_VALUE
Integer i = new Integer(1); int j = i.intValue();
juin 2007 ~ Brigitte Groléas ~ 11
Types gérés par références : Les objets
Instanciation et destruction des objets ClassName x; //Crée la référence x = new ClassName(); //Crée l’objet et le référence par x
2 variables différentes peuvent désigner le même objet
ClassName x = new ClassName(); ClassName y = x; //x et y désignent tous deux le même
objet !
objTas
ref
juin 2007 ~ Brigitte Groléas ~ 12
Copier un objet : la méthode « clone() » si elle est implémentée par la classe en question (Classes implémentant l’interface « Cloneable » ). ClassName x = new ClassName(); ClassName y = x.clone();
Tester l’égalité entre 2 objets : une méthode spécialement conçue pour comparer les objets. En java, un certain nombre de classes redéfinissent la méthode « equal() » de la classe « Object ».
juin 2007 ~ Brigitte Groléas ~ 13
Les Tableaux
Les référencesint tab1[]; ou int [] tab1;ClassName tab2[]; ou ClassName [] tab;
Instanciation de tableaux tab1= new int[100]; tab2= new ClassName[10];
int tab[] = { 1, 2, 3, 4, 5}; String dico[]= { "hiboux", "choux", "genoux" };
La création d’un tableau ne crée pas les objets
contenus dans le tableau
Un tableau est considéré comme un objet. Il est manipulé via une référence
juin 2007 ~ Brigitte Groléas ~ 14
À vous … (sur le papier)
Réservez une référence velo sur un tableau d’entiers
Sur la référence velo, intanciez un tableau de 10 entiers
Réserver un entier i, initialisé à 0 Tant que i est plus petit que 10
Mettre 12 dans la ième case de velo Augmenter i de 1
Fin de la boucle
juin 2007 ~ Brigitte Groléas ~ 15
int[] velo; velo = new int[10]; int i = 0; while( i < velo.length ) {
velo[i] = 12; i = i +1;
}
juin 2007 ~ Brigitte Groléas ~ 16
int[] velo; velo = new int[10];
for(int i = 0; i < velo.length; i = i +1) { velo[i] = 12;
}
juin 2007 ~ Brigitte Groléas ~ 17
Tableaux multidimensionnels int tab[][][] = new int[5][4][3];
int tab[][] = new int[3][]; 3 références sur des int[]
tab[0] = new int[2]; 1er s/s tableau : 2 cases
tab[1] = new int[3]; 2eme s/s tableau : 3 cases
tab[2] = new int[4]; 3eme s/s tableau : 4 cases
Il n’est pas obligatoire de stipuler
le nombre d’éléments contenus
pour chaque dimension (seule la première est
obligatoire)
int tab[][] = { { 1, 2}, { 3, 4, 5 }, { 6, 7, 8, 9 } };
juin 2007 ~ Brigitte Groléas ~ 18
À vous …
Créer une référence titi sur un tab à 2 dimensions d’entiers
Sur la référence titi créer un tableau de 5 tableaux d’entiers
Chacune des cases de titi contiendra la référence d’un tableau d’entiers
Dans titi[0] créez un tab de 1 entier Dans titi[1] créez un tab de 2 entiers Dans titi[2] créez un tab de 3 entiers Dans titi[3] créez un tab de 4 entiers Dans titi[4] créez un tab de 5 entiers
juin 2007 ~ Brigitte Groléas ~ 19
Accès aux éléments et aux dimensions
int tab[][]= new int[10][20];System.out.println( tab.length ); // imprime
10System.out.println( tab[0].length ); // imprime 20
Tous les accès aux tableaux sont contrôlés. Une erreur (Exception) de type :
ArrayIndexOutOfBoundsException est générée en cas de débordement.
juin 2007 ~ Brigitte Groléas ~ 20
Les Chaînes de caractères : String
java.lang.String String s = "Bonjour";
String s = "Coucou"; StringBuffer buf = new StringBuffer( s ); buf.append( " me revoilou" ); System.out.println( buf );
l’opérateur « + » int i = 5;System.out.println( "i = " + i );
Si une opérande n’est pas de type String,
elle est convertie en une chaîne pour les types primitifs
ou via la méthode « toString() » pour les types non-primitifs.
juin 2007 ~ Brigitte Groléas ~ 21
Les Opérateurs 1
PREC NOM OPERANDE ASSOCIATIVITE1 ++, --, +, - numérique D
~ entier D! booleen Dnew, (type) tout type D
2 *, /, % numérique G3 +, - numérique G
+ String G4 >>, <<, >>> entier G5 >, >=, <, <= numérique G
instanceof objet G
juin 2007 ~ Brigitte Groléas ~ 22
Les Opérateurs 2
PREC NOM OPERANDE ASSOCIATIVITE6 ==, != primitif,référence G7 & entier ou booleen G8 ^ entier ou booleen G9 | entier ou booleen G10 && booleen G
11 || booleen G12 ? : booleen,exp,exp D13 =, +=, -=, *=, /=, %=, variable, exp D
<<=, >>=,>>>=, &=, |=, ^=
juin 2007 ~ Brigitte Groléas ~ 23
Sens d'évaluation
La flèche « --> » indique que
les opérateurs sont évalués de la gauche vers la droite. C'est le cas de la majorité des opérateurs.
La flèche « <-- » indique que Les opérateurs sont évalués de la droite vers la
gauche. C'est le cas des opérateurs unaires et des opérateurs d'affectations
3 + 4 - 7 + 6 - 5 <==> (((3 + 4) - 7) + 6) - 5 3 + 12 * 5 / 3 <==> 3 + ( (12 * 5) / 3 ) x < 2 || x > 5 && x < 7 <==> (x<2) || ((x>5) && (x<7)) x = y = z = 5 <==> x = ( y = (z = 5) ) x = y = z++ * -a <==> x = (y = ((z++) * (-a))) x = y > 7 <==> x = ( y > 7 )
juin 2007 ~ Brigitte Groléas ~ 24
Opérateurs Arithmétiques
- Moins unaire -X - Division X / Y - Multiplication X * Y - Modulo X % Y - Addition X + Y
- Soustraction X - Y
Division.est entière lorsque les 2 termes de l'expression sont entiers. Si 1 des termes est « float » ou « double », elle sera réelle.
Le modulo (reste de la division entière) ne peut s'employer que sur des
types entiers
juin 2007 ~ Brigitte Groléas ~ 25
Opérateurs binaires
Complément binaire Et binaire
Ou inclusif binaire
Ou exclusif binaire
X = 1 1 0 0 1 0 1 1 Y = 1 1 1 0 0 0 1 1 ----------------- X & Y = 1 1 0 0 0 0 1 1
X = 0 0 1 1 0 0 1 1 ----------------- ~X = 1 1 0 0 1 1 0 0
X = 1 1 0 0 1 0 1 1 Y = 1 1 1 1 0 0 0 1 ------------------------ X | Y = 1 1 1 1 1 0 1 1
X = 1 1 0 0 1 0 1 1 Y = 1 1 1 1 0 0 0 1 ------------------------ X ^ Y = 0 0 1 1 1 0 1 0
juin 2007 ~ Brigitte Groléas ~ 26
Exemples
Exemple: Isoler les 3 derniers bits d'un mot. X = b7 b6 b5 b4 b3 b2 b1 b0 7 = 0 0 0 0 0 1 1 1 ------------------------- X & 7 = 0 0 0 0 0 b2 b1 b0
Exemple: tester si le bit « b3 » du mot « X » est à « 1 ».
X = b7 b6 b5 b4 b3 b2 b1 b0 8 = 0 0 0 0 1 0 0 0 ------------------------- X & 8 = 0 0 0 0 b3 0 0 0
juin 2007 ~ Brigitte Groléas ~ 27
Décalage
Décalage à droite
Décalage à
gauche
5 = 0 0 0 0 0 1 0 1 ------------------------ 5 >> 1 = 0 0 0 0 0 0 1 0
= 5/2 = 2 (division entière)
5 = 0 0 0 0 0 1 0 1 ---------------- 5 << 3 = 0 0 1 0 1 0 0 0 = 5 * 8 = 40
juin 2007 ~ Brigitte Groléas ~ 28
Opérateurs d'Inc/Décrémentation
- pré-incrémentation ++X - post-incrémentation X++ - pré-décrémentation --X - post-décrémentation X--
« X = Y++; » revient à faire:
Tmp = Y; Y = Y + 1; X = Tmp;
« X = ++Y; » revient à faire: Y = Y + 1; X = Y;
juin 2007 ~ Brigitte Groléas ~ 29
Opérateur Conditionnel
<condition> ? <expression1> : <expression2>
a = ( a < b ) ? a + b : a - b;
if( a < b ) a = a + b; else a = a - b;
équivaut à
a += ( a < b ) ? b : -b;
équivaut à
juin 2007 ~ Brigitte Groléas ~ 30
À vous … vrai ou faux
1) char c; déclare un caractère sur 8 bits2) boolean b; déclare une valeur booléenne3) short i; déclare un entier signé 8 bits4) int j; déclare un entier signé 32 bits5) ClassName x; déclare une instance x de la
classe ClassName. 6) tab1= new int[100]; déclare un tableau de 100
entiers7) int tab[][] = new int[10][10]; déclare un tableau à 2
dimensions de 100 entiers8) String dico[]= { "hiboux", "choux", "genoux" };
déclare un tableau de 3 Strings initialisées
juin 2007 ~ Brigitte Groléas ~ 31
Identifier les lignes correctes pour utiliser la classe InputStream du package java.io
import java.io.*; import java.io.InputStream; import io.*; import java.*; aucun import n'est nécessaire, ce package
est importé par défaut
À vous … vrai ou faux
juin 2007 ~ Brigitte Groléas ~ 32
Pour créer un fichier Dessin.class :1) Le programme source doit s'appeler
Dessin.javac2) Une classe du fichier source doit porter le
nom de Dessin3) Une fonction main (et une seule) doit être
incluse dans n'importe laquelle des classes du fichier source
À vous … vrai ou faux
juin 2007 ~ Brigitte Groléas ~ 33
Structures de contrôle sélectives
if( condition ) { instructions à faire si vrai } else { instructions à faire si faux }
switch( expression ) { case constante_1: instruction_1.1 instruction_1.2 ... case constante_2: instruction_2.1 instruction_2.2 ... case constante_n: instruction_n.1 ... default: instruction_n+1.1 }
break
juin 2007 ~ Brigitte Groléas ~ 34
Les Itérations
while( condition ) { instructions à exécuter tant que la condition est vraie (i.e. différente de zéro) }
do { instructions } while( condition );
for( [initialisation] ; [condition] ; [incrémentation] ) { instructions }
juin 2007 ~ Brigitte Groléas ~ 35
Depuis Java 5
int [] tab = new int[10];
for (int i : tab ) somme = somme + tab[i];
juin 2007 ~ Brigitte Groléas ~ 36
Les ruptures
CONTINUEPermet de « remonter » à la partie « condition » dans la boucle
courante. Empêche l’exécution des instructions qui la suivent.
Généralement utilisée conjointement avec une instruction « if » ou « switch » imbriqué dans la boucle.
BREAK Permet de sortir d'une boucle (ou d'un « switch ») avant la fin de
la boucle (ou du « switch ») Généralement utilisée conjointement à une instruction « if »
imbriquée dans la boucle. returnPermet de sortir d’une méthode pour retourner à la méthode
appelante.