why can't we assign value for final static variable fi in initializer block and also in constructor? but this is possible with static variable fi.
You cannot assign value to a final static constant inside instance initializer block or constructor as you can use static fields even without making an instance of the class. So the final constant must be initialized with declaration or in a static initializer block.
This is why final constants must be assigned a value in their declaration or static initializer blocks as they run when the class is loaded...