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 faire import paquetage.classe; et import paquetage.*;


Sujet :

avec Java

  1. #1
    Membre averti Avatar de Chatbour
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 431
    Points : 305
    Points
    305
    Par défaut Différence entre faire import paquetage.classe; et import paquetage.*;
    bonjour à tous et à toutes


    Supposons que j'ai besoin, dans mon code, d'utiliser la class File..

    Pour l'inclure, quelle est la différence entre faire import java.io.File; ou import java.io.*; ?
    est-ce que le fait de faire import java.io.*; va inclure toutes les classes ?
    est-ce qu'il y a un gain en performance en faisant import java.io.File; ?


    Merci d'avance..

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Bonjour,

    est-ce que le fait de faire import java.io.*; va inclure toutes les classes ?
    je dirais oui.

    est-ce qu'il y a un gain en performance en faisant import java.io.File; ?
    encore oui, mais si peu ...

    Nous saurons demain ce qu'en pensent les experts !

    Cordialememt.

    Dan

  3. #3
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Les imports sont utilisés uniquement par le compilateur. Il n'y a strictement aucune différence de performance entre ".*" ou ".File" lors de l'exécution.
    c'est uniquement une question de lisibilité pour le programmeur. Certains détestent le ".*", d'autres l'adorent, à toi de voir.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  4. #4
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 562
    Points : 15 493
    Points
    15 493
    Par défaut
    Le * équivaut effectivement à importer toutes les classes. Mais les classes non utilisées sont bien évidement ignorées. Il n'y a donc pas de différences en temps d'exécution ou taille des fichier class.
    La différence serait théoriquement en temps de compilation, mais en pratique il n'y en à aucune.


    L'intérêt de * est évident : ne pas se farcir 60 ligne d'import si on utilise beaucoup de classe d'un même package (typiquement awt,swing,io,util,...).
    L'intérêt de l'import individuel est d'éviter les collisions de nom. Par exemple dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import java.util.*;
    import java.sql.*;
     
    public class Main {
        Date d = new Date();
    }
    Vu qu'il y a deux objets Date différents définis dans java.util et java.sql, ce code ne compilera pas. Il te faudra rajouter un import individuel de la classe Date souhaitée, ou utiliser le nom de classe complet dans le code.

    Les IDE comme Eclipse ou Netbeans ajoutent automatiquement des import individuel et les rassemblent en une seule ligne pour ne pas surcharger la vue du code de lignes d'import. Il vaut mieux donc les laisser gérer ça.
    Mais c'est sur que si tu ne programmes pas avec un outil qui gère les import automatiquement, alors le * te simplifie la vie et ça serait dommage de t'en passer.

  5. #5
    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 dinobogan Voir le message
    Les imports sont utilisés uniquement par le compilateur. Il n'y a strictement aucune différence de performance entre ".*" ou ".File" lors de l'exécution.
    +1

    S'il y a une différence de performance, ce serait lors de la compilation uniquement... mais je ne pense pas que ce soit sensible...

    Citation Envoyé par dinobogan Voir le message
    c'est uniquement une question de lisibilité pour le programmeur. Certains détestent le ".*", d'autres l'adorent, à toi de voir.
    C'est surtout que c'est source d'ambiguïté puisqu'on ne précise jamais le type exacte de la classe que l'on veut utiliser...

    Par exemple si on fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import java.util.*;
    import java.sql.*;
    Et qu'on utilise le type Date, le compilateur sera perdu et génèrera une erreur, puisque il existe à la fois java.util.Date et java.sql.Date...


    De ce fait, l'utilisation des import * peut produire un code non-compatible avec les futurs JDK... Car en multipliant les import * on augmente le risque de conflit. Et on ne peut pas être sûr que les JDKs futurs n'introduiront pas une classe du même nom dans un autre package...

    Pour info cela a été le cas avec les classes java.lang.reflect.Proxy (Java 1.3) et java.net.Proxy (Java 1.5).


    C'est quand même des cas bien particulier, mais il est quand même préférable de limiter au maximum l'utilisation du import *, en particulier lorsqu'on utilise un EDI (qui permet de générer des imports propres).


    a++

    [edit] Grillé par Uther
    Faut dire que j'ai mis une plombe à taper cela

  6. #6
    Membre averti Avatar de Chatbour
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 431
    Points : 305
    Points
    305
    Par défaut
    Merci beaucoup à vous

    je propose que vous ajoutez cette information dans la FAQ..

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/05/2010, 16h48
  2. Différence entre "import abcd" et "from abcd import *"
    Par jlg_47 dans le forum Général Python
    Réponses: 6
    Dernier message: 21/05/2010, 14h31
  3. Classe: faire la différence entre un attribut et une méthode
    Par rambc dans le forum Général Python
    Réponses: 5
    Dernier message: 15/11/2009, 16h44
  4. Réponses: 5
    Dernier message: 29/01/2008, 19h22
  5. Réponses: 4
    Dernier message: 07/07/2006, 17h48

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