Java 基礎測驗

一、選擇題(共 10 題,每題 5 分)

  1. 下列關於 Java 語言的説法,錯誤的是( )
    A. Java 是跨平台的,因為它運行在 JVM 上B. Java 支持多重繼承C. Java 是一種面向對象的語言D. Java 程序的入口方法是 main 方法
  2. 以下代碼的輸出結果是( )





    java



    運行






public class Test {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println(a + b + "");
        System.out.println("" + a + b);
    }
}

A. 30, 30

  1. B. 30, 1020C. 1020, 30D. 1020, 1020
  2. 下列關於 final 關鍵字的用法,錯誤的是( )
    A. final 修飾的類不能被繼承B. final 修飾的方法不能被重寫C. final 修飾的變量必須在聲明時初始化D. final 修飾的引用變量,其指向的對象內容可以修改
  3. 以下哪種集合是有序且可重複的( )
    A. HashSetB. TreeSetC. ArrayListD. HashMap
  4. 下列關於異常處理的説法,正確的是( )
    A. try 塊必須有對應的 catch 塊B. finally 塊中的代碼無論是否發生異常都會執行C. throw 用於聲明方法可能拋出的異常D. checked 異常必須被捕獲或聲明拋出
  5. 以下代碼的輸出結果是( )





    java



    運行






class Parent {
    public void show() {
        System.out.println("Parent");
    }
}
class Child extends Parent {
    public void show() {
        System.out.println("Child");
    }
}
public class Test {
    public static void main(String[] args) {
        Parent p = new Child();
        p.show();
    }
}

A. Parent

  1. B. ChildC. 編譯錯誤D. 運行時錯誤
  2. 下列關於接口的説法,錯誤的是( )
    A. 接口中的方法默認是 public abstractB. 接口可以繼承多個接口C. 接口中的變量默認是 public static finalD. 接口可以被實例化
  3. 以下代碼的輸出結果是( )





    java



    運行






public class Test {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = new String("abc");
        System.out.println(s1 == s2);
        System.out.println(s1.equals(s2));
    }
}

A. true, true

  1. B. true, falseC. false, trueD. false, false
  2. 下列關於多線程的説法,正確的是( )
    A. start() 方法用於執行線程的任務B. run() 方法用於啓動線程C. 多個線程訪問共享資源時,可能導致線程安全問題D. synchronized 關鍵字只能修飾方法
  3. 以下哪種數據類型不是 Java 的基本數據類型( )
    A. intB. StringC. booleanD. char

二、簡答題(共 2 題,每題 10 分)

  1. 簡述 Java 中的重載(Overload)和重寫(Override)的區別。
  2. 簡述 ArrayList 和 LinkedList 的區別及適用場景。

三、編程題(共 1 題,20 分)

編寫一個 Java 程序,計算 1 到 100 之間所有質數的和。


答案與解析

一、選擇題

  1. B
    解析:Java 不支持多重繼承,只能通過接口實現多繼承。
  2. B
    解析:
  • a + b + "":先計算 a + b = 30,再拼接空字符串,結果為 "30"
  • "" + a + b:先拼接空字符串和 a"10"),再拼接 b,結果為 "1020"
  1. C
    解析:final 修飾的變量可以在聲明時初始化,也可以在構造方法中初始化,但必須保證只初始化一次。
  2. C
    解析:
  • ArrayList 是有序、可重複的;
  • HashSet 無序、不可重複;
  • TreeSet 有序、不可重複;
  • HashMap 是鍵值對集合,無序。
  1. B
    解析:
  • try 塊可以沒有 catch 塊,但必須有 finally 塊或聲明拋出異常;
  • finally 塊中的代碼無論是否發生異常都會執行(除非 JVM 退出);
  • throw 用於手動拋出異常,throws 用於聲明方法可能拋出的異常。
  1. B
    解析:這是多態的體現,父類引用指向子類對象時,調用的是子類重寫的方法。
  2. D
    解析:接口不能被實例化,只能被類實現。
  3. C
    解析:
  • == 比較的是對象的引用地址,s1 指向常量池中的對象,s2 指向堆中的對象,地址不同;
  • equals() 比較的是字符串內容,兩者內容相同。
  1. C
    解析:
  • start() 方法用於啓動線程,run() 方法用於執行線程任務;
  • 多個線程訪問共享資源時,若沒有同步機制,可能導致數據不一致;
  • synchronized 關鍵字可以修飾方法或代碼塊。
  1. B
    解析:String 是引用數據類型,其他選項均為基本數據類型。

二、簡答題

  1. 重載(Overload)和重寫(Override)的區別
  • 重載
  • 發生在同一個類中;
  • 方法名相同,參數列表(類型、個數、順序)不同;
  • 返回值類型、訪問修飾符可以不同;
  • 與多態無關。
  • 重寫
  • 發生在父類和子類之間;
  • 方法名、參數列表、返回值類型必須相同;
  • 子類方法的訪問修飾符不能嚴於父類;
  • 與多態相關,用於實現子類的個性化行為。
  1. ArrayList 和 LinkedList 的區別及適用場景
  • 存儲結構
  • ArrayList 基於動態數組實現,連續存儲;
  • LinkedList 基於雙向鏈表實現,非連續存儲。
  • 訪問效率
  • ArrayList 隨機訪問(get(int index))效率高,時間複雜度為 O (1);
  • LinkedList 隨機訪問效率低,時間複雜度為 O (n),但插入、刪除元素效率高(無需移動元素)。
  • 適用場景
  • ArrayList 適合頻繁查詢、少量插入 / 刪除的場景;
  • LinkedList 適合頻繁插入、刪除,少量查詢的場景。

三、編程題

java

運行

public class PrimeSum {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 2; i <= 100; i++) {
            if (isPrime(i)) {
                sum += i;
            }
        }
        System.out.println("1到100之間所有質數的和為:" + sum);
    }

    // 判斷一個數是否為質數
    public static boolean isPrime(int num) {
        if (num <= 1) {
            return false;
        }
        // 優化:只需判斷到根號num
        for (int i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }
}

輸出結果:1 到 100 之間所有質數的和為:1060


總結

這套測驗題涵蓋了 Java 基礎中的核心知識點,通過練習可以鞏固對 Java 語法、面向對象、集合、異常、多線程等內容的理解。編程題則考察了邏輯思維和代碼實現能力,建議結合實際場景多練習,加深對知識點的掌握。