- Ressources
- Langages
- Java
- Les collections
- Conversion & Casting
- Dates
- Tableau
- Bytes
- Formatage
- Traitement de fichiers
- Erreurs
- Le fichier Manifest
- Servlet
- EJB 2.x
- EJB 3.x
- JNDI
- Les méthodes
- Les Threads
- Les Opérateurs
- Les Mots clés
- MOM - JMS
- Class loader
- Garbage Collector
- Les transactions
- Les primitives
- Les expressions régulières
- Les annotations
- Les génériques
- CDI
- Java
Les méthodes
Passage de paramètre
Le passage de paramètre se fait par valeur (copie de référence ou de primitive). Pour les objets, seul le pointeur de cet objet est copié. Un appel à une méthode de l'objet modifiera les données de l'objet reçu en paramètre tandis qu'une nouvelle assignation n'aura pas d'impact sur l'objet reçu en paramètre. Pour les primitives, elles sont toujours copiées.
public class TestMethods {
public static void main(String[] args) {
int primitive = 12 ;
StringBuffer objet = new StringBuffer("sion") ;
System.out.println("AVANT : prim=" + primitive + ",obj=" + objet) ;
assignation(primitive, objet) ;
System.out.println("ASSIGNATION: prim=" + primitive + ",obj=" + objet) ;
modification(objet) ;
System.out.println("MODIFICATION: prim=" + primitive + ",obj=" + objet) ;
}
private static void assignation(int primitive, StringBuffer buffer) {
primitive = 10 ;
buffer = new StringBuffer("Sion") ;
}
private static void modification(StringBuffer buffer) {
buffer.setCharAt(0, 'S') ;
}
}
ce qui donne....
AVANT : prim=12,obj=sion ASSIGNATION: prim=12,obj=sion MODIFICATION: prim=12,obj=Sion
Un article détaillé sur le passage par valeur : http://javadude.com/articles/passbyvalue.htm
Surdéfinition vs surcharge de méthode
La surcharge de méthode permet de créer dans une classe des méthodes avec le même nom mais avec des signatures différentes. Les méthodes surchargées sont différenciées par le nombre et le type de leurs arguments. Il est donc impossible de déclarer plus d'une méthode avec le même nom et le même nombre et type d'argument. Le compiler ne considère par le type du retour comme différentiation, ainsi, impossible de déclarer 2 méthodes avec la même signature mais avec un type de retour différent.
Dans l'exemple ci-dessous, au lieu d'écrire des méthodes drawString, drawInteger, drawFloat, ..., on se contente d'écrire la méthode draw(...) avec des signatures différentes.
public class DataArtist {
...
public void draw(String s) {
...
}
public void draw(int i) {
...
}
public void draw(double f) {
...
}
public void draw(int i, double f) {
...
}
}
Liste d'arguments variable (5.0)
Une liste d'arguments variable permet à une méthode de recevoir en dernier paramètre un nombre variable de valeurs (zéro ou plus). Une telle liste est déclarée en précédant le dernier paramètre de trois points ..., ce paramètre étant en fait un tableau.
Par exemple, la méthode additionner() de la classe suivante peut prendre un nombre variable d'entiers en paramètre
import static java.lang.System.*;
class AdditionnerArgumentsVariable {
public static int additionner(int x, int ... tab) {
for (int i = 0; i < tab.length; i++) {
x += tab [i];
}
return x;
}
public static void main(java.lang.String [] args) {
out.println ("1 + 2 = " + additionner(1, 2));
out.println ("1 + 2 + 3 + 4 = " + additionner(1, 2, 3, 4));
}