Re: Singletons?
"Mark Space" <markspace@sbcglobal.net> wrote in message
news:FEDjg.147331$F_3.107067@newssvr29.news.prodigy.net...
I'm trying out some new Java code. I was surprised to find that Java
doesn't allow the static keyword for classes.
It does for inner classes, e.g.:
class Foo {
static class Bar {
}
}
but the semantics of the static keyword here have nothing to do (that I
can think of) with the Singleton design pattern.
How was I to implement singleton objects then? Well, a quick web search
and I've got the answer, but now I have a few other questions on the JVM
and compiler.
Let's say I have a class entirely of static methods:
public class anAPI {
static void methodA {}
static void methodB {}
}
What happens if new is called for anAPI?
If we're getting into the technical details, I think it's useful to not
think of "new" as something which is called, but rather an operator, the
unary minus is an operator. It takes a constructor as its single argument,
and creates a new instance of the object, then calls the constructor on that
instance. That's my mental model, anyway.
Does any memory get allocated on the heap?
A new object gets created. Where it gets created is implementor defined,
I think.
And will two such references to anAPI pass the == test?
If you create two objects via the "new" operator, they will not be
considered the same object, and so the == operator will give false.
It seems to me a smart compiler and JVM would figure out that there no
memory needed on the heap for this object, but maybe things don't work
that way.
I don't think this particular optimization is allowed to be done, as it
would break the semantics of the == operator.
- Oliver