8
votes

Différence entre utilisation du nom et importation entièrement qualifiés en Java

Y a-t-il des différences à l'aide d'une "importation intégrée" (nom entièrement qualifié) et d'importation normale en termes de performance, de mémoire, de compilation-heure, etc. en Java?

import java.io.File;
...
   chooser.setCurrentDirectory(new File("."));


2 commentaires

Il n'y a pas de différence, seule la deuxième solution est plus lisible. Vous ne devez utiliser que Inline importe s'il existe un conflit de cours sinon.


Je vous suggérerais d'utiliser le second pour une meilleure lisibilité. Et souciez des performances lorsque vous avez des mesures ce qui fonctionne mal.


6 Réponses :


4
votes

Non, les deux sont exactement les mêmes dans les termes de la performance, de la mémoire, de la compilation. La seule différence entre eux est que l'importation normale enregistre vos efforts de frappe et il est plus lisible que "


0 commentaires

3
votes

Si vous importaez des cours du même nom em> dans une classe em>, vous pouvez explicitement dire lequel à utiliser où (Nom de la classe complète):

import java.io.File;
...
chooser.setCurrentDirectory(new File(".")); // java.io.File

new org.yourpackage.File("sdfsdf");         // org.yourpackage.File


0 commentaires

2
votes

Non, cela n'affecterait pas les performances de votre code. Les instructions d'importation rendent votre code plus lisible car vous n'écrivez pas à tous votre nom de votre colis. Mais parfois, vous avez un conflit de noms de classe, alors il est conseillé d'utiliser des noms qualifiés.


0 commentaires

11
votes

La principale chose que vous devriez vous concentrer est la lisibilité. Je trouve le second plus lisible.

Dans de rares cas, je préfère la deuxième approche. Considérons le scénario suivant: Pour une raison quelconque, j'ai écrit une classe et je l'ai nommé fichier code>. J'ai dactié fichier fichier = nouveau fichier (...) code> et mon IDE auto-importé le java.io.file code> pour moi. Mais je ne veux pas ce genre d'objet, je veux mon em> fichier code> classe. Donc, au lieu d'importer la bonne classe, je préfère l'importer en ligne, juste que les autres utilisateurs ne seront pas confondus avec la classe code> de fichier code> de java. P>

concernant la performance, elles " Ré exactement em> le même, et voici la preuve - p>

Ceci est le bytecode généré pour le premier extrait: P>

public class java8.tests.General {
  public java8.tests.General();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: new           #2                  // class javax/swing/JFileChooser
       3: dup
       4: invokespecial #3                  // Method javax/swing/JFileChooser."<init>":()V
       7: astore_1
       8: aload_1
       9: new           #4                  // class java/io/File
      12: dup
      13: ldc           #5                  // String .
      15: invokespecial #6                  // Method java/io/File."<init>":(Ljava/lang/String;)V
      18: invokevirtual #7                  // Method javax/swing/JFileChooser.setCurrentDirectory:(Ljava/io/File;)V
      21: return
}


0 commentaires

1
votes

Dans les classes Java sont toujours référencées par leur nom pleinement qualifié dans le byTecode final. Il arrive la première fois lorsqu'un objet de classe est créé (ou un membre statique de la classe est accessible).

qui dit, importation est utilisé par le compilateur pour accéder aux classes par leur nom non qualifié ( myClass au lieu de myPackage.myclass ).

Il y a donc une différence entre l'importation de la classe ou l'écriture explicitement du nom pleinement qualifié - il s'agit simplement d'une matière de lisibilité, enregistre une partie de la saisie et aide à prévenir les affections entre les classes avec un même nom.


0 commentaires

3
votes

Cela ne compte que dans le cas suivant,

Si vous souhaitez utiliser une classe disponible dans des packages multiples. I.e. La classe de date est disponible en Java.Util & Java.SQL

Vous pouvez importer une classe ci-dessus au début du programme et utiliser une syntaxe qualifiée pour une autre.


0 commentaires