I was testing java's "statics" a bit and found some things I don't get. Look at these codes:
public class X {
public static int staticInit = 0;
public static int staticInitRe = 0;
public static int classicInitRe = 0;
}
public class Y extends X {
public static int staticInitRe;
public static int classicInitRe = 1;
static {
staticInitRe = 1;
staticInit = 1;
}
}
(where "Re" stands for "redeclared")
I made two Main classes for printing and loading
1.
public class Main {
public static void main(String[] args) {
System.out.println("staticInit X: "+X.staticInit);
System.out.println("staticInitRe X: "+X.staticInitRe);
System.out.println("classicInitRe X: "+X.classicInitRe);
System.out.println("");
System.out.println("staticInit Y: "+Y.staticInit);
System.out.println("staticInitRe Y: "+Y.staticInitRe);
System.out.println("classicInitRe Y: "+Y.classicInitRe);
System.out.println("");
System.out.println("staticInit X: "+X.staticInit);
System.out.println("staticInitRe X: "+X.staticInitRe);
System.out.println("classicInitRe X: "+X.classicInitRe);
System.out.println("");
System.out.println("staticInit Y: "+Y.staticInit);
System.out.println("staticInitRe Y: "+Y.staticInitRe);
System.out.println("classicInitRe Y: "+Y.classicInitRe);
System.out.println("");
}
}
output:
staticInit X: 0
staticInitRe X: 0
classicInitRe X: 0
staticInit Y: 0
staticInitRe Y: 1
classicInitRe Y: 1
staticInit X: 1
staticInitRe X: 0
classicInitRe X: 0
staticInit Y: 1
staticInitRe Y: 1
classicInitRe Y: 1
2.
public class Main {
public static void main(String[] args) {
System.out.println("staticInit X: "+X.staticInit);
System.out.println("");
System.out.println("staticInit Y: "+Y.staticInit);
System.out.println("");
System.out.println("staticInit X: "+X.staticInit);
System.out.println("");
System.out.println("staticInit Y: "+Y.staticInit);
System.out.println("");
}
}
output:
staticInit X: 0
staticInit Y: 0
staticInit X: 0
staticInit Y: 0
I don't understand what happens with the staticInit
variable. In the output of the first snippet, I think it should be respectively 0, 1, 0, 1
or 0, 1, 1, 1
, not 0, 0, 1, 1
.
I also don't get why in the second snippet it changes to 0, 0, 0, 0
after removing prints of the other variables.