日期:2014-05-20  浏览次数:20741 次

代码求输出
Java code
class A
{
static
{
System.out.println("A static block");
}
{
System.out.print("Q");
}
public A()
{
System.out.println("x");
}
}
class B extends A
{
static
{
System.out.println("B static block");
}
{
System.out.print("W");
}
public B()
{
System.out.println("y");
}
}
public class Test
{
static 
{
System.out.println("begin");
}
{
System.out.println("executing");
}
public static void main(String...args)
{
A ab = new B();
ab = new B();
new B();
new A();
}
}

代码如上,求输出结果以及原因

------解决方案--------------------
输出:
begin
A static block
B static block
Qx
Wy
Qx
Wy
Qx
Wy
Qx

分析:
执行从Test中main函数开始。因此
1. 由于main在Test中,首先执行Test类的静态语句。输出"begin"
2. 首次执行new B(),由于B有基类A,因此依次执行A、B的静态语句。输出"A static block, B static block".
3. 同时,首次执行new B(),依次执行A、B中的动态语句和构造函数。输出Qx、Wy
4. 第二、第三次执行new B(),同上
5. 执行new A(). 输出Qx