200+ câu trắc nghiệm Lập trình Java cơ sở có đáp án - Phần 7
30 câu hỏi
Cho class như sau:
1: public interface Comparable {
2: int compareTo(Object other);
3: }
4: class Employee implement Comparable {
5: int compareTo(Object other) {
6: Employee other = (Employee) otherObject;
7: return 0;
8: }
9: }
Chương trình trên sai ở dòng nào?
1
2, 4
2, 4, 5
4, 5
Chọn đáp án D (Lưu ý: implement sai, phải là implements. otherObject ở dòng 6 chưa được khai báo. Phương thức compareTo khi implement interface phải là public)
Cho class như sau:
1: public interface Comparable {
2: int compareTo(Object other);
3: }
4: class Employee implements Comparable {
5: public int compareTo(Object other) {
6: other = otherObject;
7: return 0;
8: }
9: }
Chương trình trên sai ở dòng nào?
2, 6
2, 4
5
6
Chọn đáp án D (Lưu ý: otherObject ở dòng 6 chưa được khai báo.)
Cho class như sau:
1: public interface Comparable {
2: int compareTo(Employee other);
3: }
4: class Employee implements Comparable { // Giả định sửa lỗi cú pháp ở đây
5: public int compareTo(Employee other) {
6: return 0;
7: }
8: }
Chương trình trên sai ở dòng nào?
1
2, 4
5
Không sai ở dòng nào cả
Chọn đáp án D (Với giả định sửa implements Comparable thành implements Comparable)
Cho class như sau:
1: public interface Comparable {
2: int compareTo(Employee other);
3: }
4: class Employee implements Comparable {
5: public int compareTo(Object other) {
6: return 0;
7: }
8: }
Chương trình trên sai ở dòng nào?
1
2, 4
5
8
Chọn đáp án C (Lớp Employee implement Comparable nhưng lại override compareTo(Object other) thay vì compareTo(Employee other))
Cho class như sau:
1: public interface Comparable {
2: int compareTo(Employee other);
3: }
4: class Main {
5: x = new Comparable(Employee e);
6: System.out.print(x);
7: }
Chương trình trên sai ở dòng nào?
1
2, 4
5
8
Chọn đáp án C (Lỗi cú pháp. Không thể khởi tạo một interface, và biến x chưa được khai báo kiểu dữ liệu)
Cho class như sau:
1: public interface Comparable {
2: int compareTo(Employee other);
3: }
4: class Main {
5: Comparable x;
6: x = new Employee();
7: System.out.print(x);
8: }
Chương trình trên sai ở dòng nào?
1
2, 4
5
Không sai ở dòng nào cả
Chọn đáp án D (Giả sử lớp Employee đã được định nghĩa và implements Comparable)
Cho khối lệnh như sau:
class Employee {
private double luong = 0;
public Employee (double d) {
luong = d;
}
public void tangLuong(int s) {
luong += luong * s / 100;
}
public static void main(String[] args) {
Employee original = new Employee(50000);
Employee copy = original;
copy.tangLuong(10);
}
}
Khi chạy khối lệnh trên, luong của đối tượng original là bao nhiêu?
50000
55000
60000
57000
Chọn đáp án B
Cho khối lệnh như sau:
class Employee {
private double luong = 0;
public Employee (double d) {
luong = d;
}
public void tangLuong(int s) {
luong += luong * s / 100;
}
public static void main(String[] args) {
Employee original = new Employee(50000);
Employee copy = original;
copy.tangLuong(10);
}
}
Khi chạy khối lệnh trên, luong của đối tượng copy là bao nhiêu?
50000
55000
60000
57000
Chọn đáp án B (Lưu ý: copy và original cùng tham chiếu đến một đối tượng, nên lương của cả hai đều là 55000. Đáp án C là không chính xác)
Cho khối lệnh như sau:
class Employee {
private double luong = 0;
// Constructor và các phương thức khác bị thiếu hoặc sai
public void tangLuong(int s) { // Giả sử phương thức đúng
luong += luong * s / 100;
}
public static void main(String[] args) {
// Lỗi khởi tạo new Employee(“John Public”,50000);
Employee original = new Employee(50000); // Giả sử khởi tạo đúng
Employee copy = original;
original.tangLuong(10);
}
}
Khi chạy khối lệnh trên, luong của đối tượng copy là bao nhiêu?
50000
55000
60000
Lệnh sai
Chọn đáp án D (Lỗi cú pháp trong new Employee(“John Public”,50000) và định nghĩa hàm tangLuong())
Khi thực hiện khối lệnh sẽ cho kết quả là bao nhiêu?
int i=0; do { i += 1; } while (i == 0); System.out.println(“i = “ + i);
i = 0
i = 1
i = 2
Tất cả đều sai.
Chọn đáp án B
Khi a=3 thực hiện khối lệnh sẽ cho kết quả của i là bao nhiêu?
int i=1; int s=1; for(i=1;i<=a;i++) s=s*i;
</=a;i++)>
i = 2
i = 3
i = 4
Tất cả đều sai.
Chọn đáp án C (Sau vòng lặp, i sẽ có giá trị là 4)
Cho khối lệnh sau:
int s = 0; for (int i = 0; i <= 10; i++) s += i;
Sau khi chạy khối lệnh s = ?
</=>
0
55
45
50
Chọn đáp án B
Cho đoạn mã sau kết quả hiển thị sẽ là:
int n=12,k=2;
while(k<=n){ // Giả sử điều kiện là k<=n để tránh lặp vô hạn
for(k=2;k<=n;k++)
if(n%k==0){
break;
}
System.out.print(k + " ");
n=n/k;
}
</=n;k++)</=n){>
2 2 3
3 2 2
6
2 3 6
Chọn đáp án A (Đoạn mã này phân tích n thành thừa số nguyên tố)
Cho biết kết quả khi thi hành đoạn chương trình sau:
1: public class Short {
2: public static void main(String[] args ){
3: String s="Hello";
4: if(s.length ()>5)
5: ;//do nothing
6: else // Thêm else để code có logic
7: System.out.print("value is " + s);
8: }
9: }
value is Hello
Lỗi biên dịch tại dòng 4 và 5
Lỗi biên dịch tại dòng 1
Thông báo NullPointerException
Chọn đáp án A (Điều kiện s.length() > 5 là sai, nên sẽ thực hiện khối else và in ra "value is Hello")
Cho biết kết quả khi thi hành đoạn chương trình sau:
1: public class Short {
2: public static void main(String[] args ){ 3: String s=“Hello”;
4: if(s.length ()>5)
5: ;//do nothing
6: System.out.print(“value is”+ s); 7: }
8:}
value is Hello
Lỗi biên dịch tại dòng 4 và 5
Lỗi biên dịch tại dòng 1
Thông báo NullPointerException
Chọn đáp án D
Cho khối lệnh như sau, kết quả in ra màn hình sẽ là:
int k,n; for(k=1;k<10;k++) if((k%3==0)||(k%7==0)) System.out.print(k + "\t");
</10;k++)>
21
3 và 7
3 6 7 9
Không in ra gì cả
Chọn đáp án C
Cho khối lệnh như sau, kết quả in ra màn hình sẽ là:
int k,n; for(k=1;k<10;k++) if((k%3==0)&&(k%7==0)) System.out.print(k + " ");
</10;k++)>
21
3 7
3 6 7 9 12 14 15 18 21 24 27 28
Không in ra gì cả
Chọn đáp án D (Không có số nào nhỏ hơn 10 mà vừa chia hết cho 3 vừa chia hết cho 7)
Khi chạy đoạn chương trình sau cho kết quả bằng bao nhiêu?
int s,i;
for(i=1;i<=3;i++) {
s=s+i;
s=0;
}
System.out.print("s="+s);
</=3;i++)>
s=0
s=1
s=3
Lỗi biên dịch
Chọn đáp án D (Biến s chưa được khởi tạo)
Khi chạy đoạn chương trình sau cho kết quả bằng bao nhiêu?
int s=0,i;
for(i=1;i<=3;i++) {
s=s+i;
s=0; // s bị reset về 0 trong mỗi vòng lặp
}
System.out.print("s="+s);
</=3;i++)>
s=0
s=1
s=3
s=6
Chọn đáp án A
Khi chạy đoạn chương trình sau cho kết quả bằng bao nhiêu?
int i;
float p;
p=1;
for(i=1;i<3;i++) {
p=p*i;
p=p*p;
}
System.out.print("p="+p);
</3;i++)>
p=6
p=4
p=124
p=144
Chọn đáp án B (Vòng 1: p=1*1=1, p=1*1=1. Vòng 2: p=1*2=2, p=2*2=4. Kết quả cuối là 4.0)
Khi chạy đoạn chương trình sau cho kết quả bằng bao nhiêu?
int [] a;
int s=0,i;
a=new int[3];
a[0]=1;
a[1]=2;
a[2]=5;
for(i=0;i<3;i++)
s=s+a[i];
System.out.print("s="+s);
</3;i++)>
Lỗi biên dịch
s=8
s=7
s=5
Chọn đáp án B (1 + 2 + 5 = 8)
Khi chạy đoạn chương trình sau cho kết quả bằng bao nhiêu?
int [] a; int s,i;
a=new int[3];
a[0]=1;
a[1]=2;
a[2]=5;
for(i=0;i<3;i++) // Lỗi cú pháp i++
s=s+a[i];
System.out.print("s="+s);
</3;i++)>
Lỗi biên dịch
s=8
s=7
s=5
Chọn đáp án A (Biến s chưa được khởi tạo và lỗi cú pháp ở i++)
Khi chạy đoạn chương trình sau cho kết quả bằng bao nhiêu?
public class JavaAppClass {
public static int sum() {
int sum = 0, pt = 5;
for (int i = 0; i < pt; i++)
sum+=pt;
// sum; // Lệnh này sai cú pháp, phải là return sum;
}
public static void main(String[] args) {
System.out.print(JavaAppClass.sum());
}
}
</>
Lỗi biên dịch
25
5
15
Chọn đáp án A (Phương thức sum có kiểu trả về là int nhưng không có lệnh return)
Khi chạy đoạn chương trình sau cho kết quả bằng bao nhiêu?
public class StatInit {
static int x = 6,y;
static {
for (int i = 0; i < 6; i++)
y += x;
}
public static void main(String[] args) {
System.out.print(x);
}
}
</>
Lỗi biên dịch
6
36
18
Chọn đáp án B
Khi chạy đoạn chương trình sau cho kết quả bằng bao nhiêu?
public class StatInit {
static int x = 6,y;
static {
for (int i = 0; i < 6; i++)
y += x;
}
public static void main(String[] args) {
System.out.print(y);
}
}
</>
Lỗi biên dịch
6
36
18
Chọn đáp án C
Ưu điểm của nested class là gì?
Cho phép nhóm logic các class
Tăng tính đóng kín
Dễ sửa, thay đổi code
Tất cả các tính chất trên
Chọn đáp án D (Nested class mang lại cả 3 ưu điểm trên)
Xác định câu đúng?
Một package không thể có package con
package có thể có 2 thành viên trùng tên
Tên của package phải viết chữ thường
Nếu một class hoặc interface được nhóm trong package, khi tham chiếu chúng, không cần phải sử dụng tên đầy đủ hợp lệ của chúng.
Chọn đáp án C (Theo quy ước, tên package nên viết chữ thường)
Khi chạy đoạn chương trình sau cho kết quả bằng bao nhiêu?
class Employee{
public int id;
public Employee() {
id = 1;
}
}
public class Accountant {
public static void main(String[] args) {
System.out.print(new Employee().id);
}
}
0
1
20
Lỗi biên dịch
Chọn đáp án B
Khi chạy đoạn chương trình sau cho kết quả bằng bao nhiêu?
class Employee{
private int id;
public Employee() {
id = 1;
}
}
public class Accountant {
public static void main(String[] args) {
System.out.print(new Employee().id);
}
}
0
1
20
Lỗi biên dịch
Chọn đáp án D (Không thể truy cập thuộc tính id private từ bên ngoài lớp Employee)
Xác định câu SAI?
Khi khai báo thành viên, quyền private không thể sử dụng với abstract, nhưng có thể sử dụng với static và final
Không thể khai báo lặp từ khoá truy cập trong cùng 1 khai báo
Constructor khi khai báo private không thể truy cập được trong class tạo ra nó
Constructor khi khai báo protected có thể được truy cập trong lớp tạo ra nó và trong các lớp thừa kế
Chọn đáp án C (Constructor private vẫn có thể được gọi từ bên trong chính lớp đó, ví dụ trong một phương thức static để triển khai mẫu Singleton)








