JAVA一段代码的执行

来源:百度知道 编辑:UC知道 时间:2024/05/23 12:27:52
CLASS A{
protected static int x=1;
public A(){}
}
Class B extends A {
public B()
{
}
}
public class C extends B{
private int x=0;
public C(){
}
public static void main (String args[])
{
A a=new A();
B b=new B();
C c=new C();
a.x=0;
b.x=-1;
c.x=2;
System.out.println(a.x);
}
}
请写出一下代码的输出 :

请高手详细说明执行过程 谢谢

结果为-1
因为B继承A,所以B和A都有变量x,因为x是静态的,所以如果B中的x值发生变化,A中的x也会发生变化,因为x是同一个。而C中有自己的变量x,覆盖了A中的x,所以不会影响到A中的x值。

B初始化时,先初始化它的父类也就是A类,A类初始化时先初始化静态变量x,此后便不用再初始化。在主函数中b.x=-1,所以改变了对象A和对象B共有的静态变量x的值,所以对象a中的x也变为-1.

如果不是很容易看处结果来,那么使用下面的打印方法,可以看出程序运行的轨迹。

class A{
protected static int x=1;
public A(){}
}
class B extends A {
public B()
{
}
} class C extends B{
private int x=0;
public C(){
}
public static void main (String args[])
{
A a=new A();
B b=new B();
C c=new C();
System.out.println(a.x); //1 输出的是实例A的成员变量x的值=1
a.x=0;
System.out.println(a.x); //2 输出的是实例A的成员变量x的值=0
b.x=-1;
System.out.println(a.x); //3 输出的是实例A的成员变量x的值=-1
c.x=2;
System.out.println(a.x); //4 输出的是实例A的成员变量x的值=-1
}
}

//分析:该题考察知识点
1.首先要知道如下的概念:
静态变量是共享的。
这样就很容易得到结果了。
因为C类定义了自己的变量x,所以只改变了自己x的值。而共享变量x仍然是上次有b.x=-1来保持的。