Quanto segue non si compila, dando un messaggio di 'illegale riferimento in avanti':Perché due programmi hanno errori di referenziazione in avanti mentre il terzo no?
class StaticInitialisation {
static
{
System.out.println("Test string is: " + testString);
}
private static String testString;
public static void main(String args[]) {
new StaticInitialisation();
}
}
Tuttavia, il seguente fa compilare:
class InstanceInitialisation1 {
{
System.out.println("Test string is: " + this.testString);
}
private String testString;
public static void main(String args[]) {
new InstanceInitialisation1();
}
}
Ma il seguente non si compila, dando un 'in avanti illegale messaggio di riferimento':
class InstanceInitialisation2 {
private String testString1;
{
testString1 = testString2;
}
private String testString2;
public static void main(String args[]) {
new InstanceInitialisation2();
}
}
Perché StaticInitialisation e InstanceInitialisation2 si compila, mentre InstanceInitialisation1 doe S?
Il terzo frammento avrebbe funzionato se è cambiata in 'testString1 = this.testString2;' – Eran
E 'la prima volta che vedo un blocco di codice in una classe Java che non è parte di un ctor, o Ctor o metodo statico. piacerebbe sapere cosa è, come mai passa la compilazione e quando viene eseguito –
@sharonbn: Sono inizializzatori di istanza o inizializzatori statici, descritti rispettivamente nelle sezioni 8.6 e 8.7 del JLS. –