200+ câu trắc nghiệm Java cơ bản có đáp án - Phần 6
30 câu hỏi
Đọc đoạn mã sau:
1.0: package pac02;
1.1: public class ClassA {
1.2: public int xA;
1.3: private String yA;
1.4:}
----------
2.0: package pac01;
2.1: import pac02.ClassA;
2.2: public class Test {
2.3: public static void main(String[] args) {
2.4: ClassA a = new ClassA();
2.5: a.xA = 12;
2.6: a.yA = "Hello";
2.7: System.out.println("a.xA = " + a.xA + "; a.yA = " + a.yA);
2.8: }
2.9: }
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.5, 2.6, 2.7
Lỗi biên dịch dòng 2.5
Lỗi biên dịch dòng 2.6, 2.7
xA = 12; a.yA = Hello
Chọn đáp án C
Vì:
Thuộc tính yA của lớp ClassA được khai báo với từ khóa private nên không được truy xuất.
Cho xâu kí tự s=”ABCDEF”. Để lấy kỳ tự thứ ‘E’ của xâu ký tự s(String) dùng Câu lệnh nào sau đây?
Chọn một Câu trả lời
s.charAt(5)
s.charAt(4)
s[5]
s[4]
Chọn đáp án B
Vì:
Xâu kí tự có chỉ số bắt đầu từ 0.
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.
Chọn đáp án C
Vì:
biểu thức array.length trả về số phần tử trong mảng.
Trong các khai báo sau đâu là khai báo không hợp lệ?
Chọn một Câu trả lời
int a1[][] = new int[][3];
int a2[][] = new int[2][3];
int a3[][] = new int[2][];
int a4[][] = {{}, {}, {}};
Chọn đáp án A
Vì:
+ Bắt buộc phải xác định số dòng trong khai báo mảng hai chiều.
(1) Nếu 2 đối tượng bằng nhau trong cùng một mảng và mảng đó được sắp xếp, các phần tử bằng nhau không thể thay đối thứ tự của chúng?
(2) Chỉ số mảng bắt đầu từ 1
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, (2) sai
Chọn đáp án B
Vì:
mảng truy xuất phần tử theo chỉ số của nó, nếu 2 phần tử có giá trị giống nhau thì cũng sẽ nằm ở vị trí khác nhau, do dó không thể thay đổi thứ tự của chúng được.
+ Chỉ số mảng bắt đầu từ 0.
Phát biểu sau nào là SAI
Chọn một Câu trả lời
Mảng có kích thước không đổi trong toàn bộ chương trình
Mảng là cấu trúc dữ liệu có khả năng lưu trữ nhiều thành phần (phần tử) dữ liệu với kiểu khác nhau
Mảng N phần tử được đánh chỉ số từ 0 đến N - 1
Chỉ số mảng bắt đầu bằng 0
Chọn đáp án B
Vì:
Mảng chỉ có thể lưu trữ các phần tử có cùng kiểu dữ liệu.
Lệnh sau in ra cái gì?
1: final int ARRAY_SIZE = 5;
2: ARRAY_SIZE = 10;
3: System.out.println("size = " + ARRAY_SIZE);
Chọn một Câu trả lời
size = 10
size = 5
Lỗi ở dòng 3
Lỗi ở dòng 2
Chọn đáp án D
Vì:
+ Không thể gán giá trị cho các biến kiểu final
1. class A {
2. final public int method1(int a, int b) {return 0; }
3. }
4. class B extends A {
5. public int method1(int a, int b) { return 1; }
6. }
7. public class Test {
8. public static void main(Strings args[]) {
9. B b;
10. System.out.println("x = " + b.method1(0, 1));
11. }
12. }
Chương trình sẽ in ra cái gì?
Chọn một Câu trả lời
x = 0
x = 1
Lỗi biên dịch
x=10
Chọn đáp án C
Vì:
Lớp A là lớp con của lớp B và phương thức method1() trong lớp cha đã khai báo là final do vậy không thể thực hiện ghi đè trong lớp con.
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());
}
}
Chọn một Câu trả lời
10
11
10
10
11
11
Không in gì và báo lỗi
Chọn đáp án B
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() của đối tượng s => gọi đến phương thức getAge() của lớp Student => in ra 10
Đoạn mã sau có lỗi biên dịch nào?
class Student {
public String name;
}
public class Man extends Student{
private String name;
}
Chọn một Câu trả lời
Có lỗi biên dịch:name has private access in Man.
Không có lỗi biên dịch.
Có lỗi biên dịch:for name access modifier in Man for name is weaker in Student.
Có lỗi biên dịch:name has public access in Student.
Chọn đáp án B
Vì:
Thuộc tính không có ràng buộc về access modifier ở lớp con và lớp cha.Và thuộc tính ở mỗi lớp có thể nhận default, protected, private, public là access modified.
Đ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.
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ế.
Đoạn mã sau có kết quả như thế nào?
class Student {
private String name;
}
public class Man extends Student{
private String name;
public static void main(String[] args) {
Student m = new Student();
m.name="Peter";
}
}
Chọn một Câu trả lời
Có lỗi biên dịch:name has private access in Student.
Không có lỗi biên dịch.
In ra chữ “student”
in ra chữ “Peter”
Chọn đáp án A
Vì:
+ Không thể truy xuất vào thuộc tính private từ bên ngoài lớp
Đoạn lệnh nào sẽ đưa ra lỗi biên dịch?
Chọn một Câu trả lời
class A { public A(int x) {} }
class A {}
class B extends A { B() {}}
class A { A() {}}
class B { public B() {} }
class Z { public Z(int) {} }
class A extends Z { }
Chọn đáp án D
Vì:
Tham số truyền cho hàm tạo của lớp Z chưa xác định tên nên sinh lỗi.
Đ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{
}
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 is empty.
Có lỗi biên dịch:class Student is empty, class Man is empty.
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). Nên đáp án A đúng và D, C, D sai.
Đ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.
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).
Đ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.
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.
Đoạn mã sau có lỗi biên dịch gì? public class Person { protected 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 protected access.
age has protected access.
name has public access.
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.
Đọc đoạn mã sau:
1.0: package pac02;
1.1: public class ClassA {
1.2: protected int xA;
1.3: public String yA;
1.4:}
---------
2.0: package pac01;
2.1: import pac02.ClassA;
2.2: public class Test {
2.3: public static void main(String[] args) {
2.4: ClassA a = new ClassA();
2.5: a.xA = 12;
2.6: a.yA = "Hello";
2.7: System.out.println("a.xA = " + a.xA + "; a.yA = " + a.yA);
2.8: }
2.9: }
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.7
Lỗi biên dịch dòng 2.5
Lỗi biên dịch dòng 2.5, 2.7
xA = 12; a.yA = Hello
Chọn đáp án C
Vì:
thuộc tính xA của lớp ClassA được khai báo với từ khóa protected nên không được truy xuất từ ngoài gói pac02.
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 java.school.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.
Chọn đáp án B
Vì:
Lớp Student không ở package java.test mà ở java.school, và bạn không import vào gói java.test, nhưng khi dùng bạn đã chỉ rõ lớp ở package java.school.Student. Nên trình biên dịch hiểu.
Nên đáp án: Có lỗi biên dịch:
can not find symbol test.Student Và Có lỗi biên dịch: Add import java.school.Student
sai và đáp án: Không có lỗi biên dịch đúng.
Khi bạn không khai báo một constructor nào thì trình biên dịch tự động tạo ra một constructor mặc định (không có tham số) cho lớp đó. Nên đáp án: Có lỗi biên dịch:
can not find constructor Student() for Student sai.
Đoạn mã sau có lỗi biên dịch gì?
public class Person {
private String name;
private 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 private access.
name has public access.
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.
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) {
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.
Chọn đáp án A
Vì:
-Lớp Student không ở package java.test mà ở java.school, mà 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, nhưng không có.
-Add import java.school.Student là một gợi ý
Chương trình sau in ra mà 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: names = new String[5];
05: System.out.println(names[2]);
06: }
07: }
Chọn một Câu trả lời
Có lỗi biên dịch: use new keyword to create object
Peter
Anna
null
Chọn đáp án D
Vì:
+ Lệnh 3 sẽ khai báo một mảng names và khởi tạo các giá trị cho mảng lần lượt là “John”, “Anna”,….
+ Tuy nhiên lệnh sau (4) lại tạo lại mảng names và không gán giá trị cho các phần tử mảng => các phần tử sẽ có giá trị null
(1) Nếu 2 đối tượng bằng nhau trong cùng một mảng và mảng đó được sắp xếp, các phần tử bằng nhau không thể thay đối thứ tự của chúng?
(2) Chỉ số mảng bắt đầu từ 1
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
Chọn đáp án B
Vì:
mảng truy xuất phần tử theo chỉ số của nó, nếu 2 phần tử có giá trị giống nhau thì cũng sẽ nằm ở vị trí khác nhau, do dó không thể thay đổi thứ tự của chúng được.
+ Chỉ số mảng bắt đầu từ 0.
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
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
StringBuffer s = new StringBuffer("hello how are you how?");
int x = s.indexOf("ow");
System.out.println(x);
Trong đoạn mã trên x nhận giá trị bao nhiêu?
Chọn một Câu trả lời
7
6
5
Lỗi biên dịch
Chọn đáp án A
Đúng. Đáp án đúng là: "7"
Vì:
Hàm indexOf trả về vị trí đầu tiên xuất hiện của chuỗi ow trong chuỗi s( là ở vị trí thứ 7).
Phát biểu sau nào là SAI
Chọn một Câu trả lời
Mảng có kích thước không đổi trong toàn bộ chương trình
Mảng là cấu trúc dữ liệu có khả năng lưu trữ nhiều thành phần (phần tử) dữ liệu với kiểu khác nhau
Mảng N phần tử được đánh chỉ số từ 0 đến N - 1
Chỉ số mảng bắt đầu bằng 0
Chọn đáp án B
Vì:
Mảng chỉ có thể lưu trữ các phần tử có cùng kiểu dữ liệu.
Lệnh sau in ra cái gì?
1: final int ARRAY_SIZE = 5;
2: ARRAY_SIZE = 10;
3: System.out.println("size = " + ARRAY_SIZE);
Chọn một Câu trả lời
size = 10
size = 5
Lỗi ở dòng 3
Lỗi ở dòng 2
Chọn đáp án D
Vì:
+ Không thể gán giá trị cho các biến kiểu final
Đ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.
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.
Đ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
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).
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());
}
}
Chọn một Câu trả lời
10
11
10
10
11
11
Không in gì và báo lỗi
Chọn đáp án B
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() của đối tượng s => gọi đến phương thức getAge() của lớp Student => in ra 10








