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 :

compréhension du system.out.println pas si evident que ca!


Sujet :

avec Java

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Points : 305
    Points
    305
    Par défaut compréhension du system.out.println pas si evident que ca!
    Salut à tous,

    J'entre dans les méandres de la programmation Java après en avoir étudié la philosophie et le principe(dans les grandes lignes seulement).

    Je m'attaque donc au code programme "HelloWorld" comme il se doit et j'essaie de bien tout comprendre pour avancer de manière sûr.

    Quand je lis cette ligne "system.out.println" je comprend bien ce qu'elle fait ce n'est pas un soucis mais je ne comprend pas COMMENT elle le fait.

    je ne trouve pas de lien entre ces 3 mots clés.

    Comment, sans avoir importé de classes dans ma classe main de mon programme, netbeans fait pour trouvé la classe "system" parmis tous les packages et classes?

    "out" est bien une variable de la class "system" mais cette class ne possède pas de méthode ou constructeur "println", alors comment est fait le lien?

    Par contre "out" est bien une variable hérité de la class "printstream" qui contient la méthode "println".Dans ce cas cela voudrait dire qu'on peut utiliser toutes les méthodes associés à la variable out ?

    En clair j'aimerais bien comprendre en détails le pourquoi du comment de cette ligne de commande qui parait si simple pour tout le monde mais pas pour moi

    Ami Javaîste j'ai besoin de votre lanterne


    PS: quel est la différence entre entre "import" et "extends" etant donné que les 2 permettant d'importer des classes dans du code ??

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par miltone Voir le message
    Comment, sans avoir importé de classes dans ma classe main de mon programme, netbeans fait pour trouvé la classe "system" parmis tous les packages et classes?
    La classe System fait partie du package java.lang qui contient les classes/interfaces fondamentales de Java. Les classes de ce packages sont toujours recherché implicitement même si tu ne l'indique pas

    En clair c'est comme si tu avais ceci au début de chaque fichier source :
    Citation Envoyé par miltone Voir le message
    "out" est bien une variable de la class "system" mais cette class ne possède pas de méthode ou constructeur "println", alors comment est fait le lien?

    Par contre "out" est bien une variable hérité de la class "printstream" qui contient la méthode "println".Dans ce cas cela voudrait dire qu'on peut utiliser toutes les méthodes associés à la variable out ?
    "out" est un attribut static et public de la classe System. Cela signifie :
    • Qu'il n'existe qu'une seule instance de l'attribut pour toute l'application (static).
    • Qu'il est visible et utilisable par toutes les classes (public).


    Donc tu es libre d'accéder à System.out et d'utiliser les méthodes de cet attribut. Et comme il est déclaré comme un PrintStream tu peux utiliser toutes les méthodes public de cette classe

    Citation Envoyé par miltone Voir le message
    PS: quel est la différence entre entre "import" et "extends" etant donné que les 2 permettant d'importer des classes dans du code ??
    Ce n'est pas du tout le même chose !!!
    • import indique au compilateur de charger cette classe car tu vas l'utiliser d'une manière ou d'une autre. C'est un prérequis pour l'utilisation de toutes classes (sauf celle de java.lang comme indiqué plus haut).
    • extends permet d'étendre une classe existante afin d'y ajouter/modifier des méthodes/comportement (c'est une des bases de la POO)



    a++

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Points : 305
    Points
    305
    Par défaut
    Ok pour le import.java.lang.
    En fait on peut dire que toutes les classes présentes dans les JAR du dossier de la JDK sont implicitement importés dans mes nouvelles classes ?
    "out" est un attribut static et public de la classe System. Cela signifie :

    * Qu'il n'existe qu'une seule instance de l'attribut pour toute l'application (static).
    * Qu'il est visible et utilisable par toutes les classes (public).
    Il m'est donc interdit d'utilisé un nom de variable "out" ?
    après "out" je peux utiliser toutes les méthodes dans lesquelles la variable ce trouve ?

    Si j'ai bien compris on utilise plutôt l'import pour importer des classes qu'on n'a developper et extends pour faire des liaisons d'héritage entre les classes?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 73
    Points : 87
    Points
    87
    Par défaut
    Bonjour,

    Citation Envoyé par miltone Voir le message
    Il m'est donc interdit d'utilisé un nom de variable "out" ?
    Non tu peux définir une variable avec le nom "out".

    Citation Envoyé par miltone Voir le message
    Si j'ai bien compris on utilise plutôt l'import pour importer des classes qu'on n'a developper et extends pour faire des liaisons d'héritage entre les classes?
    Tu dois importer certaines classes même si elle sont issues de la JDK.
    Exemple, tu veux utiliser une List, faut importer java.util.List

    Concernant l'héritage, oui "extends" te permet d'hériter mais pas uniquement entre les classes. Une interface peut étendre une autre interface.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Points : 305
    Points
    305
    Par défaut
    Tu dois importer certaines classes même si elle sont issues de la JDK.
    Comment fait-on pour savoir les classes implicitement importés et celle qu'il faut sois-même importer?

    Out de la classe system est un attribut public et static
    alors que
    ma variable out n'est pas un attribut
    donc
    je peux bien utiliser le nom de Out pour une variable et Java sera faire la différence. Ai-je bien compris ?

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 73
    Points : 87
    Points
    87
    Par défaut
    Bonjour,

    Le package java.lang est un package automatiquement importé (et donc l'ensemble des classes du package dont tu as la visibilité) lors de la compilation.
    Ce package contient les objets de base comme java.lang.Object, java.lang.String, etc. Tu n'as donc pas à l'importer dans tes développements.

    Pour les autres packages, tu dois effectivement l'importer.

    L'attribut statique "out" sera effectivement différencié de ton attribut "out" de ta classe par la JDK.

  7. #7
    Membre chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    Citation Envoyé par miltone Voir le message
    Comment fait-on pour savoir les classes implicitement importés et celle qu'il faut sois-même importer?
    Les classes que tu n'as pas besoin d'importer sont celle dont le nom de package est java.lang.

    Les classes Object, String ou encore Integer en font parti.

    Tu as la liste complète sinon.

    Citation Envoyé par miltone Voir le message
    Out de la classe system est un attribut public et static
    alors que
    ma variable out n'est pas un attribut
    donc
    je peux bien utiliser le nom de Out pour une variable et Java sera faire la différence. Ai-je bien compris ?
    Oui, car pour utiliser la variable de la classe System, il faut obligatoirement la préfixer par System (sauf en utillisant un import static mais c'est une autre histoire).

    Si ta propre variable out est une variable locale, tu va l'utiliser directement dans ta méthode sans avoir besoin de la préfixer.

    C'est comme ça que Java sait à quelle variable out accéder.

    Si c'est pas clair, dis le.

  8. #8
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Points : 305
    Points
    305
    Par défaut
    Ok Ok je pense avoir compris. Je dit "je pense" car je commence et je n'est pas encore eu l'occasion de tester réellement.
    Doucement j'y arrive. Je dois développer un petit script java pour récuperer 2 variables pour lancer mon script ant de gestion d'un projet.

    Merci à tous je ferme le sujet

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

Discussions similaires

  1. ne pas répéter System.out.println
    Par yacin87 dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 25/03/2010, 22h16
  2. [Eclipse] - Pas de sortie System.out.println
    Par VinceDDH dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 24/09/2009, 15h32
  3. Réponses: 2
    Dernier message: 30/04/2007, 10h06
  4. [tomcat 5] [paramétrage] fichier de log System.out.println
    Par Aldo dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 22/02/2005, 14h41
  5. [Linux]Problème System.out.println + compiler
    Par Dnx dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 21/09/2004, 22h05

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