web-dev-qa-db-fra.com

Java: Accéder à une classe dans un package, quelle est la meilleure façon?

Si j'accède à une classe dans un package en utilisant un nom complet, sans l'importer, si cela économise de la mémoire?

Utilisation d'un nom de classe complet:

Java.lang.Math.sqrt(x);

Package d'importation:

import Java.lang.Math;

Math.sqrt(x);

quelle est la meilleure façon: importer le package ou accéder en utilisant un nom complet?

Je vous remercie ..

13
Jomia

Il n'y a aucune différence de performances entre l'importation du package ou l'utilisation du nom de classe complet. La directive d'importation n'est pas convertie en Java octet, par conséquent, il n'y a aucun effet sur les performances d'exécution. La seule différence est qu'elle vous fait gagner du temps au cas où vous utilisez la classe importée plusieurs fois. est une bonne lecture ici

12
Piyush Mattoo

Non, cela ne vous fait pas économiser de mémoire.

Notez également que vous n'avez pas du tout à importer Math. Tout en Java.lang est importé automatiquement.

Un meilleur exemple serait quelque chose comme un ArrayList

import Java.util.ArrayList;
....
ArrayList<String> i = new ArrayList<String>();

Notez que j'importe spécifiquement le ArrayList. J'aurais pu faire

import Java.util.*; 

Mais vous voulez généralement éviter les grandes importations de caractères génériques pour éviter le problème des collisions entre les packages.

7
Brian Roach

Ils sont équivalents. L'accès est le même.

L'importation est juste une convention pour vous éviter d'avoir à taper le nom de classe entièrement résolu à chaque fois. Vous pouvez écrire tous vos Java sans utiliser d'importation, tant que vous êtes un typer tactile rapide.

Mais il n'y a pas de différence d'efficacité ou de chargement de classe.

4
duffymo

Comme déjà dit, lors de l'exécution, il n'y a pas de différence (dans le fichier de classe, il est toujours pleinement qualifié, et après le chargement et la liaison de la classe, il existe des pointeurs directs vers la méthode référencée), et tout dans le package Java.lang Est automatiquement importé, comme tout dans le package actuel.

Le compilateur devra peut-être rechercher quelques microsecondes plus longtemps, mais cela ne devrait pas être une raison - décidez de la lisibilité pour les lecteurs humains.

Soit dit en passant, si vous utilisez beaucoup de méthodes statiques (de Math, par exemple), vous pouvez également écrire

import static Java.lang.Math.*;

puis utiliser

sqrt(x)

directement. Mais ne faites cela que si votre classe est lourde en mathématiques et cela aide vraiment à la lisibilité de formules plus grandes, car le lecteur (en tant que compilateur) rechercherait d'abord dans la même classe et peut-être aussi dans les superclasses. (Cela s'applique également aux autres méthodes statiques et aux variables statiques (ou constantes).)

2
Paŭlo Ebermann

Le package d'importation est pour une meilleure lisibilité;

Une classe pleinement qualifiée doit être utilisée dans des scénarios spéciaux. Par exemple, le même nom de classe dans un package différent, ou utilisez une réflexion telle que Class.forName().

0