這組經典 Java 技能測驗題聚焦於 final 方法繼承規則、基本類型與引用類型參數傳遞差異、包訪問權限、陣列聲明語法、字串操作合法性等基石知識,適合初階開發者查漏補缺。
class Base {
public final void amethod() { System.out.println("amethod"); }
}
public class Fin extends Base {
public static void main(String[] argv) {
Base b = new Base(); b.amethod();
}
}
正解:D. 編譯運行成功,輸出 "amethod"
解析:final 方法禁止覆寫(override),但不禁止繼承。子類 Fin 繼承了 Base 的 final 方法,main 中實例化 Base 調用 amethod() 完全合法。A、B 錯誤理解 final 作用範圍,C 無運行時錯誤依據。
static int j = 20;
main() { int i=10; p.amethod(i); print(i); print(j); }
amethod(int x) { x=x*2; j=j*2; }
正解:C. 輸出 10 和 40
解析:i 為基本類型 int,傳值調用,amethod 修改副本 x 不影響原變量 i(仍為 10)。j 為 static 類變量,屬類共享,amethod 將其乘 2 變為 40,主線程打印見證變化。核心考點:Java 唯有傳值調用,基本類型傳值、引用類型傳引用值。
// P1.java
package MyPackage;
class P1 { void afancymethod() { ... } }
// P2.java
public class P2 extends P1 { afancymethod(); }
正解:D. P1 編譯通過,P2 編譯錯誤
解析:P1 無修飾符為包級訪問權限。P2 雖繼承 P1,但位於無包(默認包)中,不同包下子類無法訪問父類包級成員。若 P2 加上 package MyPackage; 則通過。考點:包級訪問權限不跨包,即使繼承關係也不例外。
題目:哪句聲明適用於引用 50 個 String 物件的陣列?
選項:A. char a[][]; B. String a[]; C. String []a; D. Object a[50]; E. String a[50];
正解:B、C
解析:Java 陣列聲明語法:Type[] varName 或 Type varName[],長度不寫在聲明中(由 new 指定)。B、C 均為合法 String 陣列引用聲明。D、E 為 C/C++ 風格非法語法。A 為 char 二維陣列。題目問「聲明變量引用陣列」,非「創建陣列實例」,故 B、C 正確。
String s = "Example";
A. s >>>= 3; // 其餘選項截斷
解析:String 為不可變類,無位移賦值運算符 >>>=,且字串不支援位運算。此選項編譯錯誤。完整題目通常包含 substring、concat、charAt 等合法操作選項,核心考察字串不可變與合法 API 調用。
五道題橫跨繼承機制、參數傳遞語義、包訪問控制、陣列聲明規範、字串特性,構成 Java 基礎語法的「五項基本功」。建議初學者在 IDE 中逐行實驗,體會編譯器與 JVM 的真實反饋。