有以下源程序: package test; public class ClassA {int x=20;static int y=6;public static void main(String args[]){ ClassB b=new ClassB(); b.go(10); System.out.println("x="+b.x);} } class ClassB {int x;void go(int y){ ClassA a=new ClassA(); x=a.y;} } 上述源程序文件的运行结果为( )。
A.x=10
B.x=20
C.x=6
D.编译不通过
参考答案:C
解析: 本题考查在Java中静态变量(类变量)的用法规则。对于static修饰的成员变量和成员方法,可以直接使用类名对它们进行访问。对于类变量,也就是static修饰的变量,在生成类的第一个实例对象时,Java运行时,系统对这个对象的每个类变量分配一块内存,以后再生成该类的实例对象时,所有实例对象将共享同一个类变量,每个实例对象对类变量的改变都会直接影响到其他实例对象,类变量除了可以通过类名直接访问外,还可以通过实例对象来访问。在本例中生成了一个static int y=6类变量,在 ClassA中调用的b.go(10),只不过是Class B中的一个局部变量,通过调用Class B中的 go方法可以实现生成一个Class A对象,并给这个新生成的对象赋予Class A中的类变量y的值。