Recuerda que tenemos dos momentos en un programa.
El tiempo de compilación y el tiempo de ejecución.
El tiempo de compilación. Es el momento en el que el compilador revisa toda la sintaxis y la coherencia del programa, antes de que sea ejecutado. Para este momento la variable declarada como const debe tener asignado un valor, para que no te marque error el compilador.
El tiempo de ejecución. Es el momento en el que después de haber compilado el programa este se ejecuta, en este momento la variable declarada como final debe llenarse, esto puede ocurrir: mientras se ejecuta el programa se trae un dato de la base de datos o de un API etc.