• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
  • Mikalai Zaikin

method local inner class

Ranch Hand
Posts: 78
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hello All,
Whatz the real significance of Method Local inner class?
~ Shalini
Cowgirl and Author
Posts: 1589
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Remember that a method-local inner class means the class is defined INSIDE a method:

The code above has a little problem, though... look at 'x'! It is local to the method as well. What does this mean? That the variable 'x' lives on the stack. There is a chance that the object from class Bar (although in this code, we're not making any, so the inner class is completely useless since there you can't really construct an instance of that class outside that method!) can outlive the stack frame for this method. So while the variable 'x' would be blown away, the object of type Bar could still be around on the heap if it were passed to someone else. Now, that doesn't mean that they couldn't have crafted a way for the variable to have been made available to the inner object anyway, but they didn't. That's the rule for Java. You cannot, MUST not use local variables within a method local inner class.
So this code would not even compile, and would give you a message like:
Foo.java:11: local variable x is accessed from within inner class; needs to be declared final
int y = x + 24;
1 error
AHHHH... so what if the variable is final?
The compiler is perfectly happy with:

And now what about forward referencing??
Although we KNOW that an instance variable can be declared anywhere in a class, outside a method, even if the variable declaration falls BELOW a method that uses it:
class Boof {
void whatever() {
g = 3; // OK even though 'g' is declared later in the class...
int g;

But this IS a problem with a method-local inner class (just as it is with any other aspect of forward-referencing in a method).
So the following would NOT make the compiler happy:

This will give you something like:
Foo.java:11: cannot resolve symbol
symbol : variable x
location: class Bar
int y = x + 24;
In reality, method-local inner classes are often just for anonymous inner classes (in which the same rules apply... you can't make reference to a non-final local variable (which also includes non-final method parameters from the method in which the inner class is declared).
"We hates tricksy method-local inner classes"
-Gollum, right after his SCJP
"One exam to fool them all. One exam assigned them. One exam to bring them all and at Prometric grind them."
Whoo-hoo! Bert and I are off to see Return of the King tonight! (at the Really Big Almost-An-Imax Screen in Boulder)
With a little knowledge, a cast iron skillet is non-stick and lasts a lifetime.
    Bookmark Topic Watch Topic
  • New Topic