Can a Static Nested Class be Instantiated Multiple Times?
java, nested-class, static
Solution
Yes, there is nothing in the semantics of a `static` nested type that would stop you from doing that. This snippet runs fine.
public class MultipleNested {
static class Nested {
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
new Nested();
}
}
}
See also
- `public static interface Map.Entry<K,V>`
- `public static class AbstractMap.SimpleEntry<K,V>`
- Probably the most well-known nested type. Obviously instantiated multiple times.
Now, of course the nested type can do its own instance control (e.g. `private` constructors, singleton pattern, etc) but that has nothing to do with the fact that it's a nested type. Also, if the nested type is a `static enum`, of course you can't instantiate it at all.
But in general, yes, a `static` nested type can be instantiated multiple times.
Note that technically, a `static` nested type is not an "inner" type.
JLS 8.1.3 Inner Classes and Enclosing Instances
An inner class is a nested class that is not explicitly or implicitly declared `static`.
That is, according to JLS terminology, an inner class is one that isn't `static`. If it's `static`, then it's just a nested type.
So what does `static` mean?
`static` simply means that the nested type does not need an instance of the enclosing type to be instantiated.
See also
- Java inner class and static nested class
- Java: Static vs non static inner class
Problem
Given what I know of every other type of static feature of programming––I would think the answer is 'no'. However, seeing statements like `OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();` makes me wonder.