Final cuando se usa con variables en Java proporciona un sustituto de constante en C ++. Entonces, cuando se usa final y static para una variable, se vuelve inmutable. Al mismo tiempo, hace que los programadores migrados de C ++ estén muy contentos ;-)
Cuando se usa con variables de referencia, no le permite volver a hacer referencia al objeto, aunque el objeto puede ser manipulado.
Cuando final se utiliza con un método, no permite que las subclases anulen el método.
Una vez que el uso es muy claro, debe usarse con cuidado. Depende principalmente del diseño, ya que el uso de final en el método no ayudaría al polimorfismo.
Uno solo debería usarlo para variables cuando esté absolutamente seguro de que el valor de la variable nunca / deberá cambiarse. También asegúrese de seguir la convención de codificación promovida por SUN, por ejemplo: final int COLOR_RED = 1; (Mayúsculas separadas por guiones bajos)
Con una variable de referencia, úsela solo cuando necesitemos una referencia inmutable a un objeto en particular.
Con respecto a la parte de legibilidad, los comentarios juegan un papel muy importante cuando se usa el modificador final.