OVH Cloud OVH Cloud

invocation de méthode dans le main

5 réponses
Avatar
franck
Bonjour,

Dans ma classe (Main) contenant la méthode main je veux faire appel à
une méthode initialisation() de la classe Main. Il faut quelle soit
static.
Toutes les méthodes de la classe Main doivent être static ?
Merci
Franck

5 réponses

Avatar
oliv
franck wrote:
Bonjour,
Hello,


Dans ma classe (Main) contenant la méthode main je veux faire appel à
une méthode initialisation() de la classe Main.
Je trouve (avis perso) qu'appeler la classe d'entrée Main n'est pas

obligatoirement le plus commode même si ça paraît logique. Ne
serait-ce que pour ne pas risquer de confondre avec la méthode main().

Il faut quelle soit static.
C'est ton design ou c'est le compilateur qui te le dit ?


Toutes les méthodes de la classe Main doivent être static ?
Non.

Seules doivent l'être celles que tu n'appliques PAS à une instance
d'objet : ce sont des méthodes de classe.

C'est aussi pourquoi il me semble plus commode de penser à la classe
"Main" (grrr, appelons la Objet1) comme une définition d'objet :

// pas vérifié

class Objet1 {
public static void main(String[] args) {
initialisation();
Objet1 obj = new Objet1();
obj.truc();
}

// méthode de classe
private static void initialisation {
//
}

// méthode d'instance
private void truc() {
//
}

voir un tutorial java comme celui de sun pour compléter ça.

--
oliv

Avatar
franck
// pas vérifié

class Objet1 {
public static void main(String[] args) {
initialisation();
Objet1 obj = new Objet1();
obj.truc();
}

// méthode de classe
private static void initialisation {
//
}

// méthode d'instance
private void truc() {
//
}



Merci !

Encore une question: dans ma méthode initialisation() je voudrais créer
des objets qui soient static vus de la classe qui contient la méthode
main.
La méthode initialisation peut -elle renvoyer plusieurs objets ?
Merci

Avatar
oliv
franck wrote:
dans ma méthode initialisation() je voudrais créer
des objets qui soient static vus de la classe qui contient la méthode
main.
La méthode initialisation peut-elle renvoyer plusieurs objets ?
Pour plusieurs objets, tu pourrais envisager de passer par un tableau

ou un Vector.
Le plus lourdingue sera alors de transférer les valeurs retournées.

qqch comme :

public class Objet1 {
// variables de classe
static String s1 = null;
static String s2 = null;

// variables d'instance
String s3 = null;
String s4 = null;

public static void main(String[] args) {
String[] res = new String[2];
res = init_classe();
s1 = res[0];
s2 = res[1];

Objet1 obj = new Objet1();
obj.init_inst();
}

// methode de classe
private static String[] init_classe() {
String[] res = new String[2];
res[0] = "s1";
res[1] = "s2";
return res;
}

// methode d'instance
private void init_inst() {
s3 = "s3";
s4 = "s4";
}
}

Toute meilleure idée est bienvenue !

Es-tu certain d'avoir absolument besoin de variables de classe qui ne
puissent pas être définies à la déclaration ?

--
oliv

Avatar
franck
public class Objet1 {
// variables de classe
static String s1 = null;
static String s2 = null;

// variables d'instance
String s3 = null;
String s4 = null;

public static void main(String[] args) {
String[] res = new String[2];
res = init_classe();
s1 = res[0];
s2 = res[1];

Objet1 obj = new Objet1();
obj.init_inst();
}

// methode de classe
private static String[] init_classe() {
String[] res = new String[2];
res[0] = "s1";
res[1] = "s2";
return res;
}

// methode d'instance
private void init_inst() {
s3 = "s3";
s4 = "s4";
}
}

Voici ce que j'ai fait mais je ne sais pas si c'est très orthodoxe:


public class ProgPrincipal {
private static Objet1 obj1;
private static Objet2 obj2;


public static void main(String[] args) {
Initialisation init = new Initialisation();
obj1=init.creationObjt1();
obj2 = init.creationObjt2();
}

Franck

Avatar
oliv
franck wrote:
Voici ce que j'ai fait mais je ne sais pas si c'est très orthodoxe:

public class ProgPrincipal {
private static Objet1 obj1;
private static Objet2 obj2;


public static void main(String[] args) {
Initialisation init = new Initialisation();
obj1=init.creationObjt1();
obj2 = init.creationObjt2();
}

Ah bon on passe d'un design méthode initialisation() à un design

classe Initialisation.

Dans ce cas je te laisse regarder le pattern Factory.

--
oliv