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来查看这一点。