静态嵌套类可以多次实例化吗?

10 浏览
0 Comments

静态嵌套类可以多次实例化吗?

根据我对编程中其他类型的静态特性的了解,我认为答案是否定的。但是,当我看到类似OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();这样的语句时,我开始怀疑。

0
0 Comments

静态嵌套类可以多次实例化吗?

在Java中,静态嵌套类可以被多次实例化。静态嵌套类的一个好处是,它的实例不受包含类实例的约束,因此可以自由地实例化(只要访问修饰符允许)。

然而,这种实现方式也有一个代价,就是静态嵌套类不能使用包含类的非静态成员和方法。

下面是一个示例代码,展示了静态嵌套类的多次实例化:

public class OuterClass {
    private static int staticVariable = 10;
    private int nonStaticVariable = 20;
    
    public static class StaticNestedClass {
        private int nestedVariable;
        
        public StaticNestedClass(int nestedVariable) {
            this.nestedVariable = nestedVariable;
        }
        
        public void printValues() {
            System.out.println("Static variable: " + staticVariable);
            System.out.println("Nested variable: " + nestedVariable);
        }
    }
    
    public static void main(String[] args) {
        StaticNestedClass instance1 = new StaticNestedClass(30);
        StaticNestedClass instance2 = new StaticNestedClass(40);
        
        instance1.printValues();
        instance2.printValues();
    }
}

在上面的例子中,`OuterClass`包含了一个静态嵌套类`StaticNestedClass`。我们可以看到,`StaticNestedClass`可以被多次实例化,并且每个实例都可以访问静态变量`staticVariable`和嵌套变量`nestedVariable`。

总结起来,我们可以得出结论:静态嵌套类可以多次实例化,但不能使用包含类的非静态成员和方法。

希望这篇文章对你理解静态嵌套类的多次实例化有所帮助!

0
0 Comments

静态嵌套类是一个在外部类中定义的静态类。它可以实例化多次的原因是因为它是一个独立的类,与外部类的实例无关。为了说明这一点,我们可以看下面的示例代码。代码中定义了一个名为MultipleInner的外部类,以及一个名为Inner的静态嵌套类。在main方法中,我们创建了一个Inner类的实例,并将其状态设置为循环变量i的值。然后,我们将这些实例添加到一个List中,并在最后打印出它们的状态。

public class MultipleInner {
    static class Inner {
        private int state;
        public int getState() { return state; }
        public void setState(int state) { this.state = state; }
    }
    public static void main(String[] args) {
        List inners = new ArrayList();
        for (int i = 0; i < 100; i++) {
            Inner inner = new Inner();
            inner.setState(i);
            inners.add(inner);
        }
        for (Inner inner : inners) {
            System.out.println(inner.getState());
        }
    }
}

运行上述代码,我们可以看到输出结果为:

0
1
2
3
...
97
98
99

这表明静态嵌套类Inner可以被实例化多次,并且每个实例都是独立的,具有自己的状态。

因此,静态嵌套类可以被多次实例化的原因是它是一个独立的类,与外部类的实例无关。要解决这个问题,只需要按照上述示例代码中的方式实例化静态嵌套类即可。

0
0 Comments

静态嵌套类可以多次实例化吗?

是的,静态嵌套类的语义没有任何限制,可以多次实例化。下面的代码片段可以正常运行。

public class MultipleNested {
    static class Nested {
    }
    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            new Nested();
        }
    }
}

现在,当然嵌套类可以进行自己的实例控制(例如,私有构造函数,单例模式等),但这与它是一个嵌套类无关。另外,如果嵌套类型是一个静态枚举,那么当然根本不能实例化它。

但是一般来说,可以多次实例化静态嵌套类型。

需要注意的是,从技术上讲,静态嵌套类型不是一个"内部"类型。

根据JLS的术语,一个"内部"类是一个既不被显式声明为静态的也不被隐式声明为静态的嵌套类。

那就是说,根据JLS的术语,一个"内部"类指的是不是静态的嵌套类。如果是静态的,那么它只是一个嵌套类型。

那么,"static"到底意味着什么呢?

"static"只是意味着嵌套类型不需要一个封闭类型的实例来实例化。

谢谢!当我第一次根据我在问题评论中描述的方式思考时,我的想法是"无论封闭上下文的实例如何,静态的东西都是单数的"。现在,当我仔细考虑到你对"static"的定义时,我正在重新定义我对这个术语的理解,即"无论封闭上下文的实例如何,静态的东西都是独立存在的"——因此,静态嵌套类存在于其父类的实例之外。我相信这种理解也适用于循环变量、函数变量和类成员的静态上下文。

而且,我越想越觉得:将"单数"与"静态"联系起来是一个微妙的错误。我之所以认为循环变量、函数变量和类字段是单数的唯一原因是因为它们是声明性语句,而不是类型定义语句。因此,静态类是我(至少在我脑海中)既是静态的又能用于定义新对象的唯一东西。

或许可以问另一个问题:"static"到底意味着什么呢?

polygenelubricants,为了双重检查,我添加了一个字段"state"到嵌套类中,一切都正常工作。谢谢!

0