Hey Indra,
I believe, your question that how does final make a variable so special that method local class start accepting that parameter.
The answer to that question is hidden in the way
java compiler treats the final variable. These are constants so while making a class file the compiler replaces the existence of the final variable with the corresponding value.
Take the example below code -
When java compiles the file it replaces all further exisstances of x with its value. The code of corresponding would be
This is why it gives performance gain than using normal variable in real time environments. Let me know if I could answer your query