Vous êtes sur la page 1sur 63

Atelier Java

Année universitaire 2023/2024

CHAPITRE 4 : LES MÉTHODES


Houda ALAYA
INTRODUCTION AUX MÉTHODES
Une méthode est un ensemble d'instructions regroupées ensemble pour
effectuer une opération.
Structure de définition de méthode :

2
INTRODUCTION AUX MÉTHODES

Le profil des paramètres fait référence au type, à l'ordre et au nombre


des paramètres d'une méthode.
La signature de la méthode est la combinaison du nom de la méthode
et des profils de paramètres.
Les paramètres définis dans l'en-tête de la méthode sont appelés
paramètres formels.
Lorsqu'une méthode est invoquée, ses paramètres formels sont
remplacés par des variables ou des données, appelées paramètres réels.

3
NOTES

Si le type de données de retour d'une méthode est "void",


alors elle ne peut pas renvoyer de valeur à la méthode
appelante.
Si le type de données de retour de la méthode est autre
que "void", tel que "int, float, double", alors elle peut
renvoyer des valeurs à la méthode appelante.
Seule une valeur peut être renvoyée à partir d'une méthode.

4
TYPES DES METHODES

Methods

Predefined User-defined
Methods Methods

String Character Math

5
EXEMPLE 1

public static int max(int num1, int num2)


{
if (num1 > num2)
return num1;
else
return num2;
}

6
APPEL DES MÉTHODES

pass i
pass j

public static void main(String[] args) { public static int max(int num1, int num2) {
int i = 5; int result;
int j = 2;
int k = max(i, j); if (num1 > num2)
result = num1;
System.out.println( else
"The maximum between " + i + result = num2;
" and " + j + " is " + k);
} return result;
}

7
APPEL DES METHODES

The main method pass 5 The max method

i: 5 num1: 5
pass 2
parameters

j: 2 num2: 2

k: 5 result: 5

8
ATTENTION

Une instruction de retour est nécessaire pour une méthode non


void. La méthode suivante est logiquement correcte, mais elle
présente une erreur de compilation, car le compilateur Java
pense qu'il est possible que cette méthode ne renvoie aucune
valeur.
public static int xMethod(int n) {
if (n > 0) return 1;
else if (n == 0) return 0;
else if (n < 0) return –1;
}

Pour résoudre ce problème, supprimez if (n<0) dans le code.

9
PASSAGE PAR VALEUR/ PASSAGE PAR RÉFÉRENCE
D'OBJET

Il existe deux façons de passer des valeurs ou des données à
une méthode en Java : le passage par valeur et le passage
par objet.
La valeur d'origine n'est pas modifiée dans le passage par
valeur, mais elle est modifiée dans le passage par référence.
Dans ce chapitre, nous ne traiterons que le passage par
valeur.
Pour modifier la valeur d'origine, nous devons utiliser :
IntClass à la place de int
DoubleClass à la place de double
StringBuffer à la place de String

10
PASSAGE PAR VLEUR pass num1
Pass num2

public static void main(String[] args) { public static void swap(int n1, int n2) {
int num1 = 1;
int num2 = 2; int temp;
swap(num1, num2);
temp = n1;
System.out.println( n1 = n2;
"num1= " + num1 + n2 = temp;
"\n num2= " + num2); }
}

num1= 1
num2 = 2

11
PASSAGE PAR VALEUR
Invoke swap
num1 1 Les valeurs de num1 et
swap(num1, num2) num2 sont passées à n1 et
num2 2 n2. L'exécution de l'échange
ne modifie pas num1 et
num2..
Pass by value

swap( n1, n2) n1 1 Swap n1 2

n2 2 n2 1

temp 1

Execute swap inside the swap body

12
SURCHARGE DES MÉTHODES
Surcharge de méthode : Création de plusieurs méthodes, au
sein d'une classe, portant le même nom mais ayant des profils
de paramètres différents.

public static double max(double


num1, double num2) {
if (num1 > num2)
return num1;
else
return num2; Dans l'appel de méthode, le profil des para
} mètres détermine quelle méthode exécuter !
public static int max(int num1,
int num2) {
if (num1 > num2)
return num1;
else
return num2;
}
13
SURCHAGE DES MÉTHODES

14
INVOCATION AMBIGUË

Parfois, il peut y avoir deux ou plusieurs correspondances


possibles pour une invocation d'une méthode, mais le
compilateur ne peut pas déterminer la correspondance la plus
spécifique. Cela est appelé une invocation ambiguë.
L'invocation ambiguë est une erreur de compilation.

15
INVOCATION AMBIGUË

16
MÉTHODES AVEC UN NOMBRE VARIABLE DE
PARAMÈTRES (VARARGS)
Syntaxe:
MethodName(data_type … VarName)

Les varargs sont des tableaux, donc nous travaillons avec eux comme
nous le ferions avec un tableau normal.
Vous pouvez les appeler avec 0 ou plusieurs arguments.
Règles :
Chaque méthode ne peut avoir qu'un seul paramètre varargs.
L'argument varargs doit être le dernier paramètre.

17
VARARGS EXEMPLE

18
PORTÉE (IDENTIFIANT LOCAL/GLOBAL)

La portée d'une déclaration est le bloc de code où


l'identificateur est valide pour être utilisé.
Une déclaration globale est faite en dehors des corps de
toutes les fonctions et en dehors du programme principal. Elle
est placée au début du fichier du programme.
Une déclaration locale est celle qui est faite à l'intérieur du
corps d'une fonction. Les variables déclarées localement ne
peuvent pas être accessibles en dehors de la fonction dans
laquelle elles ont été déclarées.
Il est possible de déclarer le même nom d'identificateur dans
différentes parties du programme.
19
PORTÉE (IDENTIFIANT LOCAL/GLOBAL)

20
QUELQUES MÉTHODES PRÉDÉFINIES

Quelques méthodes prédéfinies dans le package java.lang :


La classe Math
La classe String
La classe Character
Analyse des chaînes (Parsing String)

21
LA CLASSE MATH
LA CLASSE MATH

Constantes de la classe :
PI
E
Méthodes de la classe :
Méthodes trigonométriques
Méthodes exponentielles
Méthodes d'arrondi
Méthodes min, max, abs et random

23
LA CLASSE MATH

Méthodes trigonométriques
sin(double a)
cos(double a)
tan(double a)
acos(double a)
asin(double a)
atan(double a)

24
LA CLASSE MATH

Méthodes exponentielles
exp(double a)
Renvoie e élevé à la puissance de a.
log(double a)
Renvoie le logarithme naturel de a.
pow(double a, double b)
Renvoie a élevé à la puissance de b.
sqrt(double a)
Renvoie la racine carrée de a.

25
LA CLASSE MATH
Méthodes d'Arrondi:
 double ceil(double x)
x arrondi vers le haut à son entier le plus proche. Cet entier est retourné en tant
que valeur double.
double floor(double x)
x est arrondi vers le bas à son entier le plus proche. Cet entier est retourné en tant
que valeur double.
int round(float x)
long round(double x)
round(23.56) retourne la valeur 24
round(23.35) retourne la valeur 23
Si x est de type float, la valeur retournée est de type int
Si x est de type double, la valeur retournée est de type long 26
LA CLASSE MATH

max(a, b) et min(a, b)
Retourne le maximum ou le minimum de deux paramètres.
abs(a)
Retourne la valeur absolue du paramètre.
random()
Retourne une valeur double aléatoire dans l'intervalle [0.0, 1.0].

27
EXERCICE 1
CALCUL DE LA MOYENNE ET DE L'ÉCART-TYPE
Écrivez un programme qui génère 10 nombres aléatoires et calcule
la moyenne et l'écart-type.

𝑥 est la moyenne
S est l’écart type

𝑛
𝑖=1 𝑥𝑖
𝑥=
𝑛

28
LA CLASSE CHARACTER
LA CLASSE CHARACTER

boolean isDigit(char ch)


boolean isLetter(char ch)
boolean isLetterOrDigit (char ch)
boolean isLowerCase (char ch)
boolean isUpperCase (char ch)
boolean isSpaceChar (char ch)
boolean isWhitespace (char ch)
char toLowerCase(char ch)
char toUpperCase(char ch)

30
LA CLASSE CHARACTER

31
LA CLASSE CHARACTER

32
EXERCICE 2 :
COMPTER LE NOMBRE DE LETTRES ET DE
CHIFFRES DANS UNE CHAÎNE DE CARACTÈRES
Écrivez un programme qui lira une chaîne de caractères de
l'utilisateur, comptera le nombre de lettres et de chiffres, puis
l'affichera à l'écran.

33
LA CLASSE STRING
LA CLASSE STRING
CONSTRUCTION DE CHAÎNES DE CARACTÈRES
String newString = new String(stringLiteral);

String message = new String("Bienvenue à Java !");

Étant donné que les chaînes de caractères sont souvent utilisées,


Java propose une notation abrégée pour créer une chaîne de
caractères :

String message = "Bienvenue à Java !";

35
LA CLASSE STRING

Trouver la longueur d'une chaîne en utilisant la méthode length() :


message = "Bienvenue";
message.length() (renvoie 9)
Récupération de caractères individuels
Ne pas utiliser message[0]
Utiliser message.charAt(index)
L'index commence à partir de 0

Indices 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

message W e l c o m e t o J a v a

message.charAt(0) message.length() is 15 message.charAt(14) 36


LA CLASSE STRING
CONCATENATION
String s3 = s1.concat(s2);

String s3 = s1 + s2;

s1 = “Hello“
s2 = “ World!“

S3 = “Hello World!”
37
LA CLASSE STRING
EXTRAIRE UNE SOUS CHAINE
String s1 = "Welcome to Java";
String s2 = s1.substring(0, 11) + "HTML";

Indices 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

s1 W e l c o m e t o J a v a

s1.substring(0, 11) message.substring(11)

Indices 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

S2 W e l c o m e t o H T M L

s1.substring(0, 11)
38
LA CLASS STRING - COMPARAISONS
Egalité:

String s1 = "welcome";
String s2 = "welcome";

if (s1.equals(s2)){
// s1 and s2 have the same contents
}

if (s1 == s2) {
// it compares addresses (thus it will always give false)

}
39
LA CLASSE STRING
COMPARAISONS
compareTo(String str)
Comparer deux chaînes de caractères lexicographiquement. Chaque caractère des deux chaînes est
converti en une valeur Unicode pour la comparaison

String s1 = "Welcome";
String s2 = "welcome";

if (s1.compareTo(s2) > 0) {
// s1 is greater than s2
}
else if (s1.compareTo(s2) == 0) {
// s1 and s2 are equal
}
else
// s1 is less than s2
40
CLASSE STRING
CONVERSION
toLowerCase ()
Convertit l'alphabet de la chaîne en minuscules
toUpperCase ()
Convertit l'alphabet de la chaîne en majuscules
trim ()
Élimine les espaces en début et en fin de chaîne

str = " Abc ";


System.out.println(str.toLowerCase()); abc
ABC
System.out.println(str.toUpperCase());
Abc
41
System.out.println(str.trim());
CLASSE STRING
CONVERSION
public String replace(char oldChar, char newChar)
retourne une chaîne remplaçant tous les anciens caractères ou
CharSequence par de nouveaux caractères ou CharSequence.

String s1 = “Programming in Java is Fun”;


String replaceString = s1.replace('a','e');
//replaces all occurrences of 'a' to 'e'
System.out.println(replaceString);

String s1 = "my name is Ahmed my name is beautiful";


String replaceString = s1.replace("is“,"was");
//replaces all occurrences of "is" to "was"
System.out.println(replaceString); Progremming in Jeve is Fun
my name was Ahmed my name was beautiful
42
CLASSE STRING
TROUVER UN CARACTÈRE/SOUS-CHAÎNE
String str = "Welcome to Java“;
str.indexOf('W')) returns 0.
str.indexOf('x')) returns -1.
str.indexOf('o', 5)) returns 9.
str.indexOf("come")) returns 3.
str.indexOf("Java", 5)) returns 11.
str.indexOf("java", 5)) returns -1.
-1 est retourné lorsque la sous-chaîne/le caractère n'existe PAS
Indices 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

str W e l c o m e t o J a v a

43
CLASSE STRING
CONVERTIR DIFFÉRENTS TYPES EN CHAÎNE DE
CARACTÈRES
public static String valueOf(Object o)
La méthode convertit différents types de valeurs (booléen, char, char[], int, long, float, double) en
chaîne de caractères.

int value=30;
String s1=String.valueOf(value);
System.out.println(s1+10);//concatenating string with 10
boolean bol = true;
boolean bol2 = false;
String s1 = String.valueOf(bol); 3010
String s2 = String.valueOf(bol2); true
false
System.out.println(s1);
44
System.out.println(s2);
LA CLASSE STRING
ANALYSE DES CHAÎNES NUMÉRIQUES
Une chaîne ne contenant qu'un entier ou un nombre décimal est
appelée une chaîne numérique. Exemple :
Integer.parseInt(strExp)
int x = Integer.parseInt(“6723”) x = 6723
Float.parseFloat(strExp)
float f = Float.parseFloat(“-4.2”) f = -4.2
Double.parseDouble(strExp)
double d = Double.parseDouble(“345.28”) d = 345.28
Notez que Integer, Float et Double sont des classes qui
contiennent des méthodes pour convertir une chaîne numérique
en un nombre.
45
EXERCISE 3:
CHAÎNE PALINDROME
Écrivez une méthode qui retournera true si un nombre donné est un
palindrome, sinon false : un nombre palindrome se lit de la même
manière de gauche à droite et de droite à gauche.

46
REMARQUES IMPORTANTES
Pour utiliser l'une des méthodes prédéfinies mentionnées précédemment, vous n'avez
pas besoin d'inclure de package ! Puisque leurs classes (Math, Character, String,
Integer, Double, Float) sont incluses dans le package (java.lang) qui est implicitement
inclus dans n'importe quelle classe Java.
La syntaxe pour utiliser les méthodes statiques :
Nom_De_Classe.nom_de_la_méthode()
Math.abs(-5)
•Toutes les méthodes de Math sont statiques.
Pour utiliser les méthodes non statiques : vous devez définir un objet du type de
classe donné, puis vous pouvez accéder aux méthodes en utilisant le nom de l'objet.
•String str = "Java is Fun!";
•str.substring(0, 7)
Le point (.) en Java est l'opérateur d'accès aux membres. 47
LES METHODS STATIQUES
QU'EST-CE QUE "STATIC" ?

Le mot-clé "static" signifie qu'un membre particulier appartient au


type (classe) lui-même, plutôt qu'à une instance de ce type.
Cela signifie que nous créerons seulement une seule instance de ce
membre statique (attribut/méthode) qui est partagée par toutes les
instances de la classe.
Le mot-clé "static" en Java est principalement utilisé pour la
gestion de la mémoire.

49
VARIABLE STATIQUE

La variable statique peut être utilisée pour faire référence à la


propriété commune à tous les objets (qui n'est pas unique pour chaque
objet), par exemple, le nom de l'entreprise pour la classe Employee
dans l'entreprise X.
La variable statique occupe de la mémoire seulement une fois dans la
zone de classe au moment du chargement de la classe.
Avantages de la variable statique :
Cela rend votre programme plus efficace en termes de mémoire
(c'est-à-dire, cela économise de la mémoire).

50
EXEMPLE 1 : STATIQUE VS NON-STATIQUE

Supposons que nous ayons 500 étudiants dans


ce collège, maintenant tous les attributs
occuperont de la mémoire à chaque fois qu'un
objet est créé, y compris le collège.
Tous les étudiants ont leur numéro de rouleau et
leur nom uniques, donc les créer en tant que
“IT” membres non statiques est une décision sage.
 Cependant, "college" ici fait référence à la
propriété commune de tous les objets. Si nous le
rendons statique, ce champ n'occupera de la
mémoire qu'une seule fois.

51
class Student{
int rollno;//instance variable
String name;
static String college ="IT";//static variable
//constructor
Student(int r, String n){
rollno = r;
name = n;
}
//method to display the values
void display (){System.out.println(rollno+" "+name+" "+college);}
}
//Test class to show the values of objects
public class TestStaticVariable1{
public static void main(String args[]){
Student s1 = new Student(111,“Ahmed");
Student s2 = new Student(222,“Khouloud");
//we can change the college of all objects by the single line of code
//Student.college="BBDIT";
s1.display();
52
s2.display(); } }
College = “IT”

Class Area

id= 222
name= “Ahmed”

id= 333
S2
name= “Khouloud”
S1
Heap Memory
53

Stack Memory

53
EXEMPLE 2
class Counter{
int count=0;
//will get memory each time when the instance is create
d

Counter(){
count++; //incrementing value
System.out.println(count);
}

public static void main(String args[]){


//Creating objects
Counter c1=new Counter();
Counter c2=new Counter();
Counter c3=new Counter();
}
} 54
class Counter{
Static int count=0;
//will get memory only once and retain its value

Counter(){
count++;//incrementing the value of static variable
System.out.println(count);
}

public static void main(String args[]){


//creating objects
Counter c1=new Counter();
Counter c2=new Counter();
Counter c3=new Counter();
}
}

55
MÉTHODE STATIQUE

Une méthode statique appartient à la classe plutôt qu'à l'objet


d'une classe.
Une méthode statique peut être invoquée sans avoir besoin de
créer une instance d'une classe.
Une méthode statique peut uniquement accéder aux membres de
données statiques et aux méthodes statiques de la même classe ou
d'une autre classe, mais ne peut pas accéder aux méthodes et
variables non statiques. De plus, une méthode statique peut réécrire
les valeurs de n'importe quel membre de données statique.
Une méthode non statique peut accéder aux membres de
données statiques et aux méthodes statiques ainsi qu'aux membres
et méthodes non statiques d'une autre classe.
56
EXEMPLE MÉTHODE STATIQUE
class Student{
//Test class
int rollno;
public class TestStaticMethod{
String name;
public static void main(String arg
static String college = "IT";
s[]){
//static method to change the value of
//calling change method
static variable
Student.change();
static void change(){
//creating objects
college = "BBDIT";
Student s1 = new Student(111,"Kara
}
n");
//constructor to initialize the variable
Student s2 = new Student(222,"Arya
Student(int r, String n){
n");
rollno = r;
Student s3 = new Student(333,"Sono
name = n;
o");
}
//calling display method
//method to display values
s1.display();
void display(){
s2.display();
System.out.println(rollno+" "+name+"
s3.display();
"+college);
}
}
}
} 57
POURQUOI LA MÉTHODE PRINCIPALE DE JAVA
EST-ELLE STATIQUE ?

Cela est dû au fait qu'un objet n'est pas nécessaire pour appeler
une méthode statique. Si c'était une méthode non statique, le JVM
créerait d'abord un objet puis appellerait la méthode main(), ce
qui entraînerait le problème d'une allocation de mémoire
supplémentaire !

58
LES FICHIERS
LECTURE/ÉCRITURE DEPUIS/DANS UN FICHIER
1. Importez les packages nécessaires pour la lecture/écriture.
 Import java.io.*;
 Import java.util.*;
2. Créez et associez les objets appropriés avec les sources d'entrée/sortie.
Scanner inFile = new Scanner(new FileReader(“FileName.txt”));
PrintWriter outFile = new PrintWriter (“outputFile.txt”);
3. Utilisez les méthodes appropriées associées aux objets créés à l'étape 2 pour l'entrée/sortie
de données.
Vous utiliserez les mêmes méthodes prédéfinies associées à Scanner que nous avons étudiées
dans le Chapitre 1 :
inFile.next()
inFile.nextLine()
inFile.nextInt()
inFile.nextDouble()
60
etc
LECTURE/ÉCRITURE DEPUIS/DANS UN FICHIER
Pour parcourir votre fichier jusqu'à la fin de fichier (EOF), vous utiliserez la
méthode prédéfinie suivante à l'intérieur d'une boucle :
inFile.hasNext()
et les mêmes méthodes prédéfinies pour la sortie :
outFile.print()
outFile.println()
outFile.printf()
Votre méthode principale (main) devrait (throws FileNotFoundException)
public static void main(String[] args) throws FileNotFoundException {}
Fermer les fichiers:
inFile.close();
outFile.close(); 61
EXEMPLE

62
REMARQUES
Si le fichier d'entrée/sortie est situé dans le même dossier de projet, vous
n'avez pas besoin de spécifier le chemin complet du fichier.
Scanner inFile = new Scanner(new
FileReader("C:/Users/Documents/NetBeansProjects/lab3/students.txt"));
Le fichier de sortie n'a pas besoin d'exister avant d'être ouvert.
S'il n'existe pas, l'ordinateur préparera un fichier vide pour votre sortie
avec le nom que vous avez spécifié.
Si le fichier de sortie désigné existe déjà, par défaut, le contenu
précédent est effacé lorsque le fichier est ouvert.
Notez que si le programme N'EST PAS en mesure d'accéder/créer le
fichier d'entrée/sortie, il lance une FileNotFoundException.
Cela se produit généralement en raison d'un mauvais chemin d'accès ou
d'un mauvais nom de fichier. 63

Vous aimerez peut-être aussi