Re: Question on static classes
Ian Semmel wrote:
Suppose I have
public class MyClass
{
...
private static class InnerClass extends SystemClass
{
int i;
public InnerClass (int i)
{
this.i = i;
}
..
}
public static SystemClass GetInner ( int i)
{
return new InnerClass (i);
}
}
Does this work OK ?
SystemClass s1 = MyClass.GetInner(1);
SystemClass s2 = MyClass.GetInner(2);
That is, does the fact that the class is static mean that there is only
one instance of InnerClass ?
No, as other responders have noted. To help you understand why not,
try taking a slightly different view of what `static' means. Don't read
it as "There's only one instance of this thing," but as "This thing
belongs to the containing class as a whole, not to a specific instance
of it."
So for an ordinary garden-variety class
class Clown {
int belongsToInstance;
static int belongsToClass;
...
}
.... the belongsToInstance member is part of every Clown object, and
belongsToClass is part of the Clown class itself. From this we can
infer that there are as many belongsToInstance ints as there are Clown
objects, possibly zero, and that there's exactly one belongsToClass
int because there's exactly one Clown class. (Ignore those murmurs of
"Multiple ClassLoaders;" the murmurers are just troublemakers.) In
this view, the fact that there's just one belongsToClass isn't the
explicit meaning of `static', but a conclusion you can derive from
reading `static' as describing the "ownership" of the member.
Back to your example, the `static' says "The InnerClass class
belongs to the MyClass class itself, not to a particular MyClass
object." You can create as many or as few InnerClass objects as
you like, but they all belong to MyClass as a whole rather than to
individual MyClass objects.
I hope this helps.
--
Eric.Sosman@sun.com