Java 类的不同方法如何更改成员';s数据不同于全局变量
比如说,我有一个名为Java 类的不同方法如何更改成员';s数据不同于全局变量,java,oop,global-variables,Java,Oop,Global Variables,比如说,我有一个名为I的成员变量,我在类中的三个不同方法中更改它的值 那么,每次i的起始值都不同?这与拥有一个全局变量有什么不同?全局变量是一个强烈的“不”和“不”并且不被接受 public class ChangingMember { int i = 1; public static void main(String[] args) { ChangingMember obj = new ChangingMember(); System.out.println(obj.i);
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++;
}
}否,它将始终保持不变,因为变量不是静态的 如果创建ChangingMember类的新对象,则i的起始值将相同(1)。如果希望它在新对象上始终具有最后一个值,则必须将此属性设置为静态
静态int i=1 您需要访问对象才能调用这些方法。这意味着你对它有明显的依赖。它需要传递给任何使用它的类。只有明确授予此对象访问权限的代码才能更改变量。这与全局变量不同
void foo(ChangeingMember member) { // <-- dependency
member.test1();
}
void bar() { // <-- no dependency
SomeGlobal.someMethod();
}
你仍然可以控制它的状态。只有当您授予对对象的其他代码访问权限时,才能更改状态:
foo(obj); // Giving 'foo' access to 'obj'
但是任何东西都可以访问全局变量。没有封装。因为您只使用类的一个实例,所以可以使用它们的方法修改其变量。要使变量成为全局变量或与该类的其他实例共享,可以添加一个
static
修饰符。因此,代码将输出相同的结果
static int i = 1;
public static void main(String[] args) {
ChangingMember obj = new ChangingMember();
System.out.println(obj.i);
new ChangingMember().test();
new ChangingMember().test1();
new ChangingMember().test2();
System.out.println(obj.i);
}
现在,如果删除
static
修饰符,结果将不同。在类初始化时分配的所有全局变量的值。
让我们逐行遍历代码
对象已创建,现在和分配给对象(obj)的所有全局变量的值为1
test()由object调用,它执行变量i的增量过程,变量i在object obj的范围内已经有值1
…因此它将增加。这同样适用于其余两种方法
注意:在编写代码时,请坚持使用更好的方法。
i++
、++i
和i+=1
都会将i
的值增加1。是的,你是对的,我认为我们必须重新设计该值!它与全局变量不同,因为您可以创建另一个ChangingMember
实例,其i
字段将不同。
static int i = 1;
public static void main(String[] args) {
ChangingMember obj = new ChangingMember();
System.out.println(obj.i);
new ChangingMember().test();
new ChangingMember().test1();
new ChangingMember().test2();
System.out.println(obj.i);
}
ChangingMember obj = new ChangingMember();
obj.test();
public void test() {
i++;
}