Ho notato qualcosa in inizializzatori statici che potrebbe essere un bug nel javac. Ho costruito uno scenario in cui posso assegnare a una variabile un valore ma non leggere quel valore indietro.Errore statico di inizializzazione se inserito prima della dichiarazione
I due esempi riportati di seguito, il primo compila bene, il secondo ottiene un errore quando si tenta di leggere un valore da tmp, ma per qualche motivo l'assegnazione di un valore a tmp è consentita. Potrei capire se non può né leggere né scrivere sulla variabile poiché tmp viene dichiarato dopo l'inizializzatore statico, ma un errore su uno solo di quelli non ha senso per me.
//Compiles Successfully:
public class Script
{
public static Object tmp;
static
{
tmp = new Object();
System.out.println(tmp);
}
}
//error only on the read but not the assignment
public class Script
{
static
{
tmp = new Object();
System.out.println(tmp);
}
public static Object tmp;
}
per enfatizzare ulteriormente il punto, questo viene compilato correttamente.
public class Script
{
static
{
tmp = new Object();
}
public static Object tmp;
}
Credo [una risposta a una domanda simile] [1] risponde a questa domanda meglio di quanto possa. È un comportamento strano ma non un bug. Sta facendo quello che dovrebbe fare. [1]: http://stackoverflow.com/a/10035928/348975 – emory
Non sono sicuro che lo faccia, gli inizializzatori statici sono lì per inizializzare le variabili dal loro valore predefinito. che vuol dire statico int v = 1; è equivalente a static v v; static {v = 1;} –
@Dukeling Ho scritto il mio commento come risposta e StackOverflow ha determinato che la mia risposta è stata banale (penso che sia troppo corta) e l'ho convertita automagicamente in un commento, ma evidentemente ha cambiato i link. – emory