If a variable is static it must be assigned a value inside a class or static block. If the variable is final it can not be assigned a value inside a static block unless it is also static. I have some code below if you'd like to look at it.
public class Test{
final static int b;
static int c;
final int d;
{
//b = 100;
//c = 200;
d = 300;
}
static
{
b = 100;
c = 200;
//d = 300;
}
public
Test(){}
public static void main(
String[] args){
Test a = new Test();
//a.b = 100;
//a.c = 200;
//a.d = 300;
System.out.println("final static int b " + b);
System.out.println("static int c " + c);
System.out.println("final int a.d " + a.d);
}
}