El programa siguiente imprime:Java problema orden de inicialización, estática vs ejemplo campos
my name is:null
my name is:null
Someclass static init
yo sepa cuando se carga por primera vez una clase de bloques estáticos y campos siempre se inicializan en primer lugar, los bloques de instancias y campos segundos. Por lo tanto, las variables "objectName1" y "objectName2" deben inicializarse primero, la variable de instancia "list" second ... pero la salida obviamente contradice esta teoría ... ¿Alguien puede explicar el comportamiento del programa (no estoy buscando una crítica del diseño en sí mismo por cierto)?
import java.util.ArrayList;
import java.util.List;
public class Main2{
public static void main (String[] args){
SomeClass.getInstance();
}
}
class SomeClass {
private static final SomeClass instance = new SomeClass();
public static SomeClass getInstance(){
return instance;
}
static {
System.out.println ("Someclass static init");
}
private static String objectName1 ="test1";
private static String objectName2 ="test2";
@SuppressWarnings("serial")
private List<SomeObject> list=
new ArrayList<SomeObject>() { {
add (new SomeObject(objectName1));
add (new SomeObject(objectName2));
}};
}
class SomeObject {
String name;
SomeObject (String name){
this.name = name;
System.out.println ("my name is:" +name);
}
}