Java 嵌套类doen';t更改封闭类字段

Java 嵌套类doen';t更改封闭类字段,java,inner-classes,static-classes,Java,Inner Classes,Static Classes,我试着写一个简单的程序,它可以和嵌套类一起工作。我注意到,嵌套类不能更改(或我犯了错误)封闭类字段: public class MyClass { private boolean bool = false; private NestedClass nestedClass = new NestedClass(); private class NestedClass { private void print(){ Syste

我试着写一个简单的程序,它可以和嵌套类一起工作。我注意到,嵌套类不能更改(或我犯了错误)封闭类字段:

public class MyClass {

    private boolean bool = false;
    private NestedClass nestedClass = new NestedClass();

    private class NestedClass {

        private void print(){
               System.out.println(bool);
        }

        NestedClass(){
            bool = !bool;
        }
}

    MyClass(){
        nestedClass = new NestedClass();
    }

    public void getInfo(){
        nestedClass.print();
    }
}
创建
MyClass
的新实例后,
bool
的值不变:

public static void main(String[] args) {
    MyClass myClass = new MyClass();
    myClass.getInfo();
}
输出为
false
。但我期望
正确

我做错了什么?

我猜是的,你仍然认为bool的值为false的原因是它被设置了两次(否定了两次)

一到这里

private NestedClass nestedClass = new NestedClass();
第二次

MyClass(){
    nestedClass = new NestedClass();
}

这两个函数都两次调用NestedClass的构造函数,两次对其进行否定,结果是
false
->
true
->
false
我猜是这样的,您仍然将bool的值视为false的原因是它被设置了两次(否定了两次)

一到这里

private NestedClass nestedClass = new NestedClass();
第二次

MyClass(){
    nestedClass = new NestedClass();
}

这两个函数都调用了NestedClass的构造函数两次,这两次都会对其求反,从而导致
false
->
true
->
false

您要调用
NestedClass
构造函数两次,因此它会两次更改
bool
false->true->false
的值。您可以向
NestedClass
构造函数中添加一个sysout来查看这一点。您将调用
NestedClass
构造函数两次,因此它将两次更改
bool
false->true->false
的值。您可以向
NestedClass
构造函数中添加一个sysout来查看这一点。