File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes Java in General and the fly likes do inner classes need final local vars? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Java in General
Bookmark "do inner classes need final local vars?" Watch "do inner classes need final local vars?" New topic

do inner classes need final local vars?

Sanjeev Manjila

Joined: Dec 12, 2002
Posts: 2
The following code did not compile and said that the local var x needs to be final.. Why does it need to be final? Any particular reasons?

(edited by Cindy to add [ code][ /code] tags)
[ December 13, 2002: Message edited by: Cindy Glass ]
Pete Lyons
Ranch Hand

Joined: Aug 18, 2002
Posts: 109
In that situation x would need to be final because it is a method local variable that normally would be cleaned up from the stack as the method returns. Your inner class has a reference to it, and basically (although I don't really understand the details), the final allows the compiler to give you a copy of the value that your class can use. For object references, the compiler needs to know that the object your reference refers to will not be changed.
Cindy Glass
"The Hood"

Joined: Sep 29, 2000
Posts: 8521
When you make the variable final, instead of placing the value of x in the stack for method1 (which gets zapped as soon as the method is over) the variable value gets put in the Constant Pool which sticks around and is therefore available so that the m object can use it even after method1 is over.
In this case that is not much of a deal because as soon as method1 is over the the object referenced by m is available for the GC, however it is possible for such a method to return such an object or to have a variable outside the method hold a reference to it. In that case the MyClass object could live for a LOT longer than the method in which it was created.

"JavaRanch, where the deer and the Certified play" - David O'Meara
I agree. Here's the link:
subject: do inner classes need final local vars?
It's not a secret anymore!