Le 12 Mar 2002 [EMAIL PROTECTED] a �crit :
> l'utiliser avec son nom complet dans la m�thode : idem. Est-il
> impossible de livrer une classe faisant appel � une autre classe de
> fa�on conditionnelle sans livrer la seconde ? En l'occurence, il
Je crois que tu pourrais livrer l'une sans livrer la seconde, mais ce
fonctionnement ne serait pas garanti d'une JVM � l'autre.
A une �poque je m'�tais int�ress� � ces questions, et voici mes
souvenirs.
Les specs Java stipulent qu'une classe doit �tre charg�e et v�rifi�e
avant d'�tre ex�cut�e, mais n'en disent pas plus. Une JVM peut
charger d'un coup toutes les classes de son classpath, ou ne charger
que celle dont elle a besoin pour d�marrer, ou...
Les JVM, la plupart du temps, et en particulier les JVM sun, ne
chargent les classes qu'au moment o� le code qu'elles ex�cutent les
_d�signe_, et pas forc�ment au moment o� elles en ont r�ellement
besoin (quoique...).
Par exemple, si tu d�clares une variable d'instance, la JVM chargera
la classe de cette variable au moment de l'instaciation de la classe
englobante, m�me si dans ton initialisation tu ne traites pas cette
variable : tu l'as d�sign�e, �a suffit.
Si tu d�clare une classe juste dans une m�thode, la JVM ne chargera
cette classe que lorsque cette m�thode sera appel�e, et ce m�me si tu
n'utilises pas cette variable dans cette m�thode.
Par exemple :
void toto()
{
MaClasse monTruc;
if (zz)
monTruc = new MaClasse();
... MaClasse sera charg�e d�s l'instant que tu appelles la m�thode
toto, m�me si "zz" est � false. Tant que tu n'appeleras pas la
m�thode toto, MaClasse ne sera pas charg�e.
Par contre :
void toto()
{
if (zz)
{
MaClasse monTruc;
monTruc = new MaClasse();
... l�, la classe MaClasse ne sera charg�e que si zz est � true.
Bien s�r, si tu fais :
MaClasse toto()
{
return null;
}
... l�, la classe MaClasse sera charg�e d�s l'instanciation de la
classe g�n�rale, m�me si tu n'appelles jamais toto().
Les d�clarations d'import n'ont aucune incidence.
Donc, si tu veux ne pas charger une classe bien que tu l'utilises
dans ton code, il faut que le code ex�cut� ne l'aie pas d�sign�e. (il
y a certainement une fa�on plus pro de dire �a).
Et bien s�r que cela ne t'empeche pas de t'interroger sur le design
de ton appli, comme le sugg�rent d'autres contributions. Les combines
que je te donne sont non-standards, et peut �tre m�me plus valables
aujourd'hui.
A+.
--
Sur le Web, tout de suite.
Herve AGNOUX - diaam informatique
http://www.diaam-informatique.com