Bỏ qua để đến nội dung

Bài tập trắc nghiệm Java - Cơ bản

Trang này tổng hợp 200 câu hỏi trắc nghiệm Java cơ bản, sắp xếp theo chủ đề từ dễ đến khó. Mỗi câu có 4 đáp án A/B/C/D.

Chọn một đáp án cho mỗi câu - đáp án đúng/sai và phần giải thích sẽ tự động hiện ra ngay sau khi bạn chọn.


Câu 1. Trong Java, để khai báo một biến số nguyên x có giá trị 5, ta viết:

x = 5;

int x = 5;

var x = 5;

x := 5;


Câu 2. Kiểu dữ liệu nào dùng để lưu số thực có độ chính xác đơn (32-bit)?

double

float

char

boolean


Câu 3. Kiểu dữ liệu nào dùng để lưu một ký tự Unicode đơn?

String

char

byte

Character[]


Câu 4. Đâu là khai báo biến hợp lệ trong Java?

int 1age = 10;

int class = 10;

int _age = 10;

int my age = 10;


Câu 5. Giá trị mặc định của một biến boolean là trường (field) của lớp khi chưa gán là gì?

false

true

null

0


Câu 6. Kiểu số nguyên nào có kích thước lớn nhất trong các kiểu nguyên thủy của Java?

int

short

byte

long


Câu 7. Từ khóa nào (Java 10+) cho phép trình biên dịch tự suy luận kiểu dữ liệu của biến cục bộ?

auto

var

let

dynamic


Câu 8. Đoạn code sau có biên dịch được không?

int fruit = 5;
fruit = "apple";

Có, in ra “apple”

Có, nhưng ném ngoại lệ lúc chạy

Không, lỗi biên dịch

Không có gì xảy ra


Câu 9. Tên biến nào không hợp lệ trong Java?

2ndValue

secondValue

$value

_value


Câu 10. Sự khác biệt giữa 'A'"A" trong Java là gì?

Không khác gì, cả hai đều là String

‘A’ là một giá trị char, “A” là một String

‘A’ là String, “A” là char

Cả hai đều là kiểu char


Câu 11. Đoạn code sau in ra gì?

System.out.println(7 / 2);

3.5

3

4

Lỗi biên dịch


Câu 12. Đoạn code sau in ra gì?

System.out.println(7 % 2);

1

3

3.5

0


Câu 13. Đoạn code sau in ra gì?

int x = 5;
double y = 2.0;
System.out.println(x / y);

2

Lỗi biên dịch

2.5

2.0


Câu 14. Đoạn code sau in ra gì?

int i = 5;
System.out.println(i++);
System.out.println(i);

6 và 6

5 và 6

5 và 5

6 và 5


Câu 15. Đoạn code sau in ra gì?

int i = 5;
System.out.println(++i);

6

5

7

Lỗi biên dịch


Câu 16. Toán tử nào dùng để lấy phần dư của phép chia trong Java?

//

div

mod

%


Câu 17. Đoạn code sau in ra giá trị nào của x?

int x = 10;
x += 5;
x -= 2;
System.out.println(x);

10

13

15

7


Câu 18. Biểu thức 3 + 4 * 2 có giá trị bằng bao nhiêu?

14

10

11

24


Câu 19. Đoạn code sau in ra gì?

int a = 2;
int b = 3;
System.out.println(a * b % 4);

2

6

0

1.5


Câu 20. Đoạn code sau in ra gì?

double x = 5;
System.out.println(x % 2);

Lỗi biên dịch, % chỉ dùng cho int

2

2.5

1.0


Câu 21. Đoạn code sau in ra gì?

int a = 5, b = 10;
System.out.println(a > b);

1

0

false

true


Câu 22. Toán tử nào kiểm tra “không bằng nhau” trong Java?

<>

!=

=/=

isNot


Câu 23. Đoạn code sau in ra gì?

boolean a = true;
boolean b = false;
System.out.println(a && b);

false

true

0

Lỗi biên dịch


Câu 24. Đoạn code sau in ra gì?

boolean a = true;
boolean b = false;
System.out.println(a || b);

false

true

1

Lỗi biên dịch


Câu 25. Đoạn code sau có biên dịch được không?

int a = 5, b = 10, c = 15;
if (a < b < c) { }

Có, và trả về true

Có, nhưng ném ngoại lệ lúc chạy

Không, lỗi biên dịch

Có, và trả về false


Câu 26. Toán tử ! dùng để làm gì?

Phép nhân

Kiểm tra bằng nhau

Giai thừa (factorial)

Đảo ngược giá trị boolean (phủ định logic)


Câu 27. Cho x = 0. Đoạn code sau in ra gì?

int x = 0;
if (x != 0 && 10 / x > 1) {
System.out.println("A");
} else {
System.out.println("B");
}

B

A

Ném ArithmeticException (chia cho 0)

Lỗi biên dịch


Câu 28. Toán tử nào có độ ưu tiên cao hơn (được tính trước) trong biểu thức a > b && c < d?

&&

> và <

Cả hai ngang nhau

Không xác định


Câu 29. Đoạn code sau in ra gì?

System.out.println(5 == 5.0);

Lỗi biên dịch

false

true

0


Câu 30. Đoạn code sau in ra gì?

int a = 5;
System.out.println(!(a > 3));

false

true

Lỗi biên dịch

1


Nhóm 4: Nhập/Xuất dữ liệu với Scanner/println

Phần tiêu đề “Nhóm 4: Nhập/Xuất dữ liệu với Scanner/println”

Câu 31. Sự khác biệt giữa System.out.printlnSystem.out.print là gì?

Không có gì khác biệt

print in ra màn hình lỗi (stderr), println in ra màn hình chuẩn

println tự động xuống dòng sau khi in, print thì không

println chỉ in được số, print in được mọi kiểu


Câu 32. Cần import gì để sử dụng lớp Scanner?

import java.io.Scanner;

import java.util.Scanner;

import java.lang.Scanner;

Không cần import


Câu 33. Câu lệnh nào tạo một đối tượng Scanner đọc dữ liệu từ bàn phím?

Scanner sc = new Scanner(System.in);

Scanner sc = new Scanner();

Scanner sc = System.in;

Scanner sc = new Scanner(System.out);


Câu 34. Phương thức nào của Scanner dùng để đọc một số nguyên?

nextString()

readInt()

nextDouble()

nextInt()


Câu 35. Vì sao đoạn code sau thường gây lỗi/khó hiểu khi chạy?

Scanner sc = new Scanner(System.in);
int age = sc.nextInt();
String name = sc.nextLine();

nextInt() không tồn tại trong Scanner

nextInt() không đọc ký tự xuống dòng còn sót lại, khiến nextLine() sau đó đọc ngay chuỗi rỗng

Phải gọi sc.close() trước khi đọc chuỗi

Không thể đọc int và String bằng cùng một Scanner


Câu 36. Phương thức nào của Scanner đọc toàn bộ một dòng (bao gồm khoảng trắng)?

next()

nextInt()

nextLine()

nextWord()


Câu 37. Đoạn code sau in ra gì?

String name = "Java";
int year = 2025;
System.out.println(name + " " + year);

Java 2025

Lỗi biên dịch (không thể nối String với int)

nameyear

Java+2025


Câu 38. Chuỗi định dạng nào dùng cho một số thực trong System.out.printf?

%s

%d

%c

%f


Câu 39. Đoạn code sau in ra gì?

System.out.printf("%.2f", 3.14159);

3.14159

3.14

3.1

3


Câu 40. Phương thức nào của Scanner đọc một số thực dấu chấm động (double)?

nextFloat()

nextNumber()

nextDouble()

nextInt()


Nhóm 5: Câu lệnh rẽ nhánh if - else (câu 41-50)

Phần tiêu đề “Nhóm 5: Câu lệnh rẽ nhánh if - else (câu 41-50)”

Câu 41. Cú pháp nào sau đây khai báo đúng một khối if trong Java?

if x > 5 then { }

if (x > 5) { }

if x > 5:

if [x > 5] { }


Câu 42. Đoạn code sau in ra gì?

int x = 7;
if (x > 10) {
System.out.println("A");
} else if (x > 5) {
System.out.println("B");
} else {
System.out.println("C");
}

A

B

Không in gì

Lỗi biên dịch


Câu 43. Toán tử ba ngôi (ternary) ?: trong Java có cú pháp:

điều_kiện ? giá_trị_nếu_đúng : giá_trị_nếu_sai

điều_kiện : giá_trị_nếu_đúng ? giá_trị_nếu_sai

if điều_kiện ? giá_trị_nếu_đúng else giá_trị_nếu_sai

điều_kiện then giá_trị_nếu_đúng else giá_trị_nếu_sai


Câu 44. Đoạn code sau in ra gì?

int a = 3, b = 8;
int max = (a > b) ? a : b;
System.out.println(max);

3

true

Lỗi biên dịch

8


Câu 45. Trong Java, biểu thức điều kiện của if phải có kiểu dữ liệu nào?

int (0 là sai, khác 0 là đúng, giống C)

boolean

String

Bất kỳ kiểu nào cũng được


Câu 46. Đoạn code sau có biên dịch được không?

int x = 1;
if (x) {
System.out.println("yes");
}

Có, in ra “yes”

Có, nhưng không in gì

Không, lỗi biên dịch vì x không phải kiểu boolean

Có, ném ngoại lệ khi chạy


Câu 47. if lồng nhau (nested if) nghĩa là gì?

Một khối if/else được đặt bên trong một khối if/else khác

Hai câu lệnh if độc lập, không liên quan nhau

Một vòng lặp chứa câu lệnh if

Dùng else if thay vì if lồng nhau


Câu 48. Đoạn code sau in ra gì?

int score = 75;
String result;
if (score >= 90) {
result = "Giỏi";
} else if (score >= 70) {
result = "Khá";
} else {
result = "Trung bình";
}
System.out.println(result);

Giỏi

Trung bình

Lỗi biên dịch vì result chưa khởi tạo

Khá


Câu 49. Toán tử nào KHÔNG thể dùng trực tiếp bên trong biểu thức điều kiện của if?

&&

= (gán giá trị, không phải ==)

==

!


Câu 50. Đoạn code sau in ra gì?

boolean isMember = true;
int age = 15;
String ticket = (isMember && age < 18) ? "Vé trẻ em hội viên" : "Vé thường";
System.out.println(ticket);

Vé thường

Lỗi biên dịch

Vé trẻ em hội viên

null


Câu 51. Cú pháp đúng của vòng lặp for cổ điển trong Java là:

for (int i = 0; i < 10; i++) { }

for (int i = 0, i < 10, i++) { }

for i in range(10) { }

for (int i = 0 to 10) { }


Câu 52. Đoạn code sau in ra bao nhiêu dòng?

for (int i = 0; i < 5; i++) {
System.out.println(i);
}

4

5

6

Vòng lặp vô hạn


Câu 53. Vòng lặp “for-each” (enhanced for) dùng để làm gì?

Chỉ dùng được với String

Lặp lùi từ phần tử cuối về đầu

Thay thế hoàn toàn vòng lặp while

Duyệt qua từng phần tử của mảng hoặc collection mà không cần quản lý chỉ số


Câu 54. Đoạn code sau in ra gì?

int[] nums = {2, 4, 6};
int sum = 0;
for (int n : nums) {
sum += n;
}
System.out.println(sum);

12

6

0

Lỗi biên dịch


Câu 55. Đoạn code sau in ra gì?

for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 2; j++) {
System.out.print(i * j + " ");
}
}

1 2 3

1 2 2 4 3 6

1 2 2 4 3 6 (khoảng trắng cuối mỗi số)

Lỗi biên dịch


Câu 56. Vòng lặp for sau chạy bao nhiêu lần?

for (int i = 10; i > 0; i -= 2) {
// ...
}

10

5

4

Vòng lặp vô hạn


Câu 57. Có thể bỏ trống phần nào trong ba phần của vòng for cổ điển?

Chỉ phần khởi tạo

Chỉ phần điều kiện

Chỉ phần cập nhật

Cả ba phần đều có thể bỏ trống (dấu ; vẫn phải giữ)


Câu 58. Đoạn code sau in ra gì?

String[] fruits = {"táo", "cam", "xoài"};
for (String f : fruits) {
System.out.print(f + "-");
}

táo-cam-xoài-

táo-cam-xoài

-táo-cam-xoài

Lỗi biên dịch


Câu 59. Trong for-each for (int x : arr), việc thay đổi giá trị x bên trong vòng lặp có ảnh hưởng đến mảng arr gốc không?

Có, vì x là tham chiếu trực tiếp đến phần tử mảng

Có, nhưng chỉ với mảng kiểu số

Không, vì x chỉ là bản sao giá trị của phần tử tại mỗi lượt lặp

Không, vì for-each không cho phép gán lại x


Câu 60. Đoạn code sau in ra gì?

int count = 0;
for (int i = 0; i < 20; i += 5) {
count++;
}
System.out.println(count);

5

4

20

3


Nhóm 7: Vòng lặp while và do-while (câu 61-70)

Phần tiêu đề “Nhóm 7: Vòng lặp while và do-while (câu 61-70)”

Câu 61. Cú pháp đúng của vòng lặp while trong Java là:

while (điều_kiện) { }

while điều_kiện:

while { điều_kiện }

loop (điều_kiện) { }


Câu 62. Sự khác biệt chính giữa whiledo-while là gì?

do-while không cho phép dùng break

while nhanh hơn do-while

do-while luôn thực thi khối lệnh ít nhất một lần trước khi kiểm tra điều kiện

Không có sự khác biệt nào


Câu 63. Cú pháp đúng của do-while trong Java là:

do { } while (điều_kiện)

while (điều_kiện) do { }

do while (điều_kiện) { }

do { } while (điều_kiện);


Câu 64. Đoạn code sau in ra gì?

int i = 10;
while (i < 5) {
System.out.println(i);
i++;
}
System.out.println("Xong");

10, rồi “Xong”

Chỉ “Xong” (vòng lặp không chạy lần nào)

Vòng lặp vô hạn

Lỗi biên dịch


Câu 65. Đoạn code sau in ra gì?

int i = 10;
do {
System.out.println(i);
i++;
} while (i < 5);

10 (in một lần duy nhất)

Không in gì

Vòng lặp vô hạn

Lỗi biên dịch


Câu 66. Cách nào sau đây thoát khỏi một vòng lặp vô hạn while (true) { } một cách có kiểm soát?

Không thể, while (true) luôn chạy mãi mãi

Dùng continue khi thỏa điều kiện dừng

Dùng break khi thỏa điều kiện dừng

Đặt while (true); ở cuối vòng lặp


Câu 67. Đoạn code sau in ra bao nhiêu số?

int i = 1;
while (i <= 100) {
if (i > 3) {
break;
}
System.out.println(i);
i++;
}

100

0

4

3


Câu 68. Khi nào nên ưu tiên dùng do-while thay vì while?

Khi số lần lặp đã biết trước chính xác

Khi cần chạy khối lệnh ít nhất một lần trước khi kiểm tra điều kiện, ví dụ menu nhập liệu lặp lại

Khi cần duyệt qua từng phần tử của mảng

do-while không có ứng dụng thực tế nào


Câu 69. Đoạn code sau in ra gì?

int sum = 0;
int i = 1;
while (i <= 5) {
sum += i;
i++;
}
System.out.println(sum);

15

10

5

Vòng lặp vô hạn


Câu 70. Thiếu phần nào trong đoạn code sau sẽ gây ra vòng lặp vô hạn?

int i = 0;
while (i < 5) {
System.out.println(i);
}

Thiếu dấu ; sau while

Thiếu break

Thiếu bước cập nhật i++ bên trong vòng lặp nên i không bao giờ đổi

Đoạn code này không bị lỗi gì


Câu 71. Cách khai báo và khởi tạo một mảng int gồm 5 phần tử trong Java là:

int[] arr = new int[5];

int arr[5];

array int arr = 5;

int arr = new int(5);


Câu 72. Chỉ số (index) của phần tử đầu tiên trong mảng Java là bao nhiêu?

1

0

-1

Tùy vào kiểu dữ liệu


Câu 73. Đoạn code sau in ra gì?

int[] arr = {10, 20, 30};
System.out.println(arr.length);

Lỗi biên dịch vì length cần dấu ()

30

2

3


Câu 74. Đoạn code sau xảy ra chuyện gì?

int[] arr = new int[3];
System.out.println(arr[3]);

In ra 0

In ra giá trị rác

Ném ngoại lệ ArrayIndexOutOfBoundsException

Lỗi biên dịch


Câu 75. Giá trị mặc định của các phần tử trong một mảng int[] vừa được tạo bằng new int[5] là gì?

0

Giá trị rác không xác định (giống C++)

null

Ném lỗi nếu chưa gán giá trị


Câu 76. Phương thức nào dùng để in nội dung mảng dưới dạng chuỗi dễ đọc, ví dụ [1, 2, 3]?

arr.toString()

Arrays.toString(arr)

System.out.println(arr) in trực tiếp nội dung dễ đọc

arr.print()


Câu 77. Đoạn code sau in ra gì?

int[] arr = {1, 2, 3};
arr[1] = 99;
System.out.println(arr[1]);

2

1

Lỗi biên dịch vì mảng khởi tạo bằng {} không thể sửa

99


Câu 78. Sau khi tạo, kích thước của một mảng Java có thể thay đổi được không?

Có, dùng arr.resize(n)

Có, dùng arr.length = n

Không, mảng Java có kích thước cố định ngay khi tạo

Có, tự động tăng khi thêm phần tử


Câu 79. Đoạn code sau in ra gì?

int[] a = {1, 2, 3};
int[] b = a;
b[0] = 100;
System.out.println(a[0]);

100

1

Lỗi biên dịch

0


Câu 80. Cách nào sau đây khai báo một mảng String với 3 phần tử khởi tạo sẵn?

String arr = new String[]{"a", "b", "c"};

String[] arr = {"a", "b", "c"};

String[3] arr = ("a", "b", "c");

String arr[] = "a", "b", "c";


Câu 81. Trong Java, String là:

Một kiểu dữ liệu nguyên thủy (primitive type)

Một mảng ký tự thông thường

Một lớp (class), tức là kiểu tham chiếu (reference type)

Một từ khóa (keyword)


Câu 82. Đặc điểm nào sau đây đúng với String trong Java?

Có thể thay đổi nội dung trực tiếp sau khi tạo (mutable)

Bất biến (immutable) - mọi thao tác “sửa đổi” đều tạo ra một String mới

Chỉ có thể chứa tối đa 255 ký tự

Tự động giải phóng bộ nhớ ngay khi hết dùng, không cần garbage collector


Câu 83. Khai báo String s1 = "hello";String s2 = "hello"; (dùng literal). Java sẽ:

Cho s1s2 cùng trỏ đến một đối tượng trong String pool

Luôn tạo hai đối tượng String khác nhau trên heap

Báo lỗi biên dịch vì trùng giá trị

Chỉ s1 được cấp phát bộ nhớ, s2 là con trỏ null


Câu 84. Đoạn code sau in ra gì?

String s1 = new String("hi");
String s2 = "hi";
System.out.println(s1 == s2);

true

Lỗi biên dịch

Lỗi runtime

false


Câu 85. Toán tử nào dùng để nối (concatenate) hai chuỗi trong Java?

&

+

.

++


Câu 86. Phương thức nào trả về độ dài của một chuỗi String?

s.size()

s.length (không dấu ngoặc)

s.length()

s.count()


Câu 87. Đoạn code sau in ra gì?

String s = "Hello World";
System.out.println(s.substring(6));

World

Hello

Hello World

orld


Câu 88. Phương thức nào tìm vị trí xuất hiện đầu tiên của một chuỗi con?

find()

indexOf()

search()

locate()


Câu 89. Cách chính xác để so sánh nội dung của hai chuỗi trong Java là:

s1 == s2

s1 === s2

s1.compare(s2)

s1.equals(s2)


Câu 90. Đoạn code sau in ra gì?

String s = " Java ";
System.out.println(s.trim());

“ Java “ (không đổi)

Lỗi biên dịch

“Java” (đã bỏ khoảng trắng đầu/cuối)

“Java” nhưng vẫn còn khoảng trắng ở giữa các ký tự


Câu 91. Cú pháp khai báo một phương thức trong Java gồm những thành phần nào theo đúng thứ tự?

tên phương thức, kiểu trả về, tham số

phạm vi truy cập, kiểu trả về, tên phương thức, danh sách tham số

tham số, kiểu trả về, tên phương thức

kiểu trả về, tham số, tên phương thức


Câu 92. Một phương thức không trả về giá trị nào phải khai báo kiểu trả về là:

void

null

empty

Không cần khai báo kiểu trả về


Câu 93. Trong đoạn code:

static int add(int a, int b) {
return a + b;
}

ab được gọi là gì?

Đối số (argument)

Biến toàn cục

Tham số (parameter)

Hằng số


Câu 94. Đoạn code sau in ra gì?

static void increment(int x) {
x = x + 1;
}
public static void main(String[] args) {
int number = 5;
increment(number);
System.out.println(number);
}

6

5

0

Lỗi biên dịch


Câu 95. Nạp chồng phương thức (method overloading) là:

Ghi đè phương thức của lớp cha ở lớp con

Gọi một phương thức nhiều lần trong vòng lặp

Đặt tên phương thức trùng với tên biến

Nhiều phương thức cùng tên nhưng khác danh sách tham số trong cùng một lớp


Câu 96. Hai phương thức sau có được xem là overloading hợp lệ không?

int calc(int a, int b) { return a + b; }
double calc(int a, int b) { return a - b; }

Không - lỗi biên dịch vì chỉ khác kiểu trả về, tham số giống hệt nhau

Có, vì kiểu trả về khác nhau là đủ

Có, nhưng chỉ chạy được phương thức đầu tiên

Không - vì Java không cho phép đặt hai phương thức trùng tên


Câu 97. Giá trị mặc định trả về khi một phương thức khai báo void nhưng có return; (không kèm giá trị) là gì?

null

0

Không trả về giá trị nào cả - return; chỉ dùng để thoát sớm khỏi phương thức

Lỗi biên dịch


Câu 98. Từ khóa nào cho phép một phương thức nhận số lượng tham số không cố định (varargs)?

int[] numbers

int... numbers

int* numbers

List numbers


Câu 99. Đoạn code sau in ra gì?

static void addItem(List<String> list) {
list.add("mới");
}
public static void main(String[] args) {
List<String> items = new ArrayList<>();
items.add("ban đầu");
addItem(items);
System.out.println(items);
}

[ban đầu]

[]

Lỗi biên dịch

[ban đầu, mới]


Câu 100. Varargs (...) trong danh sách tham số phải:

Là tham số cuối cùng trong danh sách tham số

Là tham số đầu tiên trong danh sách tham số

Luôn đứng một mình, không được kết hợp với tham số khác

Chỉ dùng được với kiểu String


Nhóm 11: Toán tử gán, tăng/giảm và toán tử ba ngôi

Phần tiêu đề “Nhóm 11: Toán tử gán, tăng/giảm và toán tử ba ngôi”

Câu 101. Đoạn code sau in ra gì?

int x = 5;
x += 3;
System.out.println(x);

5

3

8

Lỗi biên dịch


Câu 102. Sự khác biệt giữa x++ (postfix) và ++x (prefix) là gì?

Không có khác biệt gì, cả hai đều giống nhau

x++ trả về giá trị của x rồi mới tăng; ++x tăng x rồi mới trả về giá trị mới

x++ tăng 2 đơn vị, ++x tăng 1 đơn vị

++x chỉ dùng được với kiểu double


Câu 103. Đoạn code sau in ra gì?

int x = 5;
int y = x++ + ++x;
System.out.println(y);

10

11

13

12


Câu 104. Toán tử ba ngôi (ternary) trong Java có cú pháp:

condition ? valueIfTrue : valueIfFalse

if condition then valueIfTrue else valueIfFalse

condition -> valueIfTrue, valueIfFalse

condition : valueIfTrue ? valueIfFalse


Câu 105. Đoạn code sau in ra gì?

int a = 10, b = 20;
int max = (a > b) ? a : b;
System.out.println(max);

10

true

20

Lỗi biên dịch


Câu 106. Đoạn code sau in ra gì?

int a, b, c;
a = b = c = 5;
System.out.println(a + " " + b + " " + c);

Lỗi biên dịch vì không thể gán đồng thời nhiều biến

5 5 5

5 0 0

null null null


Câu 107. Toán tử %= thực hiện điều gì?

Gán lại biến bằng phần dư của phép chia biến đó cho giá trị bên phải

Nhân biến với phần trăm

So sánh biến với giá trị bên phải

Không tồn tại trong Java


Câu 108. Đoạn code sau in ra gì?

int x = 8;
x /= 2;
x *= 3;
System.out.println(x);

8

4

24

12


Câu 109. Biểu thức ternary lồng nhau nào sau đây trả về "B" khi score = 75?

String grade = (score >= 90) ? "A" : (score >= 70) ? "B" : "C";

Không hợp lệ, Java không cho phép lồng ternary

“A”

“B”

“C”


Câu 110. Đoạn code sau in ra gì?

int x = 3;
int y = x-- - --x;
System.out.println(y);

0

2

3

1


Câu 111. Chuyển đổi kiểu int sang double (ví dụ double d = 5;) là dạng ép kiểu nào?

Ép kiểu tường minh (explicit narrowing)

Ép kiểu ngầm định (implicit widening)

Không hợp lệ, phải ép kiểu tường minh

Chỉ hợp lệ trong phương thức static


Câu 112. Đoạn code sau in ra gì?

double d = 9.99;
int x = (int) d;
System.out.println(x);

10

9.99

Lỗi biên dịch

9


Câu 113. Chuyển đổi từ double sang int (narrowing) cần:

Ép kiểu tường minh (explicit cast), ví dụ (int) someDouble

Không cần gì cả, Java tự chuyển đổi ngầm định

Dùng phương thức toInt()

Không thể thực hiện được trong Java


Câu 114. Quy ước đặt tên phổ biến cho hằng số (final) trong Java là gì?

camelCase, ví dụ maxValue

PascalCase, ví dụ MaxValue

UPPER_SNAKE_CASE, ví dụ MAX_VALUE

kebab-case, ví dụ max-value


Câu 115. Đoạn code sau xảy ra điều gì?

final int MAX = 100;
MAX = 200;

Chạy bình thường, MAX = 200

Lỗi biên dịch vì không thể gán lại biến final

Lỗi runtime (Exception)

MAX vẫn là 100, dòng gán bị bỏ qua


Câu 116. Đoạn code sau có hợp lệ không?

final List<String> names = new ArrayList<>();
names.add("An");

Không - final không cho phép thay đổi bất kỳ điều gì liên quan đến names

Không - add() bị chặn với danh sách final

Không, vì List không thể là final

Có - final chỉ ngăn gán lại tham chiếu names, không ngăn sửa nội dung đối tượng


Câu 117. Ép kiểu (long) someInt có cần ép kiểu tường minh không?

Không bắt buộc - int sang long là widening, tự động chuyển đổi được

Có, bắt buộc phải ép kiểu tường minh

Không thể chuyển đổi int sang long

Chỉ cần ép kiểu nếu giá trị âm


Câu 118. Đoạn code sau in ra gì?

int a = 7;
int b = 2;
double result = (double) a / b;
System.out.println(result);

3

3.0

3.5

Lỗi biên dịch


Câu 119. Từ khóa static final khi dùng cùng nhau cho một trường (field) trong lớp có nghĩa là gì?

Trường đó chỉ tồn tại trong phương thức main

Trường đó là hằng số dùng chung cho cả lớp, không thuộc riêng đối tượng nào

Trường đó chỉ có thể đọc trong constructor

Trường đó tự động là private


Câu 120. Đoạn code sau in ra gì?

char c = 'A';
int code = (int) c;
System.out.println(code);

65

A

Lỗi biên dịch, không thể ép char sang int

0


Câu 121. Trong switch truyền thống của Java, từ khóa nào dùng để thoát khỏi switch sau khi một case khớp, tránh “rơi” xuống case bên dưới?

continue

break

return

exit


Câu 122. Đoạn code sau in ra gì?

int day = 2;
switch (day) {
case 1:
System.out.println("Một");
case 2:
System.out.println("Hai");
case 3:
System.out.println("Ba");
break;
default:
System.out.println("Khác");
}

Hai

Một Hai Ba

Hai Ba

Khác


Câu 123. Kiểu dữ liệu nào không thể dùng làm biểu thức điều kiện của switch trong Java?

double

int

String

char


Câu 124. Khối nào trong switch được thực thi nếu không có case nào khớp giá trị?

case cuối cùng

case đầu tiên

Không khối nào, chương trình dừng lại

default


Câu 125. Đoạn code sau (Java 14+) in ra gì?

int day = 6;
String type = switch (day) {
case 6, 7 -> "Cuối tuần";
default -> "Ngày thường";
};
System.out.println(type);

Lỗi biên dịch

Cuối tuần

Ngày thường

6


Câu 126. Điểm khác biệt quan trọng giữa switch expression (->, Java 14+) và switch statement truyền thống là gì?

Switch expression không hỗ trợ default

Switch expression chỉ dùng được với int

Switch expression không fall-through - mỗi nhánh tự dừng, không cần break

Switch expression không thể trả về giá trị


Câu 127. Trong một khối case nhiều dòng của switch expression, từ khóa nào dùng để trả về giá trị?

yield

return

break

output


Câu 128. Đoạn code sau in ra gì?

String fruit = "cam";
switch (fruit) {
case "tao":
System.out.println("Táo");
break;
case "cam":
System.out.println("Cam");
break;
default:
System.out.println("Khác");
}

Táo

Lỗi biên dịch vì switch không hỗ trợ String

Cam

Khác


Câu 129. Nếu quên break ở tất cả các case (trừ case cuối) trong switch truyền thống, và giá trị khớp với case đầu tiên, điều gì xảy ra?

Chỉ case đầu tiên được thực thi

Tất cả các case từ case khớp trở xuống đều được thực thi

Chương trình báo lỗi biên dịch

Chỉ default được thực thi


Câu 130. Cách nào sau đây không phải là cú pháp hợp lệ của switch trong Java hiện đại?

switch truyền thống với break

switch expression với ->yield

switch trên biến kiểu enum

switch trên biến kiểu double


Câu 131. Đoạn code sau xảy ra điều gì?

public static void main(String[] args) {
if (true) {
int y = 20;
}
System.out.println(y);
}

In ra 20

Lỗi biên dịch vì y không tồn tại ngoài khối if

In ra 0

In ra null


Câu 132. Biến khai báo trong phần khởi tạo của vòng lặp for (ví dụ for (int i = 0; ...)) có phạm vi tồn tại ở đâu?

Toàn bộ phương thức chứa vòng lặp

Toàn bộ class

Chỉ bên trong vòng lặp for đó

Toàn bộ chương trình


Câu 133. Tham số của một phương thức có phạm vi tồn tại ở đâu?

Chỉ bên trong thân phương thức đó

Toàn bộ class

Toàn bộ chương trình

Tất cả các phương thức khác trong cùng class


Câu 134. Java có hỗ trợ biến toàn cục (global variable) theo kiểu như một số ngôn ngữ khác (biến ở phạm vi file, ngoài mọi class) không?

Có, khai báo bằng từ khóa global

Có, mọi biến khai báo ngoài main đều là toàn cục

Có, nhưng chỉ với kiểu int

Không, mọi biến phải thuộc về một class (làm field) hoặc một phạm vi khối/phương thức cụ thể


Câu 135. “Variable shadowing” (che khuất biến) xảy ra khi nào?

Khi một biến không được khởi tạo giá trị

Khi một biến cục bộ (hoặc tham số) trùng tên với một field của class, khiến biến cục bộ “che” field đó trong phạm vi của nó

Khi một biến bị xóa khỏi bộ nhớ

Khi hai class có tên trùng nhau


Câu 136. Đoạn code sau in ra gì?

public class Counter {
int count = 5; // field
void show() {
int count = 10; // biến cục bộ, che field
System.out.println(count);
}
}

Gọi new Counter().show();

5

Lỗi biên dịch vì trùng tên

10

0


Câu 137. Một field (thuộc tính) của class có phạm vi tồn tại như thế nào so với biến cục bộ trong một phương thức?

Field tồn tại suốt vòng đời của đối tượng (hoặc của class nếu là static), rộng hơn biến cục bộ chỉ tồn tại trong khối/phương thức khai báo nó

Field và biến cục bộ luôn có phạm vi giống hệt nhau

Field có phạm vi hẹp hơn biến cục bộ

Field chỉ tồn tại trong constructor


Câu 138. Đoạn code sau có biên dịch được không?

public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
System.out.println(i);
}
for (int i = 0; i < 5; i++) { // khai báo lại i
System.out.println(i);
}
}

Không, vì i bị khai báo trùng tên

Có, vì hai biến i nằm trong hai phạm vi for độc lập, không xung đột

Có, nhưng chỉ chạy được vòng lặp đầu tiên

Không, vì Java không cho phép hai vòng lặp for liên tiếp


Câu 139. Điều gì xảy ra khi biên dịch đoạn code sau?

public static void main(String[] args) {
int x = 5;
int x = 10; // khai báo lại cùng tên, cùng phạm vi
}

Biên dịch thành công, x = 10

Biên dịch thành công, x = 5

Lỗi runtime

Lỗi biên dịch: biến x đã được khai báo trong cùng phạm vi


Câu 140. Muốn truy cập field của class bị che (shadow) bởi một biến cục bộ/tham số cùng tên, ta dùng cách nào?

Đổi tên biến cục bộ là cách duy nhất, không có cú pháp nào khác

Dùng từ khóa super.tenField

Dùng this.tenField

Dùng self.tenField


Câu 141. Cách khai báo mảng hai chiều đúng trong Java là gì?

int[][] grid = new int[3][4];

int grid[3][4];

array<array<int>> grid(3, 4);

int[3][4] grid;


Câu 142. Java thực chất mô phỏng mảng hai chiều như thế nào?

Một vùng nhớ liên tục hai chiều đặc biệt do JVM quản lý riêng

Một mảng của mảng - mỗi phần tử của mảng ngoài lại là một mảng một chiều

Một HashMap với khóa là cặp tọa độ

Một String được mã hóa đặc biệt


Câu 143. Đoạn code sau in ra gì?

int[][] matrix = {
{1, 2, 3},
{4, 5, 6}
};
System.out.println(matrix[1][2]);

2

3

5

6


Câu 144. “Mảng lởm chởm” (jagged array) trong Java là gì?

Mảng chứa toàn giá trị null

Mảng không thể duyệt bằng vòng lặp for

Mảng hai chiều mà các hàng có độ dài khác nhau

Mảng chỉ chứa số âm


Câu 145. Với int[][] matrix = new int[3][5];, biểu thức matrix.length trả về giá trị nào?

5

3

15

8


Câu 146. Phương thức nào dùng để in đẹp nội dung một mảng hai chiều (thay vì in ra địa chỉ tham chiếu)?

Arrays.deepToString(matrix)

matrix.toString()

Arrays.toString(matrix)

matrix.print()


Câu 147. Đoạn code sau tính tổng các phần tử của mảng hai chiều bằng vòng lặp lồng nhau - biểu thức nào cần điền vào chỗ trống để duyệt đúng số cột của từng hàng?

int[][] matrix = {{1, 2}, {3, 4, 5}};
int sum = 0;
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < ____; j++) {
sum += matrix[i][j];
}
}

matrix.length

matrix[j].length

matrix[i].length

sum.length


Câu 148. Giá trị mặc định của các phần tử khi tạo int[][] grid = new int[2][3]; là gì?

null

Giá trị rác ngẫu nhiên

1

0


Câu 149. Cách nào sau đây tạo đúng một mảng lởm chởm (jagged array) 3 hàng với số cột khác nhau?

int[][] a = new int[3][3];

int[][] a = new int[3][]; a[0] = new int[2]; a[1] = new int[4]; a[2] = new int[1];

int[3][] a = new int[];

int[][3] a = new int[3];


Câu 150. Với int[][] m = {{1,2,3},{4,5}};, đoạn code m[1][2] khi chạy sẽ như thế nào?

Ném ArrayIndexOutOfBoundsException vì hàng 1 chỉ có 2 phần tử (chỉ số 0-1)

Trả về 0

Trả về null

Lỗi biên dịch


Nhóm 16: Lớp và đối tượng (Class & Object) cơ bản

Phần tiêu đề “Nhóm 16: Lớp và đối tượng (Class & Object) cơ bản”

Câu 151. Trong lập trình hướng đối tượng Java, một class được mô tả tốt nhất là gì?

Một biến lưu trữ dữ liệu

Một phương thức đặc biệt

Một khuôn mẫu (blueprint) mô tả thuộc tính và hành vi chung cho một nhóm đối tượng

Một file .java bất kỳ


Câu 152. Từ khóa nào dùng để tạo một đối tượng (object) mới từ một class trong Java?

create

class

object

new


Câu 153. Đoạn code sau in ra gì?

public class Dog {
String name;
void bark() {
System.out.println(name + " sủa: Gâu gâu!");
}
}
public class Main {
public static void main(String[] args) {
Dog dog1 = new Dog();
dog1.name = "Lucky";
Dog dog2 = new Dog();
dog2.name = "Milu";
dog1.bark();
}
}

Milu sủa: Gâu gâu!

Lucky sủa: Gâu gâu!

null sủa: Gâu gâu!

Lỗi biên dịch


Câu 154. Constructor trong Java có đặc điểm gì?

Cùng tên với class, không khai báo kiểu trả về (kể cả void)

Luôn phải trả về kiểu void

Có thể đặt tên tùy ý, miễn khác tên các phương thức khác

Chỉ được phép có một constructor cho mỗi class


Câu 155. Nếu một class không định nghĩa constructor nào, điều gì xảy ra khi tạo đối tượng bằng new?

Lỗi biên dịch vì thiếu constructor

Không thể tạo đối tượng từ class đó

Java tự động cung cấp một constructor mặc định không tham số

Phải dùng từ khóa default để tạo đối tượng


Câu 156. Từ khóa this trong một constructor hoặc method dùng để làm gì?

Tham chiếu đến class cha

Tham chiếu đến đối tượng hiện tại

Tạo một đối tượng mới

Khai báo một hằng số


Câu 157. Tại sao nên khai báo field là private thay vì public?

private giúp chương trình chạy nhanh hơn

public không hợp lệ về mặt cú pháp cho field

Vì Java bắt buộc mọi field phải là private

Để ẩn dữ liệu, chỉ cho phép truy cập/thay đổi qua các phương thức công khai có kiểm tra tính hợp lệ (encapsulation)


Câu 158. Phương thức nào sau đây đóng vai trò “getter” theo quy ước đặt tên phổ biến trong Java cho field private double balance;?

public double getBalance() { return balance; }

public void balance() { return balance; }

public double balance;

public double setBalance() { return balance; }


Câu 159. Nếu hai constructor của cùng một class có cùng số lượng tham số nhưng khác kiểu dữ liệu, đây có phải là constructor overloading hợp lệ không?

Không, vì hai constructor phải có số tham số khác nhau

Không, class chỉ được phép có một constructor duy nhất

Có, overload hợp lệ nếu danh sách tham số khác nhau (kể cả chỉ khác kiểu dữ liệu)

Có, nhưng chỉ khi kiểu trả về khác nhau


Câu 160. Đoạn code sau in ra gì?

public class Account {
private double balance;
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
}
}
public double getBalance() {
return balance;
}
}
public class Main {
public static void main(String[] args) {
Account acc = new Account();
acc.deposit(100);
acc.deposit(-50);
System.out.println(acc.getBalance());
}
}

50.0

100.0

-50.0

Lỗi biên dịch vì balanceprivate


Câu 161. Để sử dụng ArrayList, ta cần import gói nào?

java.io.ArrayList

java.util.ArrayList

java.lang.ArrayList

java.collections.ArrayList


Câu 162. Cách khai báo ArrayList nào sau đây đúng và đúng quy ước (khai báo bằng interface List)?

List<String> names = new ArrayList<>();
ArrayList<String> names = new List<>();
List names = new ArrayList<String>[];
List<String> names = ArrayList<>();

Câu 163. Đoạn code sau in ra gì?

List<String> fruits = new ArrayList<>();
fruits.add("táo");
fruits.add("cam");
fruits.add("xoài");
System.out.println(fruits.get(1));

táo

xoài

cam

Lỗi biên dịch


Câu 164. Để lấy số phần tử hiện có trong một ArrayList tên list, ta dùng:

list.length

list.size()

list.length()

list.count()


Câu 165. Đoạn code sau có vấn đề gì?

List<int> numbers = new ArrayList<>();
numbers.add(10);

Không có vấn đề gì, chạy bình thường

Lỗi runtime khi gọi add(10)

In ra 10 nhưng gây rò rỉ bộ nhớ

Lỗi biên dịch vì generic không chấp nhận kiểu nguyên thủy int, phải dùng Integer


Câu 166. Phương thức nào sau đây kiểm tra một ArrayList có chứa một giá trị cụ thể hay không?

contains(value)

has(value)

includes(value)

exists(value)


Câu 167. Khác biệt chính giữa mảng (array) và ArrayList là gì?

Mảng chạy nhanh hơn ArrayList trong mọi trường hợp nên luôn được ưu tiên

ArrayList chỉ dùng được với kiểu String

Mảng có kích thước cố định khi tạo, ArrayList có thể thay đổi kích thước linh hoạt

Mảng không thể chứa số nguyên


Câu 168. Cách nào sau đây để duyệt qua tất cả phần tử của một ArrayList<String> names?

for (int i = 0; i <= names.size(); i++) {
System.out.println(names.get(i));
}
for (String name : names) {
System.out.println(name);
}
for (String name in names) {
System.out.println(name);
}
foreach (name : names) {
System.out.println(name);
}

Câu 169. Đoạn code sau in ra gì?

Map<String, Integer> scores = new HashMap<>();
scores.put("An", 8);
scores.put("Binh", 9);
System.out.println(scores.get("An"));

An

9

null

8


Câu 170. HashMap.get() trả về gì nếu key không tồn tại trong map?

null

Ném NoSuchElementException

0

Lỗi biên dịch


Câu 171. Đệ quy (recursion) trong lập trình là gì?

Một vòng lặp for đặc biệt

Một phương thức chạy trên nhiều luồng cùng lúc

Một phương thức tự gọi lại chính nó để giải quyết bài toán

Một cách khai báo biến static


Câu 172. Thành phần nào bắt buộc phải có trong một phương thức đệ quy để nó dừng lại?

Vòng lặp while

Trường hợp cơ sở (base case)

Từ khóa static

Một tham số kiểu String


Câu 173. Cho phương thức:

static int factorial(int n) {
if (n <= 1) return 1;
return n * factorial(n - 1);
}

factorial(4) trả về giá trị nào?

24

10

4

16


Câu 174. Cho phương thức:

static int fib(int n) {
if (n <= 1) return n;
return fib(n - 1) + fib(n - 2);
}

fib(5) trả về giá trị nào?

3

8

5

4


Câu 175. Điều gì xảy ra nếu một phương thức đệ quy thiếu base case (hoặc base case không bao giờ đạt được)?

Chương trình chạy nhanh hơn bình thường

Trình biên dịch báo lỗi ngay khi biên dịch

Phương thức trả về null

Chương trình gọi đệ quy vô hạn và ném StackOverflowError khi hết bộ nhớ stack


Câu 176. Trong lời gọi đệ quy return n * factorial(n - 1);, tham số truyền cho lời gọi tiếp theo có đặc điểm gì để đảm bảo đệ quy kết thúc?

Không thay đổi qua mỗi lần gọi

Tiến dần về phía base case (ở đây là giảm dần)

Luôn là số âm

Phải là kiểu String


Câu 177. So với cách viết vòng lặp (iterative), cách viết đệ quy (recursive) cho cùng một bài toán thường:

Code ngắn gọn, dễ diễn đạt hơn với bài toán có cấu trúc “chia để trị”, nhưng tốn thêm bộ nhớ cho call stack

Luôn nhanh hơn và tốn ít bộ nhớ hơn vòng lặp

Không thể dùng để giải bài toán tính tổng hay giai thừa

Không bao giờ gây lỗi runtime


Câu 178. Cho phương thức:

static int sum(int n) {
if (n == 0) return 0;
return n + sum(n - 1);
}

sum(3) trả về giá trị nào?

3

0

6

9


Câu 179. Trong lời gọi factorial(3) với định nghĩa ở câu 173, thứ tự nào mô tả đúng quá trình thực thi?

Chỉ có factorial(3) được gọi, không có lời gọi nào khác

factorial(3) chạy song song với factorial(2) và factorial(1) trên các luồng khác nhau

factorial(1) được tính trước tiên, sau đó mới gọi factorial(2) và factorial(3)

factorial(3) gọi factorial(2), factorial(2) gọi factorial(1); factorial(1) trả về trước, rồi các lời gọi “quay lui” nhân kết quả lại theo thứ tự ngược


Câu 180. Đoạn code nào sau đây là một phương thức đệ quy đúng để tính tổng các số từ 1 đến n?

static int sum(int n) {
return n + sum(n);
}
static int sum(int n) {
if (n <= 0) return 0;
return n + sum(n - 1);
}
static int sum(int n) {
for (int i = 1; i <= n; i++) return i;
return 0;
}
static int sum(int n) {
if (n <= 0) return 0;
return n + sum(n);
}

Nhóm 19: Xử lý ngoại lệ (Exception) cơ bản

Phần tiêu đề “Nhóm 19: Xử lý ngoại lệ (Exception) cơ bản”

Câu 181. Cấu trúc nào dùng để bắt và xử lý ngoại lệ (exception) trong Java?

try / catch

if / else

switch / case

for / while


Câu 182. Đoạn code sau in ra gì?

try {
System.out.println("A");
int x = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("B");
} finally {
System.out.println("C");
}

A

A C

A B

A B C


Câu 183. Đoạn code int x = 10 / 0; (với x là số nguyên int) sẽ:

In ra Infinity

Ném ArithmeticException lúc chạy chương trình

Gán x = 0

Lỗi biên dịch ngay lập tức


Câu 184. Exception nào bị ném khi gọi một phương thức trên một tham chiếu đang là null?

ArithmeticException

ArrayIndexOutOfBoundsException

NullPointerException

ClassCastException


Câu 185. Đoạn code sau ném exception gì?

int[] arr = {1, 2, 3};
System.out.println(arr[3]);

ArrayIndexOutOfBoundsException

NullPointerException

Không lỗi, in ra 0

Lỗi biên dịch


Câu 186. Cú pháp nào cho phép bắt nhiều loại exception khác nhau trong cùng một khối catch?

catch (IOException, SQLException e)
catch (IOException e) or (SQLException e)
catch (IOException | SQLException e)
catch [IOException, SQLException] e

Câu 187. Từ khóa nào dùng để chủ động ném một ngoại lệ trong Java?

throws

throw

raise

catch


Câu 188. Exception nào sau đây là checked exception, bắt buộc phải khai báo throws hoặc bắt bằng try/catch?

NullPointerException

ArrayIndexOutOfBoundsException

ArithmeticException

IOException


Câu 189. Trong đoạn code sau, phương thức trả về giá trị nào?

static int test() {
try {
return 1;
} finally {
System.out.println("finally chạy");
}
}

1 (và in ra “finally chạy” trước khi trả về)

Không trả về gì vì finally chặn return

Lỗi biên dịch vì có finally sau return

0


Câu 190. Khối finally trong try/catch/finally có đặc điểm gì?

Chỉ chạy khi có exception xảy ra

Chỉ chạy khi không có exception xảy ra

Luôn chạy dù try có ném exception hay không, kể cả khi try/catch có return

Là khối bắt buộc phải có exception mới được viết


Câu 191. Đoạn code sau in ra gì?

String a = new String("hi");
String b = new String("hi");
System.out.println(a == b);

true

false

Lỗi biên dịch

Lỗi runtime


Câu 192. Đoạn code sau in ra gì?

int a = 5;
int b = 2;
System.out.println(a / b);

2

2.5

3

Lỗi biên dịch


Câu 193. Đoạn code sau in ra gì?

System.out.println(0.1 + 0.2 == 0.3);

true

Lỗi biên dịch

false

Lỗi runtime


Câu 194. Đoạn code sau xảy ra điều gì?

String s = null;
System.out.println(s.length());

In ra 0

In ra null

Lỗi biên dịch

Ném NullPointerException lúc chạy chương trình


Câu 195. Đoạn code sau xảy ra điều gì?

int[] scores = new int[5];
System.out.println(scores[5]);

In ra 0

Ném ArrayIndexOutOfBoundsException

In ra giá trị rác

Lỗi biên dịch


Câu 196. Đoạn code sau in ra gì?

int day = 2;
switch (day) {
case 1:
System.out.println("Một");
case 2:
System.out.println("Hai");
case 3:
System.out.println("Ba");
break;
default:
System.out.println("Khác");
}

Hai Ba

Hai

Một Hai Ba

Khác


Câu 197. Phát biểu nào đúng khi phân biệt overloading và overriding?

Cả hai đều chỉ xảy ra giữa lớp cha và lớp con

Overloading được quyết định lúc chạy chương trình (runtime), overriding được quyết định lúc biên dịch

Overloading là nhiều phương thức cùng tên khác tham số trong cùng một lớp; overriding là định nghĩa lại phương thức đã kế thừa với cùng chữ ký ở lớp con

Overriding không cần quan hệ kế thừa giữa các lớp


Câu 198. Đoạn code sau có vấn đề gì?

final int MAX = 100;
MAX = 200;

Không có vấn đề gì, MAX sẽ là 200

Ném lỗi runtime IllegalStateException

In ra cảnh báo nhưng vẫn chạy

Lỗi biên dịch vì không thể gán lại giá trị cho biến final


Câu 199. Đoạn code sau xảy ra điều gì?

Object obj = "hello";
Integer number = (Integer) obj;

number sẽ là 0

Ném ClassCastException lúc chạy chương trình

Lỗi biên dịch

number sẽ là null


Câu 200. Phát biểu nào sau đây về Java là đúng?

Java là ngôn ngữ định kiểu tĩnh (static typing) - kiểu dữ liệu của biến được kiểm tra ngay khi biên dịch

Java không hỗ trợ hướng đối tượng

Mọi exception trong Java đều là checked exception

Mảng trong Java có thể tự động thay đổi kích thước như ArrayList