The error message for assignment to non-blank final
fields within a constructor is really awful. Contrast
the results of compiling:
public class A {
final int x = 0;
A() { x = 1; }
}
and
public class B {
final int x;
B() { x = 0-; x = 1; }
}