1. 程式人生 > >Java易錯題(1)

Java易錯題(1)

輸出 col 順序執行 執行 AR new rgs oid hello

檢查程序,是否存在問題,如果存在指出問題所在,如果不存在,說明輸出結果。

public class HelloB extends HelloA 
{
 public HelloB()
 {
 }
 {
     System.out.println("I’m B class");
 }
 static
 {
     System.out.println("static B");
 }
 public static void main(String[] args)
 {
     new HelloB();
 }
}
class HelloA
{
 public HelloA()
 {
 }
 {
     System.out.println(
"I’m A class"); } static { System.out.println("static A"); } }
A.static A
  I’m A class
  static B
  I’m B class
B.I’m A class
   I’m B class
   static A
   static B
C.static A
   static B
   I’m A class
   I’m B class
D.I’m A class
   static A
   I’m B class
   static B

答案:C.

解析:其中涉及:靜態初始化代碼塊、構造代碼塊、構造方法
當涉及到繼承時,按照如下順序執行:
1、執行父類的靜態代碼塊
static {
System.out.println("static A");
}
輸出:static A
2、執行子類的靜態代碼塊
static {
System.out.println("static B");
}
輸出:static B
3、執行父類的構造代碼塊
{
System.out.println("I’m A class");
}
輸出:I‘m A class
4、執行父類的構造函數
public HelloA() {
}
輸出:無
5、執行子類的構造代碼塊
{
System.out.println("I’m B class");
}
輸出:I‘m B class
6、執行子類的構造函數
public HelloB() {
}
輸出:無

那麽,最後的輸出為:
static A
static B
I‘m A class
I‘m B class
正確答案:C




Java易錯題(1)