J100 (JSB)

37
juin 2007 ~ Brigitte Groléas ~ 1 J100 (JSB) Java : Syntaxe de Base

description

J100 (JSB). Java : Syntaxe de Base. 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\bin Indique la situation de java et javac - PowerPoint PPT Presentation

Transcript of J100 (JSB)

juin 2007 ~ Brigitte Groléas ~ 1

J100 (JSB)

Java : Syntaxe de Base

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.

juin 2007 ~ Brigitte Groléas ~ 37

Les blocs labelisés

un: while ( ...) { ... deux: for(...) { ... trois: while (...) { ...if (...) continue un; if (...) break deux; continue; }

} }

Reprend sur la première

boucle while

Quitte la boucle for Reprend sur

deuxième boucle while (trois)