Newsgroup: it.comp.java
Titolo: Re: Come essere sicuri che una particolare classe venga istanziata PRIMA delle altre

 Marco
I metodi statici vengono eseguiti senza la necessità di allocare un oggetto
della classe a cui appartengono. É sufficiente creare il tuo oggetto appena
entrato nel main().
-- 
Fermiamo Scientology prima che sia troppo tardi!!!
http://xenu.com-it.net
  ---  
http://xenu.freewinds.cx
(per rispondere personalmente leva IlDitoDalCulo)



 
Falso! Appena entrato nel Main non va bene. Considera questo caso.
class Main{
Static Integer i = new Integer()
static void main(...){
 MyClass c=new MyClass();
}
}
Il costruttore Integer() è invocato PRIMA del costruttore MyClass()!!!!!!
ciao
Marco

 Il costruttore Integer() è invocato PRIMA del costruttore MyClass()!!!!!!
Hai ragione, ma personalmente cercherei di evitare il più possibile l'uso di
elementi statici, se non strettamente indispensabile.
Vuoi il controllo fino a questo punto? e che ci devi fare???
Se spieghi meglio i tuoi obbiettivi, possiamo trovare una soluzione un poco
più "elegante" dei membri statici.
-- 
Fermiamo Scientology prima che sia troppo tardi!!!
http://xenu.com-it.net
 - 
http://xenu.freewinds.cx/


 Il costruttore Integer() è invocato PRIMA del costruttore MyClass()!!!!!!
Hai ragione, ma personalmente cercherei di evitare il più possibile l'uso di
elementi statici, se non strettamente indispensabile.
Vuoi il controllo fino a questo punto? e che ci devi fare???
Se spieghi meglio i tuoi obiettivi, possiamo trovare una soluzione un poco
più "elegante" dei membri statici.
-- 
Fermiamo Scientology prima che sia troppo tardi!!!
http://xenu.com-it.net
 - 
http://xenu.freewinds.cx/


 
Allora vi spiego cosa devo fare. Devo "preparare" una generica applicazione
Java per eseguire dei casi di test e verificare che venga rispettato il
criterio di copertura dei branch. Ho scritto in TXL un programma che
inserisce ad ogni branch un'istruzione java per segnare che il flusso del
programma è passato da quelle parti. Ogni branch è identificato da un
numero ed utilizzo un array di booleani per sapere quali branch sono stati
toccati. Dopo aver inserito i marcatori per ogni branch, devo creare la
classe che contiene l'array dei branch. Quello che vorrei sapere è dove
mettere questa istruzione. Se viene eseguita prima un'altra istruzione, di
sicuro devo accedere all'array dei branch che non è stato ancora creato,
generando null pointer exception. Una soluzione sarebbe quella di creare la
classe (di cui tengo ovviamente una sola istanza, classe con metodi
statici) appena ne ho bisogno. Non voglio questa soluzione, perchè devo
configurare la classe con dei parametri che leggo dalla riga di comando.
ciao
Marco



Puoi creare un punto di ingresso alternativo che si occupi di creare il tuo
array per richiamare subito dopo il vero main() della tua applicazione.
Naturalmente di devi assicurare che il programma TXL non tocchi questo punto
di ingresso.
(ma usare il profiler fornito di serie era troppo scomodo?)


 }
Prova così:
public class Main
{
   static
   {
     MyClass c = new MyClass();
   }
   static Integer i = new Integer();
   public static void main(String[] args)
   {
     // ...
   }
}
Gaetano

 
Troppo facile! In effetti sarebbe una buona idea. Purtroppo questo lavoro è
per un progetto dell'università e se si è deciso di farlo in txl dobbiamo
farlo in txl ;)
ciao
grazie 1000
Marco