全局变量和局部变量问题

来源:百度知道 编辑:UC知道 时间:2024/06/08 13:20:29
如这题:
public class GlobalVar{
int a = 10; //全局变量,下同
double b = 20;
public static void main(String[] args){ GlobalVar globalVar = new GlobalVar();
System.out.println("全局变量 a = " + globalVar.a);
// System.out.println("全局变量 a = " +a); 错误写法
globalVar.print();
System.out.println("全局变量变化后 a = " + globalVar.a);
}
public void print(){
System.out.println("在print()中, 全局变量 a = " + a + ", b = " + b);
a=30;
System.out.println("在print()中, 全局变量 a = " + a + ", b = " + b);
}
}

输出答案是:
全局变量 a = 10
在print()中, 全局变量 a = 10, b = 20.0
在print()中, 全局变量 a = 30, b = 20.0
全局变量变化后 a = 30

我想问的是:
print()方法中的a=30,这应该是局部变量吧?为什么会影响这句里面的全局变量?
System.out.println("全局变量变化后 a = " + globalVar.a);

因为print()方法是GlobalVar类的方法
print()方法中的a=30
这句话是对全局变量的操作

所谓局部变量是这样的
public void print(){
int a=30;
System.out.println("在print()中, 局部变量 a = " + a + ", b = " + b);
}

a,b都是类的实例变量(属性),在print方法中改变了当前对象a变量的值。
当调用globalVar.print()方法,就改变了globalVar.a的值。

好好理解这些概念:类、对象、类变量(属性)、方法、静态方法、静态变量。

a虽然在print方法里用到了,但他仍然是全局的啊。
// System.out.println("全局变量 a = " +a); 错误写法
至于这句只所以错是因为main方法是static的,所以他不能引用非static的变量。
a在类里面定义的,那么它就是类里的全局变量了,在本类里面可以使用,如果定义在方法里面,则只能在方法内部使用,也就是所谓局部变量吧。