CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[java] utiliser methode sans instance?

Triple14
Triple14
Niveau 10
24 avril 2013 à 14:22:50

Y'a un truc que je comprend pas en java.
Si je me fais une classe MathPerso, qui n'a pas d'attribut, mais que des methodes, genre hypothenuse(a,b), distance(p1, p2), etc...

Et maintenant dans mon main, je veux faire ceci (enfin, ceci est ce que je ferais en python par exemple) :

int h = MathPerso.hypothenuse(a,b)

Sauf que ceci est faux évidemment.

Bref vous voyez ce que je cherche à faire. Evidemment ce serait réglé si je déclarais une instance de MathPerso. Comme ma classe n'a pas d'attribut, je trouve cependant que c'est du gachis...

Merci

godrik
godrik
Niveau 30
24 avril 2013 à 14:29:42

Regarde la notion de methode de classe et de methode d'instance, ainsi wue le mot cle static.

pseuuuuuuuuuudo
pseuuuuuuuuuudo
Niveau 10
24 avril 2013 à 14:29:51

Renseigne toi sur les méthodes statiques (ou méthodes de classe).

Triple14
Triple14
Niveau 10
24 avril 2013 à 14:43:21

Ok merci

dark_drow
dark_drow
Niveau 15
24 avril 2013 à 14:49:36

pour que ca marche il faut faire un constructeur privé et des méthodes statique comme suit :
public class Test{
private Test(){}
public static void foo(){
System.out.println("coucou");
}
}

dans ton code tu pourras faire Test.foo(); sans avoir besoin de l'instancier ;)

PocoIo
PocoIo
Niveau 10
24 avril 2013 à 15:19:23

" il faut faire un constructeur privé et des méthodes statique "

Le constructeur privé ne sert à rien.

godrik
godrik
Niveau 30
24 avril 2013 à 15:25:02

Pocoio, ca sert juste a empecher l'instanciation pour expliciter aupres du developpeur qu'un objet de la classe n'est pas sense etre construit. Il faut voir ca comme de la doc.

dark_drow
dark_drow
Niveau 15
24 avril 2013 à 16:50:28

exactement, et je n'invente rien, c'est comme ça qu'est codé la classe Math.java
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Math.java
Quand j'ai besoin d'un "truc" en java mais que je sais pas comment c'est fait en interne je farfouille direct dans l'openjdk, c'est une vraie mine d'information :oui:

PocoIo
PocoIo
Niveau 10
24 avril 2013 à 17:18:34

Cela-dit tu aurais dû le spécifier dans ta phrase d'origine, car le constructeur privé n'est pas nécessaire "pour que ça marche".

pseuuuuuuuuuudo
pseuuuuuuuuuudo
Niveau 10
24 avril 2013 à 17:21:27

C'est ta formulation qui n'est pas correcte et qui peut porter à confusion dark_drow, tu dis "pour que ça marche il faut que le(s) constructeur(s) soi(en)t privé(s)" ce qui est faux. Là à te lire on pourrait même croire que tu dis qu'il faut absolument que le constructeur soit privé pour utiliser les méthodes de classe.

dark_drow
dark_drow
Niveau 15
24 avril 2013 à 21:11:43

ah oui autant pour moi :ok:

shinigota
shinigota
Niveau 10
25 avril 2013 à 01:34:58

http://java.developpez.com/livres/javaEnfants/?page=bases#LVI-G

J'apprend le java sur ce site, j'avance doucement, mais voilà la partie qui traite sur l'utilisation de méthode sans instance :oui:

A la fin du chapitre, c'est l'exo que je fais :

http://pastebin.com/wwXws5CD

J'ai utilisé le mot clé static, comme ça après pour j'ai juste eu à faire :
String résultat = convertirTempérature(15, 'F');
System.out.println(résultat);
résultat = convertirTempérature(59, 'C');
System.out.println(résultat);
Sans instance.

Si j'avais fais public String convertirTempérature(int température, char convertirEn)

J'aurais du faire à la place :

ConvertisseurTempératures convertir = new ConvertisseurTempératures();
String résultat = convertir.convertirTempérature(15, 'F');
System.out.println(résultat);
résultat = convertir.convertirTempérature(59, 'C');
System.out.println(résultat);

Ce qui est plus chiant :hap:

Sinon j'ai pas bien compris à quoi ça sert pour de vrai, je suppose que ne pas instancier n'est pas le but, il ont pas changé ça juste pour gagner une ligne de code :hap:

_skip
_skip
Niveau 10
25 avril 2013 à 07:47:01

Si, dans l'absolu ce n'est pas loin d'être le but.

En fait les méthodes statiques sont utiles pour se faire des boîtes à outil immédiatement accessibles qui n'ont pas d'influence sur le contexte.

C'est juste plus commode à l'utilisation et ça ne nécessite pas d'instancier (même si une classe ne contenant aucun membre dynamique ne serait pas en principe très lourde à instancier).
Cependant, tu verras plus tard qu'il y a des choses qui passent très bien en statique, comme ton Convertisseur qui fait une opération mathématique fixe et figée, et d'autres moins.

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment