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("."));
6 Réponses :
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 " p>
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
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. P>
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é 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> 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>
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
}
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). P>
qui dit, 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. P> importation code> est utilisé par le compilateur pour accéder aux classes par leur nom non qualifié (
myClass code> au lieu de
myPackage.myclass code>). p>
Cela ne compte que dans le cas suivant, P>
Si vous souhaitez utiliser une classe disponible dans des packages multiples. I.e. La classe de date est disponible en Java.Util & Java.SQL P>
Vous pouvez importer une classe ci-dessus au début du programme et utiliser une syntaxe qualifiée pour une autre. P>
Il n'y a pas de différence, seule la deuxième solution est plus lisible. Vous ne devez utiliser que
Inline importe code> 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.