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 :

m'expliquer ce code


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 31
    Points : 29
    Points
    29
    Par défaut m'expliquer ce code
    Bonjour à Tous,

    J'ai trouvé le code ci-dessous qui correspond bien à ce que je souhaite faire (récupérer dans informations sur l'OS qui tourne sur le pc):
    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
     
    import java.io.*;
    import java.util.Properties;
     
    public class Statut_PC {
    	public static void main(String[] args) {
    	    // TODO Auto-generated method stub
    	    Properties pro = System.getProperties();
    	    for(Object obj : pro.keySet()){
     
    	        System.out.println(" System "+(String)obj+"     :  "+System.getProperty((String)obj));
     
    	    }
    	}
    }
    Mais je ne parviens pas à comprendre le fonctionnement de deux lignes en particulier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      Properties pro = System.getProperties();
    	    for(Object obj : pro.keySet()){
    Si un pédagogue peut m'éclairer je suis preneur.

    A+

  2. #2
    Membre à l'essai Avatar de -Zak-
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Juillet 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 4
    Points : 15
    Points
    15
    Par défaut
    Salut,

    Je suis un débutant, mais voila ce que j'ai pu trouver par rapport à ton code.

    Pour la première ligne :
    La méthode System.getProperties() retourne une liste des propriétés systèmes sous la forme d'un objet de type référence Properties.*

    Pour la deuxième ligne :
    Il s'agit d'une boucle for améliorée (ou foreach dans d'autres languages), qui va sélectionner chaque "élément" présent dans ton objet "pro". (qui contient toutes les propriétés systèmes).


    *source : http://roger.neel.free.fr/langages/c...e_systeme.html

  3. #3
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Properties pro = System.getProperties();
    Cette ligne de code permet de créer un objet nommé "pro" représentant une instance de la classe java.util.Properties fournie par la méthode getProperties de la classe java.lang.System
    Cette instance fournie contient sous la forme d'une liste de paires clés - valeurs un certain nombre de variables système de la machine virtuelle Java, pas du système hôte.
    En effet, sous Windows, la variable système représentant la home directory de l'utilisateur en session se nomme "HOMEPATH" et vaut "\Users\nom de l'utilisateur en session".
    Dans l'environnement Java, la variable équivalente est "java.home" et contient un chemin complet "C:\Users\nom de l'utilisateur en session".
    java.home est une variable d'environnement JVM, HOMEPATH est une variable d'environnement Windows, il ne faut pas confondre les deux.

    Pour ce qui est de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(Object obj : pro.keySet()){...
    Zak vous l'a très bien expliqué, il s'agit d'une boucle de type ForEach qui demande l'exécution de la ligne de code System.out.println pour chaque instance d'objet obj trouvée dans la liste renvoyée par la méthode KeySet() de l'objet pro. En clair, la boucle est définie pour se faire sur chaque clé trouvée dans la liste pro.KeySet() qui représente la liste de toutes les clés contenues dans l'objet pro.
    La ligne de code exécutée pour chaque itération de cette boucle permet de construire une chaîne de texte présentant sur la console la clé et sa valeur avec un retour à la ligne "println"

    Cependant, si on examine bien la documentation de l'API Java pour ce qui concerne la classe java.util.Properties, on remarque que cette classe possède une méthode très pratique, la méthode "list(paramètre)".
    Cette méthode propose deux variantes en paramètre, soit on lui fournit un printStream, soit on lui fourni un printWriter. Ça tombe bien, le field "out" de la classe System qui représente la console de sortie est un printStream.
    Donc, on peut faire plus simple, en une seule ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.getProperties().list(System.out);
    Pour revenir à la différenciation entre variable d'environnement JVM et variable d'environnement système, si c'est la liste des variable système, plus précisément des variables utilisateur que vous désirez lister, vous devez procéder ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    java.util.Map liste = System.getenv();
    for (Object o: liste.keySet()) System.out.println(o+"="+liste.get(o));
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 838
    Points : 22 846
    Points
    22 846
    Billets dans le blog
    51
    Par défaut
    La liste complète des propriétés "légales" est donnée dans la javadoc.
    Certaines bibliothèques ou des paramètres au lancement de l'application peuvent modifier ces propriétés ou en ajouter de nouvelles.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut
    Bonjour,
    Désolé, en me relisant je remarque avoir dit une grosse bêtise ...
    En effet, dans mon mini récit en première partie j'essaie d'attirer votre attention sur la différenciation entre les variables utilisateurs du système hôte que l'on va appeler les variables système, et les variables système liées à l'environnement de la machine virtuelle Java, JVM.
    Pour expliquer ces différences je me suis appuyé sur une variable qui existe dans les deux environnements et qui représente le chemin d'accès au répertoire hôte de l'utilisateur aussi appelé HomeDirectory.
    Et là j'ai dit une grosse bêtise :
    la variable équivalente est "java.home" et contient un chemin complet "C:\Users\nom de l'utilisateur en session".
    C'est faux ! Il ne s'agit pas de java.home qui elle représente le répertoire d'installation de la machine virtuelle Java mais de user.home qui elle représente le dossier hôte de l'utilisateur.
    Si déjà on essai d'être précis, il vaut mieux ne pas dire de bêtise il me fallait donc corriger cette énorme erreur.
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 31
    Points : 29
    Points
    29
    Par défaut
    Merci YOTTA pour ces explications.

    Mais dans ton explication tu évoque "une instanciation fournie par une méthode". (voir ci-apres)
    Citation Envoyé par yotta Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Properties pro = System.getProperties();
    Cette ligne de code permet de créer un objet nommé "pro" représentant une instance de la classe java.util.Properties fournie par la méthode getProperties de la classe java.lang.System
    Là c'est une chose nouvelle pour moi dans JAVA.
    Il me semblait que pour instancier un objet on rédigeait quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String toto = new String();
    Comment peut-on instancier un objet avec une méthode?

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Hello,

    ben tu es d'accord avec moi qu'une méthode, c'est un bout de code, qui peut être appelé par un autre ? Ce qui peut servir à garder quelque part un bout de code dont tu as besoin plusieurs fois dans ton programme, et éviter de le recopier à chaque fois ?

    Et ce bout de code est capable de fournir les résultats de ce qu'il fait, on est bien d'accord ? Par exemple, je peux faire une méthode addition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public int addition(int a, int b) {
      return a + b;
    }
    Eh ben dans le même genre je peux faire une méthode creerMonScanner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public Scanner creerMonScanner() {
      return new Scanner(System.in);
    }
    Et du coup quand on l'appelle comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Scanner scanner = creerMonScanner();
    On ne voit pas le new qui a créé l'objet... Parce que le new est à l'intérieur de la méthode !
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut
    Bonsoir,
    Je me permets une petite correction alunix.
    On instancie pas un objet, on instancie une classe, et le résultat de cette instance une fois initialisée (après que le constructeur ce soit terminé) donne un objet. Si je ne me trompe pas, ça n'a rien à voir à Java, c'est un des principes de la programmation orientée objet.
    Pour ce qui concerne ma petite phrase parlant d'instanciation issue d'une méthode, j'ai utilisé ce mot pour appuyer le fait que la méthode getProperties() renvoie l'instance d'une classe, donc une instanciation. En effet, j'ai cru percevoir que vous ne faisiez pas la différence entre ces deux termes que sont classes et objets.
    Donc, la méthode getProperties() renvoie un objet, ici, une instance de la classe Properties.
    Si vous éditiez le fichier source (System.java), la partie concernant la méthode que vous utilisez, getProperties() devrait ressembler à cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    1    public static java.util.Properties getProperties() {
    2       java.util.Properties reponse = new java.util.Properties();
    3       ...
    4       ... Rempli reponse avec les variables JVM et leur valeur
    5       ...
    6       return reponse;
    7       }
    D'ailleurs, il ne faut pas vous priver de parcourir le code source, on y découvre plein de choses intéressantes. De plus, dans NetBeans, si vous l'avez installé avec un jdk complet comprenant les sources, vous devriez pouvoir voir le code source.
    Concernant le mot clé new que vous présente Thelvin, il est tout simplement indispensable puisqu'il représente le seul moyen d'instancier une classe, en invoquant son constructeur, comme dans le code exemple ci-dessus en ligne 2
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 31
    Points : 29
    Points
    29
    Par défaut
    Bonjour thelvin,

    Donc si je comprend bien ton exemple ci-dessous:

    Citation Envoyé par thelvin Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Scanner scanner = creerMonScanner();
    On ne voit pas le new qui a créé l'objet... Parce que le new est à l'intérieur de la méthode !
    Tu instancies la classe Scanner avec sa methode "creerMonScanner". Donc si la classe Scanner avait deux méthodes, avec ton code l'objet scanner ne possèderait qu'une seule méthode. Ais-je bien compris?

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Citation Envoyé par alunix Voir le message
    Tu instancies la classe Scanner avec sa methode "creerMonScanner". Donc si la classe Scanner avait deux méthodes, avec ton code l'objet scanner ne possèderait qu'une seule méthode. Ais-je bien compris?
    Pas du tout... Si tu regardes dans sa JavaDoc, tu remarqueras que la classe Scanner n'a pas de méthode creerMonScanner().

    Ben alors d'où vient cette méthode ? Eh bien, c'est moi qui l'ai écrite. Et comme je ne peux pas ajouter des méthodes aux classes déjà fournies, j'ai juste écrit cette classe dans ma classe à moi. Il se trouve que je l'ai écrite dans ma classe DireBonjour. Mais j'aurais aussi bien pu le faire dans une classe nommée Zorglub ou Toto.

    Voici ma classe DireBonjour :

    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
    public class DireBonjour {
     
      public static void main(String[] args) {
        new DireBonjour().saluer();
      }
     
      public Scanner creerMonScanner() {
        return new Scanner(System.in);
      }
     
      public void saluer() {
        Scanner scanner = creerMonScanner();
     
        System.out.println("Comment vous appelez-vous ?");
        String nom = scanner.nextLine();
     
        System.out.println("Bonjour " + nom);
      }
     
    }
    Comme tu le vois, j'écris new Scanner() à des endroits qui n'ont rien à voir avec la classe Scanner, dans des méthodes qui ne sont pas les siennes. J'utilise la classe Scanner, oui, mais je ne m'intéresse pas à la façon dont elle est programmée ni à la liste complète de ses méthodes. Je n'utilise que la méthode qui m'intéresse, nextLine(), alors qu'elle en a des tas d'autres. Je pourrais les appeler aussi mais ça ne m'intéresse pas, alors je ne m'intéresse qu'à celle que je veux.

    Bref, ce qu'il faut retenir, c'est que j'ai écris ma propre classe, et dedans mes propres méthodes, dont une qui fait new Scanner. Et rien ne m'en empêche.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Comment expliquer ce code ?
    Par beegees dans le forum Langage
    Réponses: 2
    Dernier message: 03/11/2008, 19h12
  2. Réponses: 4
    Dernier message: 10/06/2008, 00h19
  3. Pouvez vous m'expliquer ce code ?
    Par sayfouche dans le forum C#
    Réponses: 6
    Dernier message: 10/04/2008, 00h36
  4. qui peux m'expliquer ce code ligne par ligne merci
    Par superuser dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 08/04/2008, 12h25
  5. Qui expliquer ce code pour moi?
    Par hack-77 dans le forum C
    Réponses: 3
    Dernier message: 22/03/2008, 11h32

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