Originariamente inviato da 88prototipo
ciao a tutti,
premetto che non conosco per niente java e sto iniziando a muovere i primi passi...
è possibile leggere il contenuto di una variabile "static" posta nella classe A da un'altra classe B?
io ho:
codice:
public class A implements MessageListener {
public static byte[] arr = new byte[297];
public static void main(String[] args) throws Exception {
int i;
for (i=0;i<297;i++)
arr[i]=1;
}
}
ora voglio leggere il contenuto dell'array arr da un'altra classe B: (a me da tutti 0 anzichè tutti 1!!!!!!)
codice:
public class B {
public static void main(String[] args) throws FileNotFoundException, IOException {
int i;
for (i=0;i<297;i++)
System.out.print( A.arr[i] );
}
}
Chi mi sa dire dove sbaglio???
grazie
Il primo errore è che una cosa di questo tipo non ha senso..
Perchè creare 2 main? Generalmente il main() è quello che avvia l'applicazione, da li, si "dirama" l'intero software.
Perchè quelle eccezioni?
Sono tutti 0 perchè di fatto l'array è vuoto! Gli dai una dimensione, allochi la memoria, una volta terminato il software viene distrutto. Ma essendo una variabile static puoi accedervi comunque!
Una variabile dichiarata come static è in sostanza una "variabile globale".
Detto in altre parole, quando si crea un istanza di una classe e al suo interno c'è una variabile dichiarata come static, di questa non viene fatta alcuna copia. Mentre delle altre variabili vi è una copia per ogni oggetto. In sostanza ogni oggetto ha la stessa variabile static.
codice:
public class A {
public static byte[] arr = new byte[297];
static {
for(int i=0; i<arr.length; i++) arr[i] = 1;
}
}
Si può creare un blocco static, in modo da inizializzare le variabili static (in questo caso l'array).
codice:
class B {
public static void main(String args[]) {
for(int i=0; i<A.arr.length; i++) {
System.out.println(A.arr[i]);
}
}
}
Ora vedrai tutti 1. 
PS: Anticipato da andbin mentre scrivevo ^^ (e litigavo con un moscerino).