当前位置: 代码迷 >> Java相关 >> 代码求输出,该如何解决
  详细解决方案

代码求输出,该如何解决

热度:4172   发布时间:2013-02-25 21:45:23.0
代码求输出
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
  相关解决方案