I am having trouble understanding the initialization order when the class has a static instance of itself. Also, why this behavior is different from String.
See the following example:
public class StaticCheck {
private static StaticCheck INSTANCE = new StaticCheck();
private static final List<String> list =
new ArrayList<String>(Arrays.asList("hello"));
private static final Map<String, String> map =
new HashMap<String, String>();
private static final String name = "hello";
public static StaticCheck getInstance() {
return INSTANCE;
}
private StaticCheck() {
load();
}
private void load() {
if(list != null) {
System.out.println("list is nonnull");
} else {
System.out.println("List is null");
}
if(name != null) {
System.out.println("name is nonnull");
} else {
System.out.println("name is null");
}
if(map != null) {
System.out.println("Map is nonnull");
} else {
System.out.println("Map is null");
}
}
public static void main(String[] args) {
StaticCheck check = StaticCheck.getInstance();
}
}
Output:
List is null
name is nonnull
Map is null
I absolutely do not understand why the field is namenot null. Static fields are initialized in the following cases, as indicated in the class initialization:
http://javarevisited.blogspot.in/2012/07/when-class-loading-initialization-java-example.html
Looking at the above example, my thoughts are:
, Java. , getInstance(), , . map list .
, INSTANCE , , load(), . - list map . , name? .