IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Différence entre quelques Methodes Static en java


Sujet :

avec Java

  1. #1
    Membre régulier
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Points : 97
    Points
    97
    Par défaut Différence entre quelques Methodes Static en java
    bonjours tout le monde
    pourriez vous m'expliquer c'est quoi la différence entre les méthodes static normale comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    .......
    public static String chaine = "bonjour";
    .......
    public static void MaMethodeStatique()
        {    
            int nombre = 10;
     
            System.out.println("Appel de la méthode statique : " + nombre + chaine);  
        }
    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    @Entity
    public class User extends Model {
     
        public String email;
        public String password;
        public String fullname;
        public boolean isAdmin;
        
        public User(String email, String password, String fullname) {
            this.email = email;
            this.password = password;
            this.fullname = fullname;
        }
        public static User connect(String email, String password) {
        return find("byEmailAndPassword", email, password).first();
    }
    et bien sur avec la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static void main ...
    j'arrive pas a comprendre la méthode surtout surtout la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static User connect.....}
    ]

  2. #2
    Membre éclairé
    Homme Profil pro
    NoOb
    Inscrit en
    Mai 2007
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NoOb

    Informations forums :
    Inscription : Mai 2007
    Messages : 554
    Points : 852
    Points
    852
    Par défaut
    La méthode connect est indépendante des valeurs de l'objet. Elle pourrait se trouver ailleurs et faire le même travail.

    Elle a le même principe que ta méthode MaMethodeStatique.

  3. #3
    En attente de confirmation mail
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Octobre 2010
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 501
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonjour,

    Citation Envoyé par Génoce Voir le message
    Elle pourrait se trouver ailleurs et faire le même travail.
    Non pas exactement.
    Une méthode static n'a pas de "this", son appel n'est pas associée à un objet particulier.
    Néanmoins, elle a le droit d'accès aux membres private des objets de cette classe.

  4. #4
    Membre éclairé
    Homme Profil pro
    NoOb
    Inscrit en
    Mai 2007
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NoOb

    Informations forums :
    Inscription : Mai 2007
    Messages : 554
    Points : 852
    Points
    852
    Par défaut
    Citation Envoyé par Nudger Voir le message
    Bonjour,



    Non pas exactement.
    Une méthode static n'a pas de "this", son appel n'est pas associée à un objet particulier.
    Néanmoins, elle a le droit d'accès aux membres private des objets de cette classe.
    Tout à fait, c'était à préciser, mais dans le code fournis, elle ne le fait pas.

  5. #5
    Membre régulier
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Points : 97
    Points
    97
    Par défaut
    Merci bien pour la réponse
    Citation Envoyé par Génoce Voir le message
    La méthode connect est indépendante des valeurs de l'objet.
    voila c'est le point qui me trempe le plus ! est ce que vous pouvez m'éclaircir un peux SVP "comment elle est indépendante et comme peut on l'utilisé dans la même classe et/ou ailleurs?"
    cordialement

  6. #6
    Membre éclairé
    Homme Profil pro
    NoOb
    Inscrit en
    Mai 2007
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NoOb

    Informations forums :
    Inscription : Mai 2007
    Messages : 554
    Points : 852
    Points
    852
    Par défaut
    Si tu créer un méthode statique dans laquelle tu tentes d'acceder un attribut de l'objet, le compilo va pas être content, il voudra que tu passes cet attribut en statique.

    Le plus souvent les méthodes statiques sont des méthodes qui effectue un calcul et renvoient un résultat, dans des classes métier.

    Exemple 'alacon':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class Maths {
     
    public static int multiplier (int a, int b) {
        return a * b;
    }
     
    public static int carre (int a) {
        return a * a;
    }
     
    }

  7. #7
    Membre régulier
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Points : 97
    Points
    97
    Par défaut
    oui vous avez raison j'ai testé la Class Test avec deux attribut l'un n'est pas static et j'ai eu un erreur de compilation dans la méthode static comme vous m'avez dit ,mais les attribues de la methode connect de la class User ne sont pas static et ça marche bien quand même pourquoi ?

  8. #8
    En attente de confirmation mail
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Octobre 2010
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 501
    Points : 1 060
    Points
    1 060
    Par défaut
    Car la méthode static n'utilise pas "this", elle n'utilise que les paramètres qui lui sont donnés.

  9. #9
    Membre régulier
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par Nudger Voir le message
    Car la méthode static n'utilise pas "this", elle n'utilise que les paramètres qui lui sont donnés.
    dans méthode static on ne doit pas utiliser "this" ,Ok je comprend mais je ne c'est pas est ce que vous avez compris mon problème exactement ou nn ?
    1- l’indépendance vis a vis a les valeurs c'est a dire que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public String email;
    public String password;
    et les paramètres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connect(String email, String password)
    n’ont pas une relation ?
    si-oui je constate alors il n'est pas nécessaire de passer le mot réserver static string email et static string password de la méthode static connect .
    dernière question SVP
    pourquoi le nom de la class User précède le nom de la méthode connect ? et quel est la nécessité généralement pour faire comme ça ?
    cordialement

  10. #10
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    bon, on va reprendre la base si vous voulez bien. Vous avez, pour tout classe, plusieurs choses: un définition de la classes, c'est, "en gros" le code de la classe. Une fois compilé, lui, vous ne vous en occupez plus.

    Ensuite, la classe a un état, qui est global et qui n'est pas hérité. C'est tout ce qui est static. Se forment ainsi les méthodes de classes et les champs de classes. Comme il n'y a pas d'instance particulière concernée, on accède à ces champs et attributs via le nom de la classe.

    Après ça, on peux avoir un nombre inderterminé d'instances de la classe. Chaque instance possède des attributs d'instance, et des méthodes d'instance (tout ce qui est sans le static en gros). Ces méthodes et champs correspondent chacun à leur instance, ils ne sont pas partagée. Par facilité, le language vous fournis le mot clé "this" pour parler de "l'instance en cours", mais en général on en a pas besoin sauf quand il y a des ambiguités à lever.

    Enfin, vous avez tout ce qui est "variable locale", qui n'ont rien a voir ni avec l'instance ni avec la classe, mais juste avec le bout de code où ils apparaissent. C'est tout ce qui est paramètre de méthode et déclaration a l'intérieur de blocs de code.

    Ainsi, pour faire un exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    public class Test {
         private String name;
         private static int compteur;
         public int ajouterAuCompteur(int valeur){
             // valeur est une variable locale, compteur un champs de classe
             compteur = compteur + valeur; 
         }
         public String getName(){
             return name; // name est un champ d'instance, une valeur liée à "this" donc
         }
         public static Test findTest(String name){
            return new Test(name); // name est une variable locale qui empeche de voir le champ d'instance du même nom.
         }
         public static void main(String argv[]){
             Test test1 = Test.findTest("Hello"); // appel de la méthode statique findTest
             Test test2 = Test.findTest("World"); // appel de la méthode statique findTest
             System.out.println("le compteur est maintenant à "+Test.ajouterAuCompteur(23)); // pareil, méthode statique
              System.out.println(test1.getName()+test2.getName());  // appel de la méthode d'instance getName()
         }
    }

  11. #11
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Echap Voir le message
    pourquoi le nom de la class User précède le nom de la méthode connect ? et quel est la nécessité généralement pour faire comme ça ?
    cordialement
    Là, c'est simplement la déclaration, comme pour toute méthode, du type de retour de la méthode Ici on dit "connect est une méthode statique, qui prend deux paramètre, et qui retourne une instance de type 'User' "

  12. #12
    Membre régulier
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    146
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 146
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Là, c'est simplement la déclaration, comme pour toute méthode, du type de retour de la méthode Ici on dit "connect est une méthode statique, qui prend deux paramètre, et qui retourne une instance de type 'User' "

    vraiment j'ai posé une question de bêtise concernant le nom de la classe avant le nom de la méthode
    vraiment merci pour votre patience avec moi merci pour tout le monde

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Différence entre deux variables de type java.util.Date
    Par hetlar dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 30/08/2012, 07h04
  2. Différence entre #define et static const int
    Par memoire.ph dans le forum Débuter
    Réponses: 6
    Dernier message: 02/04/2012, 01h05
  3. Différence entre le byte-code de Java et MSIL
    Par medamin27 dans le forum Général Dotnet
    Réponses: 8
    Dernier message: 19/06/2011, 11h10
  4. Réponses: 2
    Dernier message: 11/12/2009, 22h27
  5. Différence entre J2EE 1.4 et Java EE 5
    Par walouch dans le forum Java EE
    Réponses: 1
    Dernier message: 07/02/2008, 16h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo