I was wondering is there any usability of using final local variables. Variables are not overridden anyway when inheritance comes into picture. For example a simple code as below
public static void main(String args[]) {
final String data = "Hello World!";
System.out.println(data);
}
The example is quite simple one and may not be a relevant code but the question is more generic.I have seen a lot of codes(all incorporated in main function which have final local variables) Is there any usability of declaring local variables as final other than that they cannot be edited in the same function itself?
Firstly, the part about variables being "overridden" - final
has two very different meanings. For classes and methods, it's about inheritance; for variables it's about being read-only.
There's one important "feature" of final local variables: they can be used in local (typically anonymous) inner classes. Non-final local variables can't be. That's the primary use of final
for local variables, in my experience.
public void foo() {
final String x = "hello";
String y = "there";
Runnable runnable = new Runnable() {
@Override public void run() {
System.out.println(x); // This is valid
System.out.println(y); // This is not
}
};
runnable.run();
}
Note that as a matter of style, some people like to use final
even when they're not capturing the variable in a local inner class. I'd certainly be comfortable with final
being the default, but a different modifier for "non-final", but I find that adding the modifier explicitly everywhere is too distracting.