说,我有一个名为i
的成员变量,并且正在类中的三种不同方法中更改它的值。
那么,每次i
的起始值都不同吗?这与拥有一个强烈的禁忌并皱眉的全局变量有何不同?
public class ChangingMember {
int i = 1;
public static void main(String[] args) {
ChangingMember obj = new ChangingMember();
System.out.println(obj.i);
obj.test();
obj.test1();
obj.test2();
System.out.println(obj.i);
}
public void test() {
i++;
}
public void test1() {
i++;
}
public void test2() {
i++;
}
}
最佳答案
您需要访问该对象才能调用这些方法。这意味着您对此有明确的依赖性。它需要传递给使用它的任何类。只有您明确授予该对象访问权限的代码才能更改该变量。这与全局变量不同。
void foo(ChangeingMember member) { // <-- dependency
member.test1();
}
void bar() { // <-- no dependency
SomeGlobal.someMethod();
}
如果创建对象:
ChangingMember obj = new ChangingMember();
您仍将控制它的状态。只有当您授予对象其他一些代码访问权限时,才能更改状态:
foo(obj); // Giving 'foo' access to 'obj'
但是任何东西都可以访问全局变量。没有封装。