Below is the code,
class Z{
static int peekj(){
return j;
}
static int peekk(){
return k;
}
static int i = peekj();
static int h = peekk();
static final int j = 1;
static int k = 1;
}
public class ClassAndInterfaceInitialization {
public static void main(String[] args) {
System.out.println(Z.i);
System.out.println(Z.h);
}
}
After following the forward reference rule for static initialization, I see the output as:
1
0
After class Z
is loaded & linked, In the initialization phase, variable j
being final
is very firstly initialized with 1
. variable k
is also initialized with 1
.
But the output gives 0
for variable k
.
How do I understand this?
Note: Compiler actually replaces value of variable j
wherever it is referenced following forward reference rules, unlike k
static final int
will make j
a compile-time constant. So, its value will be present and passed as part of the byte-code itself. So, j
will be 1 when your class is being initialized.But k
is is just static int
, so its default value will be printed since your static initializer runs before the value of k
is initialized.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With