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

Répondre à