Assigning values to static final variables in Java:
In Java, non-static final variables can be assigned a value either in constructor or with the declaration. But, static final variables cannot be assigned value in constructor; they must be assigned a value with their declaration.
For example, following program works fine.
class Test {
// i could be assigned a value here
// or constructor or init block also.
final int i;
Test()
{
i = 10;
}
// other stuff in the class
}
If we make i as static final then we must assign value to i with the delcaration.
class Test {
// Since i is static final,
// it must be assigned value here
// or inside static block .
static final int i;
static
{
i = 10;
}
// other stuff in the class
}
Such behavior is obvious as static variables are shared among all the objects of a class; creating a new object would change the same static variable which is not allowed if the static variable is final.