有以下源程序:
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类变量,在 Class A中调用的b.go(10),只不过是Class B中的一个局部变量,通过调用Class B中的 go方法可以实现生成一个Class A对象,并给这个新生成的对象赋予Class A中的类变量y的值。