Bài Tập, Đề Thi Trắc Nghiệm Online - Môn Java - Đề 01 bao gồm nhiều câu hỏi hay, bám sát chương trình. Cùng làm bài tập trắc nghiệm ngay.
Câu 1: Cho đoạn mã Java sau:
```java
public class Example {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5};
int sum = 0;
for (int number : numbers) {
if (number % 2 == 0) {
sum += number;
}
}
System.out.println(sum);
}
}
```
Đoạn mã trên in ra giá trị nào?
Câu 2: Phương thức `equals()` và toán tử `==` khác nhau như thế nào khi so sánh các đối tượng trong Java?
- A. `==` so sánh giá trị thuộc tính, `equals()` so sánh tham chiếu.
- B. Cả hai đều so sánh giá trị thuộc tính của đối tượng.
- C. `==` so sánh tham chiếu đối tượng, `equals()` so sánh nội dung (giá trị) đối tượng.
- D. Cả hai đều so sánh tham chiếu đối tượng.
Câu 3: Trong lập trình hướng đối tượng Java, "tính đa hình" (polymorphism) mang lại lợi ích chính nào sau đây?
- A. Tăng tính bảo mật của dữ liệu.
- B. Giảm độ phức tạp của mã nguồn.
- C. Cải thiện hiệu suất thực thi chương trình.
- D. Cho phép đối tượng thuộc các lớp khác nhau phản ứng khác nhau với cùng một phương thức gọi.
Câu 4: Khi nào thì nên sử dụng giao diện (interface) thay vì lớp trừu tượng (abstract class) trong thiết kế lớp Java?
- A. Khi muốn chia sẻ trạng thái (thuộc tính) giữa các lớp con.
- B. Khi một lớp cần kế thừa hành vi từ nhiều nguồn khác nhau (đa kế thừa).
- C. Khi muốn cung cấp một phương thức khởi tạo (constructor) cho các lớp con.
- D. Khi muốn ngăn chặn việc tạo đối tượng trực tiếp từ lớp cha.
Câu 5: Cho đoạn code Java sau, kết quả in ra màn hình là gì?
```java
public class ScopeExample {
static int x = 10;
public static void main(String[] args) {
int x = 20;
System.out.println(x);
printX();
}
static void printX() {
System.out.println(x);
}
}
```
- A. 20
10
- B. 10
20
- C. 20
20
- D. 10
10
Câu 6: Trong Java, cơ chế "garbage collection" (thu gom rác) hoạt động như thế nào?
- A. Lập trình viên phải chủ động giải phóng bộ nhớ khi đối tượng không còn dùng đến.
- B. Hệ điều hành quản lý việc giải phóng bộ nhớ cho các ứng dụng Java.
- C. JVM tự động xác định và giải phóng bộ nhớ của các đối tượng không còn được tham chiếu đến.
- D. Garbage collection chỉ hoạt động khi bộ nhớ hệ thống gần đầy.
Câu 7: Kiểu dữ liệu nào sau đây KHÔNG phải là kiểu dữ liệu nguyên thủy (primitive data type) trong Java?
- A. int
- B. boolean
- C. char
- D. String
Câu 8: Ngoại lệ (Exception) "NullPointerException" thường xảy ra khi nào trong Java?
- A. Khi truy cập một phần tử mảng vượt quá chỉ số cho phép.
- B. Khi cố gắng truy cập hoặc thao tác trên một biến tham chiếu đối tượng có giá trị null.
- C. Khi thực hiện phép chia cho 0.
- D. Khi chuyển đổi một chuỗi không hợp lệ sang số.
Câu 9: Từ khóa "final" có thể được sử dụng với biến, phương thức và lớp trong Java. Ý nghĩa của "final" khi sử dụng với một lớp là gì?
- A. Lớp đó trở thành lớp trừu tượng (abstract).
- B. Không thể tạo đối tượng (instance) từ lớp đó.
- C. Lớp đó không thể được kế thừa (subclass).
- D. Các phương thức trong lớp đó không thể bị ghi đè (override).
Câu 10: Cho đoạn mã sau, điều gì xảy ra khi biên dịch và chạy?
```java
public class TypeCasting {
public static void main(String[] args) {
double d = 10.5;
int i = d;
System.out.println(i);
}
}
```
- A. Chương trình biên dịch và in ra 10.5.
- B. Chương trình biên dịch và in ra 11.
- C. Chương trình biên dịch và in ra 10.
- D. Lỗi biên dịch vì không thể ép kiểu ngầm định từ double sang int.
Câu 11: Vòng lặp `for-each` (enhanced for loop) trong Java được sử dụng chủ yếu để làm gì?
- A. Duyệt qua các phần tử của một mảng hoặc collection.
- B. Thực hiện lặp với số lần biết trước.
- C. Lặp cho đến khi một điều kiện sai.
- D. Tạo vòng lặp vô hạn.
Câu 12: Phương thức `substring(int beginIndex, int endIndex)` của lớp String trong Java trả về chuỗi con như thế nào?
- A. Chuỗi con bắt đầu từ `beginIndex` và kết thúc ở `endIndex` (bao gồm cả hai chỉ số).
- B. Chuỗi con bắt đầu từ `beginIndex` và kết thúc ở `endIndex - 1` (không bao gồm `endIndex`).
- C. Chuỗi con bắt đầu từ `beginIndex + 1` và kết thúc ở `endIndex` (bao gồm cả hai chỉ số).
- D. Chuỗi con bắt đầu từ `beginIndex + 1` và kết thúc ở `endIndex - 1` (không bao gồm cả hai chỉ số).
Câu 13: Trong Java, từ khóa `static` được sử dụng để khai báo biến và phương thức thuộc về lớp chứ không phải đối tượng cụ thể. Điều này có nghĩa là gì?
- A. Biến và phương thức static chỉ có thể được truy cập từ bên trong lớp chứa chúng.
- B. Biến static được khởi tạo lại mỗi khi một đối tượng của lớp được tạo ra.
- C. Phương thức static không thể truy cập các biến thành viên (non-static) của lớp.
- D. Tất cả các đối tượng của lớp chia sẻ cùng một bản sao của biến static và có thể gọi phương thức static trực tiếp qua tên lớp.
Câu 14: Cho đoạn mã sau, kết quả in ra là gì?
```java
public class StringBuilderExample {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder(
- A. JavaProgramming
- B. Java-Programming
- C. Java - Programming
- D. Java -Programming
Câu 15: Nguyên tắc "Encapsulation" (tính đóng gói) trong OOP Java nhằm mục đích chính là gì?
- A. Tăng hiệu suất thực thi của chương trình.
- B. Ẩn giấu thông tin và bảo vệ dữ liệu bên trong đối tượng khỏi sự truy cập và sửa đổi trực tiếp từ bên ngoài.
- C. Cho phép đa kế thừa trong Java.
- D. Đơn giản hóa việc tạo đối tượng.
Câu 16: Phương thức `parseInt()` thuộc lớp nào và dùng để làm gì?
- A. Lớp `Integer`, dùng để chuyển đổi chuỗi thành số nguyên.
- B. Lớp `String`, dùng để chuyển đổi số nguyên thành chuỗi.
- C. Lớp `Scanner`, dùng để đọc số nguyên từ đầu vào.
- D. Lớp `System`, dùng để in số nguyên ra màn hình.
Câu 17: Cho đoạn mã sau, kết quả in ra là gì?
```java
public class ArrayExample {
public static void main(String[] args) {
int[] arr = new int[5];
System.out.println(arr[5]);
}
}
```
- A. 0
- B. 5
- C. Lỗi `ArrayIndexOutOfBoundsException` khi chạy chương trình.
- D. Chương trình biên dịch thành công nhưng không in ra gì.
Câu 18: Sự khác biệt chính giữa `ArrayList` và `LinkedList` trong Java Collections Framework là gì?
- A. `ArrayList` nhanh hơn trong việc thêm/xóa phần tử ở đầu danh sách, `LinkedList` nhanh hơn trong truy cập ngẫu nhiên.
- B. Không có sự khác biệt về hiệu suất, chỉ khác nhau về cú pháp sử dụng.
- C. `ArrayList` sử dụng bộ nhớ hiệu quả hơn `LinkedList`.
- D. `ArrayList` dựa trên mảng động, truy cập phần tử nhanh (O(1)), thêm/xóa ở giữa/đầu chậm. `LinkedList` dựa trên danh sách liên kết, thêm/xóa nhanh (O(1)), truy cập chậm (O(n)).
Câu 19: Trong Java, phương thức `main` phải được khai báo với từ khóa `public static void`. Giải thích ý nghĩa của từ khóa `static` trong khai báo này.
- A. `static` cho phép phương thức `main` được ghi đè (override) trong lớp con.
- B. `static` cho phép JVM gọi phương thức `main` trực tiếp thông qua tên lớp mà không cần tạo đối tượng.
- C. `static` đảm bảo phương thức `main` luôn chạy đầu tiên khi chương trình khởi động.
- D. `static` giúp tối ưu hiệu suất thực thi của phương thức `main`.
Câu 20: Cho đoạn mã sau, kết quả in ra là gì?
```java
public class IncrementExample {
public static void main(String[] args) {
int x = 5;
int y = x++;
System.out.println(
- A. x = 5, y = 5
- B. x = 5, y = 6
- C. x = 6, y = 5
- D. x = 6, y = 6
Câu 21: Để đọc dữ liệu từ một file văn bản trong Java, lớp nào thường được sử dụng?
- A. `BufferedReader` hoặc `Scanner` kết hợp với `FileReader`.
- B. `PrintWriter` hoặc `FileWriter`.
- C. `ObjectInputStream` hoặc `ObjectOutputStream`.
- D. `FileInputStream` hoặc `FileOutputStream`.
Câu 22: Trong xử lý ngoại lệ (exception handling) của Java, khối lệnh `finally` có vai trò gì?
- A. Chỉ được thực thi khi có ngoại lệ xảy ra trong khối `try`.
- B. Chỉ được thực thi khi không có ngoại lệ xảy ra trong khối `try`.
- C. Được thực thi trước khối `catch`.
- D. Luôn được thực thi sau khối `try` và `catch`, bất kể có ngoại lệ xảy ra hay không, thường dùng để giải phóng tài nguyên.
Câu 23: Cho đoạn mã sau, kết quả in ra là gì?
```java
public class BooleanExample {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println(a && (b = true));
System.out.println(b);
}
}
```
- A. true
true
- B. false
true
- C. true
false
- D. false
false
Câu 24: Phương thức `hashCode()` và `equals()` có mối quan hệ như thế nào trong Java khi làm việc với các cấu trúc dữ liệu như `HashMap` và `HashSet`?
- A. Không có mối quan hệ, chúng là hai phương thức độc lập.
- B. Nếu `hashCode()` của hai đối tượng bằng nhau thì `equals()` cũng phải trả về true.
- C. Nếu `equals()` của hai đối tượng trả về true thì `hashCode()` của chúng phải trả về cùng một giá trị.
- D. Nếu `hashCode()` của hai đối tượng khác nhau thì `equals()` cũng phải trả về false.
Câu 25: Trong Java, "constructor" (hàm tạo) có vai trò gì?
- A. Khởi tạo trạng thái ban đầu cho đối tượng khi nó được tạo ra.
- B. Giải phóng bộ nhớ khi đối tượng không còn được sử dụng.
- C. Định nghĩa hành vi của đối tượng.
- D. Khai báo các thuộc tính của đối tượng.
Câu 26: Cho đoạn mã sau, kết quả in ra là gì?
```java
public class TernaryOperator {
public static void main(String[] args) {
int age = 15;
String message = (age >= 18) ?
- A. Adult
- B. Minor
- C. true
- D. false
Câu 27: Phương thức `toString()` được định nghĩa trong lớp `Object` và thường được ghi đè (override) trong các lớp khác. Mục đích của việc ghi đè phương thức `toString()` là gì?
- A. Để so sánh hai đối tượng có bằng nhau hay không.
- B. Để chuyển đổi đối tượng thành một kiểu dữ liệu khác.
- C. Để trả về một chuỗi đại diện cho đối tượng, giúp việc in ấn và debug dễ dàng hơn.
- D. Để tạo bản sao của đối tượng.
Câu 28: Trong Java, "package" (gói) được sử dụng để làm gì?
- A. Tăng hiệu suất biên dịch chương trình.
- B. Giảm kích thước file thực thi.
- C. Tăng tính bảo mật cho ứng dụng.
- D. Tổ chức và quản lý các lớp, tránh xung đột tên và tạo không gian tên.
Câu 29: Cho đoạn mã sau, kết quả in ra là gì?
```java
public class LoopExample {
public static void main(String[] args) {
for (int i = 0; i < 5; ++i) {
if (i == 3) {
continue;
}
System.out.print(i +
- A. 0 1 2 4
- B. 0 1 2 3 4
- C. 0 1 2
- D. 1 2 4
Câu 30: Trong Java, annotation (chú thích) được sử dụng để làm gì?
- A. Thay thế cho comment (chú thích) thông thường trong code.
- B. Cung cấp metadata (dữ liệu về dữ liệu) cho compiler và JVM, hỗ trợ kiểm tra lỗi tại thời điểm biên dịch và runtime.
- C. Tăng tốc độ thực thi của chương trình.
- D. Giảm độ phức tạp của mã nguồn.