Una variable final
se debe inicializar en la declaración o en un constructor.
Si no se ha inicializado cuando el constructor vuelve, es posible que nunca se inicialice, y puede seguir siendo una variable no inicializada. El compilador no puede probar que se inicializará, y arroja un error.
Este Wikipedia excerpt lo explica así:
Una variable definitiva sólo se puede inicializar una vez, ya sea a través de un inicializador o una instrucción de asignación. No necesita ser inicializado en el momento de la declaración: esto se llama una variable "final en blanco".Una variable de instancia final en blanco de una clase debe asignarse definitivamente al final de cada constructor de la clase en la que se declara; de forma similar, una variable estática final en blanco debe asignarse definitivamente en un inicializador estático de la clase en la que se declara; de lo contrario, se produce un error en tiempo de compilación en ambos casos. (Nota: Si la variable es una referencia, esto significa que la variable no puede ser re-obligado a hacer referencia a otro objeto, pero el objeto al que hace referencia sigue siendo mutable, si era originalmente mutable..)
Una propiedad de la palabra clave final es que garantiza que una variable no puede cambiar de estado una vez que se ha inicializado. Obliga al usuario a inicializarse cuando se declara o en un constructor. –
Consulte [this] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.4). – user1329572
Un campo 'final' debe establecerse una sola vez. El compilador solo puede estar seguro de que este sea el caso si está configurado en un constructor. –