说,我有一个名为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'


但是任何东西都可以访问全局变量。没有封装。

09-10 02:53
查看更多