Can a Static Nested Class be Instantiated Multiple Times?

前端 未结 6 1096
别那么骄傲
别那么骄傲 2021-02-05 05:14

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 ne

6条回答
  •  星月不相逢
    2021-02-05 05:33

    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
      • public static class AbstractMap.SimpleEntry
        • 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

提交回复
热议问题