At 2:46 PM -0800 2/27/07, Tim Hare wrote:
>A word of caution regarding static variables. ... static variables
>are global to all instances of that class.
Tim has a very good point. Yes, this is a very important and often
overlooked issue, and can lead to some hard to find bugs.
STATIC is an odd mix of both Local and Global scope. A STATIC
variable can only be accessed from within the method where it's
defined. Seems pretty local in scope right?
Well that same exact STATIC variable is used by ALL instances of that
class. Even if you have 100 instances of that class there is still
only one copy of that STATIC variable. So what happens to that STATIC
variable in one instance DOES AFFECT the value of that variable in
ALL other instances. That's a pretty global effect.
A STATIC variable has two important traits vs a normal local variable:
- The STATIC variable retains its value across multiple calls to that method
ie Persistence
- The SAME STATIC variable is shared among all instance of that class
ie Shared
This is a very nice capability when you need it.
But like Tim says, be very careful if you're using a STATIC to get
persistence in a method, because it also comes along with being
SHARED among all instances which can be a very rude surprise and can
cause apparently 'local' variables to change unexpectedly.
Remember that eventhough a STATIC is declared within a method it is
NOT local to that instance, it is SHARED by all instances.
Regards,
Joe Huber
PS I know I bent the name space terms a little bit but I think it's
the best way to describe what actually happens and to make statics
simpler to remember.
_______________________________________________
Unsubscribe or switch delivery mode:
<http://www.realsoftware.com/support/listmanager/>
Search the archives:
<http://support.realsoftware.com/listarchives/lists.html>