200+ câu trắc nghiệm Java cơ bản có đáp án - Phần 3
Đề thi

200+ câu trắc nghiệm Java cơ bản có đáp án - Phần 3

A
Admin
Đại họcTrắc nghiệm tổng hợp26 lượt thi
31 câu hỏi
1. Trắc nghiệm
1 điểm

Cho hai lớp Student và Main như sau:

package java.school;

public class Student {}

--

package java.test;

public class Main {

public static void main(String[] args) { java.school.Student s = new Student();

}

}

Khi biên dịch lớp Main có lỗi biên dịch không? Nếu có là lỗi nào sau:

Chọn một Câu trả lời

Có lỗi biên dịch:

can not find symbol test.Student

Không có lỗi biên dịch.

Có lỗi biên dịch:

Add import java.school.Student

Có lỗi biên dịch:

can not find constructor Student() for Student.

Xem đáp án

Chọn đáp án A

Vì:

Lớp Student không ở package java.test mà ở java.school, và bạn lại không import vào gói java.test, nên trình biên dịch tìm lớp Student ở cùng package java.test khi bạn không chỉ rõ lớp Student thuộc package nào. Nên khi khai báo biến s thuộc lớp java.school.Student thì đúng, nhưng khi gọi phương thức khởi tạo thì bạn lại không chỉ rõ, nên trình biên dịch sẽ tìm ở java.test. Nhưng không có.

Add import java.school.Student : là một gợi ý, chứ không phải lỗi biên dịch.

2. Trắc nghiệm
1 điểm

Đoạn mã sau có lỗi biên dịch gì? public class Person { private String name; protected int age; public static void main(String[] args) { Person p = new Person(); p.name="Tom"; System.out.println(p.name); } }

Chọn một Câu trả lời

Không có lỗi biên dịch.

name has private access.

age has protected access.

name has public access.

Xem đáp án

Chọn đáp án A

Vì:

hàm main ở trong cùng lớp Person, nên có thể truy xuất tới tất cả các trường của Person.

3. Trắc nghiệm
1 điểm

Cho lớp Student như sau:

public class Student {

private String mark;

public String getMark() {

return mark;

}

public void setMark(String mark) {

this.mark = mark;

}

}

và s là đối tường s của Student.

Đoạn mã nào sau cho phép thay đổi điểm của s thành "10"?

Chọn một Câu trả lời

s.setMark("10");

s.setMark(10);

s.mark=10;

s.mark="10"

Xem đáp án

Chọn đáp án A

Vì:

Phương thức này nhận xâu "10" và thay đổi thuộc tính mark của s.

Đáp án s.setMark(10); sai vì truyền số 10 thuộc int vào phương thức setMark, mà setMark yêu cầu đầu vào là String.

Đáp án s.mark=10 và s.mark="10"

là sai vì mark có mức truy xuất là private.

4. Trắc nghiệm
1 điểm

G/s ta cần xây dựng hàm printArray để in ra dãy số nguyên gồm N phần tử. Đâu là cách mô tả đúng về hàm printArray?

Chọn một Câu trả lời

void printArray(int a[], int size){}

void printArray(int a[size], int size){}

void printArray(int a[], int){}

void printArray(int a[size]){}

Xem đáp án

Chọn đáp án A

Vì:

khi truyền tham số mảng cho hàm không cần xác định kích thước mảng.

5. Trắc nghiệm
1 điểm

Đoạn chương trình sau sẽ in ra thông tin gì trên màn hình?

11: String a = "ABCD";

12: String b = a.toLowerCase();

13: b.replace(‘a’, ‘d’);

14: b.replace(‘b’, ‘c’);

15: System.out.println(b);

Chọn một Câu trả lời

abcd

ABCD

dccd

dcba

Xem đáp án

Chọn đáp án A

Vì:

+ Lệnh 11 sẽ tạo xâu a ="ABCD"

+ Lệnh 12 tạo ra xâu b ="abcd"

+ Lệnh 13 sẽ sinh ra xâu mới và thay thế ký tự a bởi d (xâu b không thay đổi)

+ Lệnh 14 sẽ sinh ra xâu mới và thay thế ký tự b bởi c (xâu b không thay đổi)

=> In ra abcd.

6. Trắc nghiệm
1 điểm

Chương trình sau in ra màn hình xâu nào?

01: public class Main{

02: public static void main(String[] args) {

03: String names[] = {"John","Anna","Peter","Victor","David"};

04: System.out.println(names[2]);

05: }

06:}

Chọn một Câu trả lời

Có lỗi biên dịch: use new keyword to create object

Peter

Anna

Victor

Xem đáp án

Chọn đáp án B

Vì:

+ Lệnh System.out.println(names[2]);sẽ in ra phần tử đứng thứ 3 trong mảng names (chỉ số mảng từ 0 => in ra Peter)

7. Trắc nghiệm
1 điểm

Đoạn mã sau có lỗi biên dịch nào sau?

class Student {

protected String name;

}

public class Man extends Student{

public static void main(String[] args) {

Man m = new Man();

m.name="John";

}

}

Chọn một Câu trả lời

name has protected access in Student.

Không có lỗi biên dịch.

class Man has no attribute name.

class Man has no attribute or method name.

Xem đáp án

Chọn đáp án B

Vì:

thuộc tính name ở Student là protected, nên không lớp con Man được thừa kế.

8. Trắc nghiệm
1 điểm

Đoạn mã sau có lỗi biên dịch KHÔNG? Nêu KHÔNG thì in ra màn hình kết quả nào sau:

class Student {

String sayHello(){

return "Student";

}

}

public class Man extends Student{

protected String sayHello() {

return "man";

}

public static void main(String[] args) {

Student s = new Man();

System.out.println(s.sayHello());

}

}

Chọn một Câu trả lời

Có lỗi biên dịch.

Student

Man

Student Man

Xem đáp án

Chọn đáp án A

Vì:

phương thức sayHello() có mức truy xuất ở lớp Student là default, nhưng ở lớp con(Man) lại có mức truy xuất yếu hơn(Không cho phép điều này).

9. Trắc nghiệm
1 điểm

Đoạn mã sau có lỗi biên dịch KHÔNG? Nếu có là lỗi nào sau?

class Student {}

public class Man extends Student{

public boolean isMan(){

return true;

}

}

Chọn một Câu trả lời

Không có lỗi biên dịch.

Có lỗi biên dịch:class Student is empty.

Có lỗi biên dịch:class Man has no constructor.

Có lỗi biên dịch:class Student is empty, class Man has no constructor.

Xem đáp án

Chọn đáp án A

Vì:

Chúng ta có thể khai báo các lớp không có thuộc tính và phương thức trống(empty).

Khi một lớp không có constructor, trình biên dịch sẽ tự động thêm vào một constructor mặc định.Vậy đoạn mã đã cho không có lỗi biên dịch nào.

10. Trắc nghiệm
1 điểm

1.0: package pac01;

1.1: public class ClassA {

1.2: private int xA;

1.3: public String yA;

1.4: }

---------

2.0: package pac01;

2.1: public class Test {

2.2: public static void main(String[] args) {

2.3: ClassA a = new ClassA();

2.4: a.xA = 12;

2.5: a.yA = "Hello";

2.6: System.out.println("a.xA = " + a.xA + "; a.yA = " + a.yA);

2.7: }

2.8: }

Chương trình sẽ in ra kết quả gì khi thực thi?

Chọn một Câu trả lời

Lỗi biên dịch dòng 2.4

Lỗi biên dịch dòng 2.5

Lỗi biên dịch dòng 2.4, 2.6

xA = 12; a.yA = Hello

Xem đáp án

Chọn đáp án C

Vì:

Lớp ClassA và Test thuộc trong cùng một gói nên đối tượng a từ lớp Test được truy xuất vào thành viên là public nhưng không được truy xuất và thành viên là private. Nên chương trình sinh lỗi.

11. Trắc nghiệm
1 điểm

Câu 1: Trong khi tạo một gói, mã nguồn phải được đặt trong cùng một thư mục với tên của gói.

Câu 2: Scanner là lớp thuộc gói java.util

Chọn một Câu trả lời

Cả hai Câu đều đúng

Cả hai Câu đều sai

(1) đúng, (2) sai

(2) đúng, (1) sai

Xem đáp án

Chọn đáp án A

Vì:

+ Mã nguồn và tên gói phải đặt trong cùng một thư mục

+ Sanner thuộc gói java.util.

12. Trắc nghiệm
1 điểm

Đoạn mã sau có lỗi biên dịch gì?

class Person {

protected String name;

public int age;

};

public class Main {

public static void main(String[] args) {

Person p = new Person();

p.name="Tom";

}

}

Chọn một Câu trả lời

Không có lỗi biên dịch.

name has protected access.

age has protected access.

name has public access.

Xem đáp án

Chọn đáp án B

Vì:

+ name là thành phần protected do đó không thể truy xuất từ bên ngoài lớp (chỉ có thể truy xuất từ bên trong lớp và các lớp con).

13. Trắc nghiệm
1 điểm

1. public class Delta {

2. static boolean foo(char c) {

3. System.out.print(c);

4. return true;

5. }

6. public static void main( String[] argv ) {

7. int i =0;

8. for ( foo(‘A’);

foo(‘B’)&&(i<2); foo(‘C’)){

9. i++ ;

10. foo(‘D’); 12. }

13. }

14. }

Kết quả in ra của đoạn mã trên là gì?

Chọn một Câu trả lời

ABDCBDCB

ABCDABCD

Lỗi biên dịch

Chương trình không lỗi, nhưng khi chạy sẽ sinh lỗi

Xem đáp án

Chọn đáp án A

Vì:

+ Bắt đầu vòng lặp sẽ gọi foo(‘A’) => In ra chữ A

+ Thực hiện lệnh foo(‘B’) && i<2 => in ra B

+ Thực hiện foo(‘D’) => in ra D

+ Thực hiện foo(‘C’) => in ra C

Tiếp theo tăng i lên 1 và thực hiện lần lượt các lệnh foo(‘B’), foo(‘D’), foo(‘C’) => in ra BDC

Và cuối cùng tăng i=2 rồi thực hiện lệnh foo(‘B’)&i<2 => in ra B và kết thúc vòng lặp

ð In ra là: ABDCBDCB

14. Trắc nghiệm
1 điểm

G/s ta cần xây dựng hàm printArray để in ra dãy số nguyên gồm N phần tử. Đâu là cách mô tả đúng về hàm printArray?

Chọn một Câu trả lời

void printArray(int a[], int size){}

void printArray(int a[size], int size){}

void printArray(int a[], int){}

void printArray(int a[size]){}

Xem đáp án

Chọn đáp án A

Vì:

khi truyền tham số mảng cho hàm không cần xác định kích thước mảng.

15. Trắc nghiệm
1 điểm

Phát biểu nào sau đây là đúng:

Chọn một Câu trả lời

Mảng có thể lưu giữ các phần tử thuộc nhiều kiểu dữ liệu khác nhau

Chỉ số của mảng có thể sử dụng kiểu số thực (float, double)

Biểu thức array.length được sử dụng để trả về số phần tử trong mảng

Một phần tử của mảng không thể truyền vào trong một phương thức.

Xem đáp án

Chọn đáp án C

Vì:

biểu thức array.length trả về số phần tử trong mảng.

16. Trắc nghiệm
1 điểm

Đoạn mã sau có lỗi biên dịch nào sau?

class Student {

protected String name;

}

public class Man extends Student{

public static void main(String[] args) {

Man m = new Man();

m.name="John";

}

}

Chọn một Câu trả lời

name has protected access in Student.

Không có lỗi biên dịch.

class Man has no attribute name.

class Man has no attribute or method name.

Xem đáp án

Chọn đáp án B

Vì:

thuộc tính name ở Student là protected, nên không lớp con Man được thừa kế.

17. Trắc nghiệm
1 điểm

Đoạn mã sau có lỗi biên dịch nào?

class Student {

public String sayHello(){

return "Student";

}

}

public class Man extends Student{

public int sayHello() {

return 0;

}

}

Chọn một Câu trả lời

Có lỗi biên dịch:sayHello() in Man cannot override sayHello() in Student return type int is not compatible with java.lang.String

Không có lỗi biên dịch.

Có lỗi biên dịch:sayHello() in Man cannot override sayHello() in Student because it is final

Có lỗi biên dịch:sayHello() in Man and in Student has the same access modifier

Xem đáp án

Chọn đáp án A

Vì:

Lớp Man định viết đè sayHello() được viết ở Student, nhưng có kiểu dữ liệu trả về là int không thể chuyển thành String được.

Và sayHello() không được đánh dấu là final, nên có thể được ghi đè.

sayHello() ở cả hai lớp đều có cùng access modifier, điều này là hợp lệ.

18. Trắc nghiệm
1 điểm

Hãy cho biết kết quả khi chạy đoạn chương trình sau?

class Student {

public int getAge(){

return 10;

}

}

public class Man extends Student{

public int getAge(int added) {

return super.getAge()+added;

}

public static void main(String[] args) {

Man s = new Man();

System.out.println(s.getAge());

System.out.println(s.getAge(1));

}

}

Chọn một Câu trả lời

10

11

10

10

11

11

Không in kết quả và báo lỗi

Xem đáp án

Chọn đáp án A

Vì:

+ Lệnh đầu tiên trong hàm main() sẽ sinh ra đối tượng s từ lớp Man.

+ Lệnh thứ 2 của hàm main sẽ gọi phương thức getAge() của đối tượng s, tuy nhiên s kế thừa từ lớp Student do đó sẽ triệu gọi phương thức getAge của lớp Student => in ra 10

+ Lệnh thứ 3 của hàm main() sẽ gọi phương thức getAge(1) của đối tượng s => gọi đến phương thức getAge(int added) của lớp Man => in ra 11

19. Trắc nghiệm
1 điểm

Đoạn mã sau có lỗi biên dịch không? Nêu không thì in ra màn hình kết quả nào sau:

class Student {

protected String sayHello(){

return "Student";

}

}

public class Man extends Student{

String sayHello() {

return "man";

}

}

Chọn một Câu trả lời

Có lỗi biên dịch.

Student

Man

Student Man

Xem đáp án

Chọn đáp án A

Vì:

Phương thức sayHello() có mức truy xuất ở lớp Student là protected, nhưng ở lớp con(Man) lại có mức truy xuất yếu hơn default(Không cho phép điều này).

20. Trắc nghiệm
1 điểm

1.0: package pac01;

1.1: public class ClassA {

1.2: private int xA;

1.3: public String yA;

1.4: }

---------

2.0: package pac01;

2.1: public class Test {

2.2: public static void main(String[] args) {

2.3: ClassA a = new ClassA();

2.4: a.xA = 12;

2.5: a.yA = "Hello";

2.6: System.out.println("a.xA = " + a.xA + "; a.yA = " + a.yA);

2.7: }

2.8: }

Chương trình sẽ in ra kết quả gì khi thực thi?

Chọn một Câu trả lời

Lỗi biên dịch dòng 2.4

Lỗi biên dịch dòng 2.5

Lỗi biên dịch dòng 2.4, 2.6

xA = 12; a.yA = Hello

Xem đáp án

Chọn đáp án C

Vì:

Lớp ClassA và Test thuộc trong cùng một gói nên đối tượng a từ lớp Test được truy xuất vào thành viên là public nhưng không được truy xuất và thành viên là private. Nên chương trình sinh lỗi.

21. Trắc nghiệm
1 điểm

(1) Trong khi tạo một gói, mã nguồn phải được đặt trong cùng một thư mục với tên của gói.

(2) Scanner là lớp thuộc gói java.util

Chọn một Câu trả lời

Cả hai Câu đều đúng

Cả hai Câu đều sai

(1) đúng, (2) sai

(2) đúng, (1) sai

Xem đáp án

Chọn đáp án A

Vì:

+ Mã nguồn và tên gói phải đặt trong cùng một thư mục

+ Sanner thuộc gói java.util.

22. Trắc nghiệm
1 điểm

Đoạn mã sau có lỗi biên dịch gì?

class Person {

protected String name;

public int age;

};

public class Main {

public static void main(String[] args) {

Person p = new Person();

p.name="Tom";

}

}

Chọn một Câu trả lời

Không có lỗi biên dịch.

name has protected access.

age has protected access.

name has public access.

Xem đáp án

Chọn đáp án B

Vì:

+ name là thành phần protected do đó không thể truy xuất từ bên ngoài lớp (chỉ có thể truy xuất từ bên trong lớp và các lớp con).

23. Trắc nghiệm
1 điểm

1. public class Delta {

2. static boolean foo(char c) {

3. System.out.print(c);

4. return true;

5. }

6. public static void main( String[] argv ) {

7. int i =0;

8. for ( foo(‘A’);

foo(‘B’)&&(i<2); foo(‘C’)){

9. i++ ;

10. foo(‘D’); 12. }

13. }

14. }

Kết quả in ra của đoạn mã trên là gì?

Chọn một Câu trả lời

ABDCBDCB

ABCDABCD

Lỗi biên dịch

Chương trình không lỗi, nhưng khi chạy sẽ sinh lỗi

Xem đáp án

Chọn đáp án A

Vì:

+ Bắt đầu vòng lặp sẽ gọi foo(‘A’) => In ra chữ A

+ Thực hiện lệnh foo(‘B’) && i<2 => in ra B

+ Thực hiện foo(‘D’) => in ra D

+ Thực hiện foo(‘C’) => in ra C

Tiếp theo tăng i lên 1 và thực hiện lần lượt các lệnh foo(‘B’), foo(‘D’), foo(‘C’) => in ra BDC

Và cuối cùng tăng i=2 rồi thực hiện lệnh foo(‘B’)&i<2 => in ra B và kết thúc vòng lặp

ð In ra là: ABDCBDCB

24. Trắc nghiệm
1 điểm

G/s ta cần xây dựng hàm printArray để in ra dãy số nguyên gồm N phần tử. Đâu là cách mô tả đúng về hàm printArray?

Chọn một Câu trả lời

void printArray(int a[], int size){}

void printArray(int a[size], int size){}

void printArray(int a[], int){}

void printArray(int a[size]){}

Xem đáp án

Chọn đáp án A

Vì:

khi truyền tham số mảng cho hàm không cần xác định kích thước mảng.

25. Trắc nghiệm
1 điểm

Phát biểu nào sau đây là đúng:

Chọn một Câu trả lời

Mảng có thể lưu giữ các phần tử thuộc nhiều kiểu dữ liệu khác nhau

Chỉ số của mảng có thể sử dụng kiểu số thực (float, double)

Biểu thức array.length được sử dụng để trả về số phần tử trong mảng

Một phần tử của mảng không thể truyền vào trong một phương thức.

Xem đáp án

Chọn đáp án C

Vì:

biểu thức array.length trả về số phần tử trong mảng.

26. Trắc nghiệm
1 điểm

Đoạn mã sau có lỗi biên dịch nào sau?

class Student {

protected String name;

}

public class Man extends Student{

public static void main(String[] args) {

Man m = new Man();

m.name="John";

}

}

Chọn một Câu trả lời

name has protected access in Student.

Không có lỗi biên dịch.

class Man has no attribute name.

class Man has no attribute or method name.

Xem đáp án

Chọn đáp án B

Vì:

thuộc tính name ở Student là protected, nên không lớp con Man được thừa kế.

27. Trắc nghiệm
1 điểm

Đoạn mã sau có lỗi biên dịch nào?

class Student {

public String sayHello(){

return "Student";

}

}

public class Man extends Student{

public int sayHello() {

return 0;

}

}

Chọn một Câu trả lời

Có lỗi biên dịch:sayHello() in Man cannot override sayHello() in Student return type int is not compatible with java.lang.String

Không có lỗi biên dịch.

Có lỗi biên dịch:sayHello() in Man cannot override sayHello() in Student because it is final

Có lỗi biên dịch:sayHello() in Man and in Student has the same access modifier

Xem đáp án

Chọn đáp án A

Vì:

Lớp Man định viết đè sayHello() được viết ở Student, nhưng có kiểu dữ liệu trả về là int không thể chuyển thành String được.

Và sayHello() không được đánh dấu là final, nên có thể được ghi đè.

sayHello() ở cả hai lớp đều có cùng access modifier, điều này là hợp lệ.

28. Trắc nghiệm
1 điểm

Hãy cho biết kết quả khi chạy đoạn chương trình sau?

class Student {

public int getAge(){

return 10;

}

}

public class Man extends Student{

public int getAge(int added) {

return super.getAge()+added;

}

public static void main(String[] args) {

Man s = new Man();

System.out.println(s.getAge());

System.out.println(s.getAge(1));

}

}

Chọn một Câu trả lời

10

11

10

10

11

11

Không in kết quả và báo lỗi

Xem đáp án

Chọn đáp án A

Vì:

+ Lệnh đầu tiên trong hàm main() sẽ sinh ra đối tượng s từ lớp Man.

+ Lệnh thứ 2 của hàm main sẽ gọi phương thức getAge() của đối tượng s, tuy nhiên s kế thừa từ lớp Student do đó sẽ triệu gọi phương thức getAge của lớp Student => in ra 10

+ Lệnh thứ 3 của hàm main() sẽ gọi phương thức getAge(1) của đối tượng s => gọi đến phương thức getAge(int added) của lớp Man => in ra 11

29. Trắc nghiệm
1 điểm

1.0: package pac01;

1.1: public class ClassA {

1.2: private int xA;

1.3: public String yA;

1.4: }

---------

2.0: package pac01;

2.1: public class Test {

2.2: public static void main(String[] args) {

2.3: ClassA a = new ClassA();

2.4: a.xA = 12;

2.5: a.yA = "Hello";

2.6: System.out.println("a.xA = " + a.xA + "; a.yA = " + a.yA);

2.7: }

2.8: }

Chương trình sẽ in ra kết quả gì khi thực thi?

Chọn một Câu trả lời

Lỗi biên dịch dòng 2.4

Lỗi biên dịch dòng 2.5

Lỗi biên dịch dòng 2.4, 2.6

xA = 12; a.yA = Hello

Xem đáp án

Chọn đáp án C

Vì:

Lớp ClassA và Test thuộc trong cùng một gói nên đối tượng a từ lớp Test được truy xuất vào thành viên là public nhưng không được truy xuất và thành viên là private. Nên chương trình sinh lỗi.

30. Trắc nghiệm
1 điểm

Đoạn mã sau có lỗi biên dịch gì?

public class Person { private String name; protected int age; public static void main(String[] args) { Person p = new Person(); p.name="Tom"; System.out.println(p.name); } }

Chọn một Câu trả lời

Không có lỗi biên dịch.

name has private access.

age has protected access.

name has public access.

Xem đáp án

Chọn đáp án A

Vì:

hàm main ở trong cùng lớp Person, nên có thể truy xuất tới tất cả các trường của Person.

31. Tự luận
1 điểm

Trong khi tạo một gói, mã nguồn phải được đặt trong cùng một thư mục với tên của gói.